如何在 Azure 中的密钥轮换后为存储 Blob 的客户端请求提供服务

Posted

技术标签:

【中文标题】如何在 Azure 中的密钥轮换后为存储 Blob 的客户端请求提供服务【英文标题】:How to serve client request for Storage Blob after key rotation in Azure 【发布时间】:2019-11-15 01:28:24 【问题描述】:

我有一些资源的 blob 存储。我向客户端提供 SAS 令牌,并且每个令牌仅针对客户端的特定 blob 生成。一段时间后,我想轮换我的帐户密钥,因此所有实际客户的令牌都将失效(客户没有帐户密钥,他们只有令牌)。

我想知道是否有人有类似的情况,当使用 REST API 到 Azure 存储时,必须在密钥轮换后向客户端提供新的 SAS 令牌。我知道在这种情况下客户端会得到 403 Unauthorize,因此一种选择是发送另一个新令牌请求,然后重试资源请求。

或者也许我可以发回 301 Moved http 代码和 REST 端点的链接以重新生成新令牌,因此客户端不必了解关于另一个端点的额外知识。

有没有人有类似这样的代币轮换经验?

【问题讨论】:

您的用户是直接使用 SAS URL 访问 blob(例如,获取 SAS URL 并将其粘贴到浏览器中)还是访问您的应用程序?如果是前者,那么您将无法真正做任何事情,因为您不知道 SAS URL 是否引发 403 错误。如果是后者,那你为什么需要 SAS URL :)。 @Gaurav Mantri,谢谢你的回答。这是第一个案例。那么,将新令牌传递给客户端的好解决方案是什么?有什么想法吗? 不幸的是,没有。因为您的客户直接访问 blob,所以除非他们告诉您相同的情况,否则您不会知道他们是否收到 403 错误。收到通知后,您可以生成新的 SAS 令牌并分发出去。 是的,我知道这一点。我在为客户端询问一些好的解决方案:) 【参考方案1】:

正如评论中提到的,由于您的客户直接访问 blob,除非他们告诉您相同的情况,否则您不会知道他们是否收到 403 错误。

如果可以,你可以看看Authorize access to Azure blobs and queues using Azure Active Directory,当它配置好后,即使你轮换账户密钥,客户端也可以访问存储。但是这个特性至少可以应用于容器级别,而不是 blob 级别,不确定是否可以接受。

【讨论】:

以上是关于如何在 Azure 中的密钥轮换后为存储 Blob 的客户端请求提供服务的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 Azure Key Vault 中的 blob 存储访问密钥

Azure 存储帐户 - 加密

如何获取 Azure 存储帐户密钥

Azure磁盘加密Linux VM密钥轮换

用于访问 Azure 存储中的私有 blob 的 URL

REST Api 使用访问密钥到 Azure Blob 存储