【问题标题】:Does Azure Shared Access Signature mean anyone can access my blobs?Azure 共享访问签名是否意味着任何人都可以访问我的 blob?
【发布时间】:2010-06-24 13:23:42
【问题描述】:

我正在编写一个备份服务来备份 SQL 数据库并将其保存在云存储中。我实际上已经使用 Amazon S3 实现了这一点,但由于应用程序将分发给客户,我无法将 API 密钥与应用程序一起存储。我考虑过使用网络服务来提供密钥,但这不是我目前最好的选择(因为它仍然存在密钥被盗的可能性。)

所以我研究了 Windows Azure,Blob 服务,发现他们有这些共享访问签名,可用于提供对云中资源的访问。您还可以使用签名将 blob 放入云中。但是通过MSDN docs 阅读,我不禁认为这是一个不安全的系统。任何知道 1. 我帐户的容器的确切名称和 2. 如何形成签名的人都可以访问这些对象。使用此签名时,您不需要密钥。至少这是我阅读文档的印象。

所以最后我的问题。我对与 Azure 的共享访问签名的评估是否正确,如果不正确,为什么?任何人都可以提出另一种方法来做我想要完成的事情。

【问题讨论】:

  • 所以我现在看到您必须通过使用您的密钥加密来计算签名哈希。所以这回答了我的第一个问题(我最初的评估是错误的)。 Azure 允许您创建无限数量的容器,因此我将为每个客户提供一个容器。客户将调用我的 Web 服务,然后该服务将生成客户独有的签名。这样,任何加密密钥、容器名称等都可以在我的服务器上受到保护,而不是在客户端系统上。

标签: .net azure cloud database-backups


【解决方案1】:

共享访问签名的范围可以是特定容器或特定 blob。然后,他们可以指定他们授予的权限(读取、写入、列出 blob),并且可以指定它们的有效期。

创建 SAS 的唯一方法是拥有存储密钥,但任何拥有 SAS 的人都可以使用它来做它允许他们做的事情。

听起来您想让所有客户写入 blob 但不读取它们?如果是这样,只指定写入权限的 SAS 应该可以解决问题。

但我假设您还想限制(或计量)单个客户的使用量?如果是这样,您可能需要在服务器上启用一些活动(Web 服务?),以授权每次使用并生成特定的短期 SAS 以允许该操作。然后,您可以跟踪每次使用并计费。

【讨论】:

  • 我还需要允许读取,以实现我尚未实现的恢复功能。我想我会在客户需要在云上进行操作的任何时候使用 Web 服务来生成 SAS。
  • 可能是一个愚蠢的问题,但是在构造签名时,它会考虑 blob URL 吗?所以在 blob 上创建的 SAS 只对那个 blob 有用?如果我在该容器中有一个 blob 的 URL 列表,我不能在最后从一个 blob 中获取 SAS 令牌并访问其他 blob?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 2022-10-21
  • 2013-05-29
  • 1970-01-01
相关资源
最近更新 更多