Azure 存储帐户 - 使用容器 SAS 的临时下载链接

Posted

技术标签:

【中文标题】Azure 存储帐户 - 使用容器 SAS 的临时下载链接【英文标题】:Azure Storage Account - temporary download link using container SAS 【发布时间】:2020-11-09 02:20:38 【问题描述】:

我正在使用 Python Azure SDK,但遇到了以下问题。

我想要做的是生成容器 SAS 令牌以仅在给定容器上使用,为此我使用 Azure SDK generate_container_sas

def get_temporary_access_token(self):
    sas_token = generate_container_sas(
        self.account_name,
        self.container_name,
        self.storage_token,
        permission=ContainerSasPermissions(read=True, write=True, delete=True, list=True),
        expiry=datetime.utcnow() + self.sas_token_expiry_time
    )
    return sas_token

这会返回一个类似于se=<end_datetime>&sp=<Permission>&sv=2019-07-07&sr=c&sig=<token>的字符串

现在使用这个令牌我可以做各种各样的事情,但我有麻烦的是使用这个链接作为某个 blob 的临时下载链接。

我试图用这种方法来做:

def get_temporary_download_link(self, blob_full_path, expires_time):
    base_temp_url = f'self._get_base_resource_url()/self.container_name/blob_full_path'
    token = generate_blob_sas(
        account_name=self.account_name,
        account_key=self.sas_token,
        container_name=self.container_name,
        blob_name=blob_full_path,
        permission=BlobSasPermissions(read=True),
        expiry=datetime.utcnow() + timedelta(seconds=expires_time)
    )
    return f'base_temp_url?token'

现在,当我尝试使用在上述方法中构建的链接时,我在以下方法 b64decode 中失败了。

据我所知,我不打算将 SAS 令牌用于临时下载链接,我只能通过使用资源令牌或用户委托对象来做到这一点? 我还尝试通过对 SAS 令牌进行编码来“愚弄”该方法,但导致 URL 出现错误Signature did not match

我没有找到任何关于我可以使用资源 SAS 令牌与 UserDelegationKey 做什么或不可以做什么的文档,有人知道是否可以使用资源 SAS 令牌进行临时下载?

提前致谢

【问题讨论】:

【参考方案1】:

基本上,问题在于您使用 SAS 令牌(在您的情况下为 blob 容器创建)来创建新的 SAS 令牌。这是不允许的。您将需要使用帐户密钥或用户委托密钥来生成 SAS 令牌。

此外,您可以使用为 Blob 容器生成的 SAS 令牌作为该容器内 Blob 的 SAS 令牌。如果您为具有至少 read 权限的 blob 容器创建 SAS 令牌,则可以使用相同的 SAS 令牌下载该 blob 容器中的任何 blob。

【讨论】:

是的,我正在使用帐户密钥生成 SAS 令牌,但您让我发现我可以只使用 SAS 令牌作为下载 blob 的后缀而不使用get_temporary_download_link,谢谢

以上是关于Azure 存储帐户 - 使用容器 SAS 的临时下载链接的主要内容,如果未能解决你的问题,请参考以下文章

在不使用主键或辅助键的情况下使用 azure 存储帐户进行身份验证

在 Java 中生成 SAS 令牌以下载 Azure 数据存储容器中的文件

Azure 存储帐户生成 SAS 令牌,而不是 SAS URI

Azure 存储帐户:Blob 服务 (SAS) 连接检查失败

使用SAS保护Azure Storage的安全性

Azure 存储帐户 - 错误 403 被禁止