如何为Azure中的容器定义只读访问连接字符串?

问题描述:

在Azure订阅中,我有一个具有多个定义容器的存储帐户。目前我所有的代码都使用连接字符串的主访问键来读写数据到容器。所有容器都是私人的。我可以为存储帐户生成一个只读连接字符串还是必须为每个容器定义它?如何为Azure中的容器定义只读访问连接字符串?

此时,无法为存储帐户创建只读连接字符串。从平台的角度来看,你唯一的选择是使用Shared Access Signatures/Container Level ACL,但是你必须为每个blob容器单独做。其他选项是创建您自己的应用程序,它充当您的用户和您的存储帐户之间的代理。所有对您的存储帐户的请求都将通过此应用程序进行路由,并且您可以在拒绝GET以外的所有请求(只读行为)的情况下包含此只读机制。

+1

谢谢......这就是我所害怕的。该项目被设计为具有> 20个独立的容器来模拟文件系统的文件夹。回到绘图板我猜。并将改进的想法提交给Azure。 – 2013-04-24 04:41:36

+0

回复:“该项目的架构设计为具有> 20个独立的容器” - 如果需要,您仍然可以这样做,但不是/ a,/ b,/ c等,您可以有/ data/a,/ data/b,/ data/c等,并通过Gaurav提及的共享访问签名功能提供对/数据的只读访问。这将允许单个密钥访问所有20多个区域,保持文件系统的感觉。 – codingoutloud 2013-04-26 17:39:48

如果您试图模仿文件系统的文件夹,那么您可能需要考虑在单个blob容器内创建虚拟目录,而不是创建> 20个独立的容器来表示文件夹。在另一个堆栈溢出问题中讨论目录的使用:Windows Azure: How to create sub directory in a blob containerAzure Storage Blobs Service Working with DirectoriesCloudBlobDirectory Class表示由分隔符指定的blob Blob目录。如果将所有目录放在一个容器中,则可以通过交替配置公共访问(例如匿名读取访问),共享访问签名或 来为此容器中的所有Blob(包括子目录中的斑点)设置一次访问权限。容器上的存储访问策略可能对您有用,因为它可以使您部署的SAS字符串被撤销,扩展或更新,而无需重新部署新字符串。