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

问题描述 投票:0回答:3

我们刚刚开始使用 Azure 存储。 在我们的场景中,我们上传到稍后需要直接从客户端应用程序访问的私有 blob,例如图像。

有没有办法使用包含访问密钥的 URL 来寻址 Azure 存储中的私有 blob?

到目前为止我能找到的所有 MS 文档都是通过 blob URI 进行简单的 URL 访问,例如通过 .net API 列出 blob 时,由

URI
实例的
CloudBlockBlob
属性给出。

由于 blob 不公开,从 Web 浏览器访问它自然会失败。
但是,我们是否可以限定 URL 以包含访问密钥,以便允许授权客户端访问 blob..?

c# azure blob azure-storage azure-blob-storage
3个回答
12
投票

您可以为私有 blob 生成 SAS URL 和令牌。以下是在 Azure 门户中手动生成此内容以测试该概念的过程。即使您的存储容器是私有的,它也可以工作,因为它允许使用查询字符串中包含令牌的 URL 对文件进行临时的、时间有限的访问。

单击存储容器中的文件,选择“生成 SAS”选项卡,然后在右侧窗格中选择

这将生成一个令牌以及包含该令牌的 URL,如下所示:

您可以使用

curl
测试将 URL 作为文件下载。使用上图中显示的第二个 URL(在查询字符串中包含完整令牌和其他参数的 URL),然后执行此操作(重要 - URL 必须用双引号引起来):

curl "<YOUR_URL>" --output myFileName.txt

提示 - 这也是使文件可供 Azure VM 使用的好方法,如果您出于任何原因需要直接在 VM 上安装文件(我需要这样做来安装 SSL 证书),您可以生成URL,然后

curl
在虚拟机本身上下载文件。例如。首先使用 Bastion 或 SSH 连接到虚拟机,然后使用
curl
将文件下载到某处。


7
投票

这是用于从存储中读取 blob 的 API:

https://learn.microsoft.com/en-us/rest/api/storageservices/get-blob

没有 URL 参数来传递访问密钥,只有标头值

Authorization
。所以你可以手动执行请求,例如将生成的数据添加为 Base64 编码图像。如果可能的话,我建议不要这么做。

您还必须意识到,通过将“您的访问密钥”传递给客户端,无论如何您都可以有效地公开您的 blob。与匿名访问相比,您的数据面临的风险更大,因为访问密钥允许比匿名访问更多的操作。这也适用于您的 Objective-C 应用程序,尽管它在那里更加混乱。 SAS 是实现这一目标的方法 - 创建一个后端服务,为给定资源创建一组定义的 SAS 令牌。然而,这比简单地在某处混淆完整的访问密钥要付出更多的努力。 请参阅“匿名用户可用的功能”:

https://learn.microsoft.com/en-us/azure/storage/blobs/storage-manage-access-to-resources


0
投票

我必须使用更多参数来扩展我的网址,例如

ss=bfqt&srt=sco

。 然后:

curl -X GET -H "x-ms-date: $(date -u)" "https://<ACCOUNT>.blob.core.windows.net/<PATH>/<FILENAME>?<SIGNATURE>"

© www.soinside.com 2019 - 2024. All rights reserved.