【问题标题】:Shared access policy for storing images in Azure blob storage用于在 Azure Blob 存储中存储图像的共享访问策略
【发布时间】:2017-02-11 09:53:32
【问题描述】:

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

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

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

【问题讨论】:

  • 您的用户在哪里进行身份验证?

标签: azure azure-blob-storage


【解决方案1】:

是否可以更新 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 ACLing)。

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

【讨论】:

  • 是否有简单的方法将 blob 访问(uri + sas)限制为我的 Web 应用程序的 IP 地址?
  • 它实际上是客户端 IP 地址,所以您需要做的是找出用户计算机的 IP 地址并为该 IP 地址创建一个 SAS 并将 SAS 返回给用户。
【解决方案2】:

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

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

一个好的做法是使用访问策略而不是临时 SAS,因为这提供了一个中心控制点:

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

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

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

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

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

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

参考:Using Shared Access Signatures (SAS)

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 2019-03-13
      • 2016-03-04
      • 2021-02-24
      • 1970-01-01
      • 2020-02-24
      • 2011-12-23
      • 2018-08-17
      • 1970-01-01
      相关资源
      最近更新 更多