用于在 Azure Web App 上提供内容的 Azure 存储选项

Azure storage options to serve content on Azure Web App

我是 Azure WebApps 和存储的新手,我需要一些 clarification/confirmation。需要注意的主要事项是,我的应用程序(如下所述)需要一个文件夹层次结构。 Blob 是不可能的,文件共享不允许匿名访问,除非我使用共享访问签名 (SAS)。

我对 Azure 存储的理解是否正确,你是否适合 Azure 存储模型?

谁能告诉我如何使用 Blob 实现 CMS 应用程序的要求,如下所述?

我看到的唯一选择是找到一种方法来更改 CMS 应用程序,以便它始终在 URL 中为它从存储请求的每个文件提供 SAS,以便在我的 Web 应用程序上提供内容?如果是这样,如果我将我的 SAS 设置为在遥远的将来某个时候过期,这会不会有问题?

https://<appname>.file.core.windows.net/instance1/site1/file1.jpg?<SAS>

使用 Blob 时出现问题

到目前为止,我的理解是 Blob 存储不允许“子文件夹”,因为它是一个保存非结构化数据的容器,因此我无法根据我的应用程序(如下所述)使用它,因为它需要文件夹结构。

使用文件共享的问题

文件共享似乎很完美,因为它允许文件夹层次结构,自然这就是我使用的。

但是,存储在文件存储中的文件不允许匿名访问,访问需要授权。授权访问的一种方法是在 file/share 级别上创建具有读取权限的 SAS,然后使用该 SAS URL 访问文件。

Cannot access Windows azure file storage document

我的申请

我创建了一个 Linux Web 应用程序 运行 开源 CMS 应用程序。此应用程序允许创建多个网站,每个网站的内容(例如图像、文档、多媒体)将存储在文件服务器上。这些文件然后通过定义的 URL.

提供给网站

CMS 应用程序允许设置文件保存位置,这将是文件服务器上的一个文件夹。然后,它会为其在该位置托管的每个站点创建一个新的子文件夹。

示例文件夹层次结构

/instance1
           /site1
                  /file1
                  /file2
           /site2
                  /file1
                  /file2 

Am I understanding Azure storage correctly, it's either you fit into the Azure storage model or you don't?

您可以将 Azure 存储模型用于您的 CMS 应用程序。您可以使用 Blob 存储或文件共享

Can anyone advise how I can achieve what's required by the CMS application as described below by using Blobs?

如果要使用 Azure Blob 存储,可以使用 Data Lake Gen 2 存储帐户。

Data Lake Gen 2 存储启用分层命名空间,以便您可以根据需要使用 Blob 存储中的子文件夹

Problem with using Blob

如果我们使用 Data Lake Gen 2 存储帐户,Blob 存储允许子文件夹。您可以启用 Blob Public 匿名访问

The problem with using File Share

Azure 文件共享支持但不允许 public 匿名访问。您可以为 Web 应用使用 Azure 托管标识(系统分配)来访问 Azure 文件共享。

然后您的应用程序将能够在没有 SAS 令牌的情况下访问 Azure 文件共享

在 blob 存储中没有真实文件夹的问题对于您的用例来说应该不是任何问题。仅仅因为它没有您的传统文件夹并不意味着它不能在例如网站上提供内容。 instance1/site1/file1。这仍然是可能的,但 instance1/site1/ 将只是 blob 名称的一部分。

Azure 门户或存储资源管理器等工具实际上会使用分隔符 / 显示文件夹,并使用路径作为前缀查询似乎位于文件夹内的数据。