我们刚刚开始使用Azure存储。在我们的场景中,我们上传到私有blob,我们稍后需要直接从我们的客户端应用程序访问,例如。图像.
有没有一种方法可以使用包含访问密钥的URL来解决Azure存储中的私有Blob?
通过筛选MS文档,到目前为止,我能找到的只是通过blob URI的简单URL访问,例如。如通过.net API列出blob时CloudBlockBlob
示例的URI
属性所示。
从Web浏览器访问它自然会失败,因为blob不是公共的。
但是,我们是否可以限定URL也包括访问密钥,以便允许授权客户端访问blob..?
3条答案
按热度按时间gev0vcfq1#
您可以为私有blob生成SAS URL和令牌。下面是在Azure门户中手动生成此内容的过程,以测试此概念。即使您的存储容器是私有的,它也可以工作,因为它允许使用在其查询字符串中包含令牌的URL临时,有时间限制地访问文件。
单击存储容器中的文件,选择“Generate SAS”选项卡,然后在右窗格中选择x1c 0d1x
这将生成一个token和一个包含token的URL,如下所示:
您可以使用
curl
测试将URL作为文件下载。使用上图中显示的第二个URL(包括查询字符串中的完整令牌和其他参数的URL),然后执行此操作(重要-URL必须在双引号中):curl "<YOUR_URL>" --output myFileName.txt
提示-这也是一个很好的方法,使文件可用于Azure虚拟机,如果你需要直接安装一个文件在虚拟机上的任何原因(我需要这样做安装SSL证书),你可以生成URL然后
curl
下载文件,在虚拟机本身。例如,首先使用Bastion或SSH连接到VM,然后使用curl
将文件下载到某处。k4aesqcs2#
这是用于从存储读取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
wtzytmuj3#
扩展到@Chris Halcrow。
我不得不用更多的参数()来扩展我的网址,比如
ss=bfqt&srt=sco
。()请注意,SAS不是一个“键”,而是一组查询参数。然后又道: