Azure:如何在不同租户之间共享存储区块



我正在尝试在租户A中进行arm模板部署。json文件中的一个参数是SAS uri,指向租户B中存储帐户中的blob。我生成了一个具有完全读/写/添加功能的令牌。。。etc+租户B中blob的http/https权限,并将其放入,但它被拒绝,并显示消息:

{quot;代码":"冲突","消息":"状态":"失败",\r\n"错误":{\r\n"代码":"资源部署失败",\r\n
"消息":"使用终端完成的资源操作设置状态"失败"&";,\\r\n";细节":[\r\n{\r\n
"代码":"部署失败",\r\n"消息":"至少一个资源部署操作失败。请列出部署操作以了解详细信息。请参阅https://aka.ms/DeployOperations对于用法详细信息&";,\\r\n";细节":[\r\n{\r\n
"代码":"冲突",\r\n"消息":"\"状态\":\"失败\";,\\r\n\〃;错误\":{\r\n
\"代码\&quot设置状态"失败"\&";,\\r\n\〃;细节\":[\r\n
{\r\n\r\n"代码\ quot;:\quot;Blob下载失败\ quot,\r\n
\ quot!消息\ quot::\quotquot;Microsoft.Azure.Storage.StorageException:服务器未能对请求进行身份验证。确保的值授权标头的格式正确,包括签名\\\r\n在微软蔚蓝色的存储果心执行人。执行程序.d_1`1.MoveNext((\\r\r\n请求信息\\r\\nRequestID:b4d12e48-601e-0009-56de-a537b5000000\\r\\nRequest日期:\\r\\nStatus消息:服务器无法对请求进行身份验证。确保Authorization标头的值格式正确,包括签名。

似乎发生的情况是,ARM正在接受部署,并试图用提供的SAS从存储帐户中提取blob,但存储帐户拒绝了它。当我用SAS对位于同一资源组+租户中的blob进行尝试时,部署会起作用。我的理解(这可能是不正确的(是,拥有正确权限生成的sas令牌本身就足以用于跨租户。在进行访问不同租户和资源组中的资源的arm部署时,是否需要其他步骤,例如注册应用程序。。。等

基于错误:AuthenticationFailed|Server无法对请求进行身份验证。确保Authorization标头的值格式正确,包括签名。

  • 更改标头请求-x-ms-version:2020-04-08
  • 你能通过存储资源管理器工具生成SAS令牌并尝试吗。另请根据您的场景/错误参考此SO线程

另请参阅此Microsoft问答;一个线程,它提供有关您的场景的更多信息:https://learn.microsoft.com/en-us/answers/questions/29478/is-cross-tenant-blob-access-possible-in-azure.html

多租户和Azure存储:https://learn.microsoft.com/en-us/azure/architecture/guide/multitenant/service/storage

403在用共享密钥进行授权时被看到;所有授权请求都必须包含请求的协调世界时(UTC(时间戳"有关这方面的信息可以在授权共享密钥中找到

403表示您的SAS令牌或共享密钥有问题。您可以使用存储资源管理器生成具有相同配置的SAS,并查看它是否有效。

如果问题仍然存在,

  • 你能分享错误消息的屏幕截图并使用Fiddler追踪日志吗?请与我们分享
  • 您的共享访问签名可能缺少权限,请交叉验证
  • 你能检查一下防火墙设置和时区吗

附加信息:使用Azure存储帐户共享密钥身份验证时,此库发送的HTTP请求将生成一个字符串,以基于HTTP标头的子集进行签名,并最终使用帐户密钥进行签名。在签名后修改头将导致身份验证错误。

授权对Azure Storage 的请求

最新更新