用于在Azure blob存储中存储图像的共享访问策略

时间:2016-10-03 12:36:02

标签: azure azure-storage-blobs

是否可以通过Azure门户更新blob容器的共享访问策略的到期时间?

是否可以为共享访问策略设置无限期到期时间?我有一个具有html编辑器的应用程序,用户将图像上传到Azure blob存储。因此,他们可以上传图像并通过生成的uri查看它们。我使用了具有READ权限的共享访问策略,以便用户可以在html中查看图像?使用READ权限设置共享访问策略的无限期到期时间是一种好习惯吗?

我不希望我的图像公开,我只是希望经过身份验证的用户能够看到图像。我不明白在我的情况下使用SAS的优势,因为任何有SAS的用户都可以看到图像(例如我的朋友用sas接收图像uri)。那么,有什么优势吗?谁能解释一下这个?

3 个答案:

答案 0 :(得分:2)

  

是否可以更新blob的共享访问策略的到期时间   容器通过Azure门户?

截至今天,无法使用Azure门户管理Blob容器上的共享访问策略。您需要使用其他一些工具或编写代码才能这样做。

  

是否可以为共享访问策略设置无限期到期时间?

您可以创建共享访问策略,而无需指定到期时间。这意味着您需要在创建共享访问签名时指定到期时间。您可以做什么(虽然不推荐 - 以下更多内容)使用类似于9999年12月31日的共享访问策略的到期日期。

  

设置共享访问的无限期到期时间是一种好习惯   具有READ权限的策略?

建议您根据业务需求将到期时间设置为适当的值。通常,建议您将共享访问签名中的到期时间保持为较小的值,以便SAS不会被滥用,因为您负责支付存储帐户中的数据和出站带宽。

  

我不明白在我的情况下使用SAS作为任何用户的优势   有SAS可以看到图像(例如我的朋友谁收到图像uri   与sas)。那么,有什么优势吗?谁能解释一下这个?

SAS的最大优势是您可以在不共享存储访问密钥的情况下共享存储帐户中的资源。此外,您可以通过指定适当的权限和共享到期来限制对这些资源的访问。虽然拥有SAS URL的任何人都可以访问该资源(如果您的用户决定与其他人共享SAS URL),并且这不是100%万无一失的解决方案,但有一些方法可以缓解这些问题。您可以创建短期SAS URL,并将SAS URL的使用仅限于某些IP地址(IP ACL)。

您可能会发现此链接对于有关共享访问签名的一些最佳做法非常有用:https://azure.microsoft.com/en-in/documentation/articles/storage-dotnet-shared-access-signature-part-1/#best-practices-for-using-shared-access-signatures

答案 1 :(得分:1)

首先,如果要更改临时共享访问签名(SAS)的到期时间,则需要重新生成(重新签名)并将其重新分发给SAS的所有用户。这并不会影响您当前正在使用的现有SAS的有效性。

如果要撤销SAS,则需要首先为已签署SAS的存储帐户重新生成访问密钥(这也会撤销已签署的所有其他SAS)。如果您已在其他位置使用过访问密钥,则您还需要更新这些参考。

一个好的做法是使用访问策略而不是ad-hoc SAS,因为这为以下内容提供了一个集中控制点:

  • 开始时间
  • 结束时间
  • 访问权限(读取,写入等)

通过将到期时间更改为过去,可以撤消与访问策略链接的SAS。虽然您可以删除访问策略以达到相同的效果,但如果您重新创建具有相同名称的访问策略,旧SAS将再次生效。

无法为SAS设置无限期到期时间,并且将SAS视为文件系统中的快捷方式与绕过文件权限的文件一样,也不是优秀做法。在您创建快捷方式后,快捷方式无法撤消或修改 - 世界上任何获取副本的人都将获得相同的访问权限。

例如,任何有权访问您的应用程序的人(或任何有权访问网络流量的人,如果您使用的是HTTP)都可以保留SAS URL的副本,并访问该容器中的任何资源 - 或者分发URL并允许其他未经授权的用户这样做。

在您的情况下,如果没有SAS,您将在响应请求之前从需要身份验证(可能是授权)的Web服务器提供图像。这引入了SAS部分设计解决的开销,成本和潜在复杂性。

由于您需要对应用程序进行身份验证/授权,我建议您设置一个以合理的到期时间动态(以编程方式)生成SAS的服务,并将您的用户引用到这些URL。

参考: Using Shared Access Signatures (SAS)

编辑:Microsoft Azure Storage Explorer对于管理访问策略并针对它们生成SAS非常有用。

答案 2 :(得分:0)

您可以设置很长的到期时间,但微软不建议这样做,安全专家也不会推荐这样的东西,因为它违背了SAS的想法

https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-shared-access-signature-part-1/

至于问题的第二部分,我不确定如何允许他们上传图像,是在容器级别直接使用SAS还是在应用程序中发布一些代码并且应用程序连接到Azure存储并上传文件?

如果您有后端服务,那么您可以取消SAS并使您的服务作为代理服务器,只有您的服务将使用存储帐户访问密钥读取和写入Azure存储,并且客户端将访问您的服务以进行读取和写下他们需要的图像,在这种情况下,客户端将无法直接访问Azure存储。