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

Shared access policy for storing images in Azure blob storage

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

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

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

Is it possible to update expiry time of shared access policy of blob container through Azure portal?

截至目前,无法使用 Azure 门户管理 blob 容器上的共享访问策略。您将需要使用其他一些工具或编写代码来执行此操作。

Is it possible to set indefinite expiry time for shared access policy?

您可以在不指定到期时间的情况下创建共享访问策略。这意味着您需要在创建共享访问签名时指定到期时间。你可以做的(虽然不推荐 - 下面有更多内容)是使用像 9999 年 12 月 31 日这样的日期作为共享访问策略的到期日期。

Is it good practice to set indefinite expiry time of shared access policy with READ permission?

建议您根据自己的业务需要设置合适的过期时间。通常建议您将共享访问签名中的到期时间保持为一个较小的值,这样 SAS 就不会被滥用,因为您需要为存储帐户中的数据和出站带宽付费。

I don't understand advantage of using SAS in my case as any user having SAS can see image (for example my friend who receives image uri with sas). So, is there any advantage? Can anyone explain me this?

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

您可能会发现此 link 对共享访问签名的一些最佳实践很有帮助:https://azure.microsoft.com/en-in/documentation/articles/storage-dotnet-shared-access-signature-part-1/#best-practices-for-using-shared-access-signatures

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

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

一个好的做法是使用访问策略而不是临时 SASs,因为这为以下内容提供了一个中央控制点:

  • 开始时间
  • 结束时间
  • 访问权限(读、写等)
链接到访问策略的

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

不可能为 SAS 设置无限期的到期时间,将 SASs 视为文件系统中绕过文件权限的文件的快捷方式也不是好的做法。快捷方式本身无法撤销或在您创建后进行修改 - 世界上任何地方获得副本的任何人都将获得相同的访问权限。

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

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

由于您需要 authentication/authorisation 应用程序,我建议您设置一个服务,该服务动态(以编程方式)生成 SASs 并具有合理的到期时间,并将您的用户引向这些 URLs.

参考:Using Shared Access Signatures (SAS)

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

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

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

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

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