我正在尝试使用 AzCopy 5.1.0使用存储资源管理器生成的 SAS 从 Blob 存储容器下载单个blob:
https://myaccount.blob.core.windows.net/mycontainer/[blob-uuid]?st=2016-11-23T18%3A26%3A00Z&se=2016-11-24T18%3A26%3A00Z&sp=rl&sv=2015-12-11&sr=b&sig=[signature]
azcopy /Source:https://myaccount.blob.core.windows.net/mycontainer /SourceSAS:"?st=2016-11-23T18%3A26%3A00Z&se=2016-11-24T18%3A26%3A00Z&sp=rl&sv=2015-12-11&sr=b&sig=[signature]" /Dest:"c:\data"
如果 /Source 应该是 blob 容器,而 /SourceSAS 应该是 SAS token,那么我需要在某个地方传入实际的 Blob 键 ([blob-uuid])。
恕我直言,这应该是 /SourceKey,但在那里指定我的 blob 密钥会返回错误:“提供的存储密钥 (SourceKey) 不是有效的 Base64 字符串。” 这与将参数描述为“存储帐户密钥”的命令行帮助一致。
我能找到的唯一其他候选者是 /Pattern,但对于通过枚举容器的内容来下载 blob 的情况似乎更多。这似乎与我在此处指定确切的 blob 键时得到的 403 错误一致;容器是私有的。
在任何情况下,AzCopy 都会抱怨“服务器未能对请求进行身份验证。请确保 Authorization 标头的值包括签名在内的格式正确。” 根据我的经验,这表明生成 SAS 签名的原始 URI 没有被正确重建。
我可以通过 curl 直接使用原始 SAS URI,所以这不是签名不一致的问题。
我还尝试使用 SDK 以编程方式生成 SAS URI,以便我可以指定共享访问策略,但这也不起作用。我仍然认为 AzCopy 需要 SAS URI 的缺失部分。