list - 容器的 Azure SAS 令牌引发“签名大小无效”错误
问题描述
我正在尝试从 Azure 上的容器列出和下载 blob。当我尝试使用存储帐户访问密钥这样做时,它工作得很好。但是,使用 SAS 令牌时会失败。我使用以下 PowerShell 脚本生成了 SAS 令牌:
$storageContext = New-AzureStorageContext -StorageAccountName "myAccount" -StorageAccountKey "<account key>"
$permission = "rwdl"
$sasToken = New-AzureStorageContainerSASToken -Name "myContainer" -Policy "testPolicy" -Context $storageContext >>sastoken.txt
"
我得到以下结果:
?sv=2017-04-17&sr=c&si=testPolicy&sig=dbS680%2FXgPp4o%2BQCCzpYzGZszCnDHVjCkdHZRf6KDeg%3D
我将 sas 令牌附加到资源 URI 以获取:
https://myAccount.blob.core.windows.net/myContainer?sv=2017-04-17&sr=c&si=testPolicy&sig=dbS680%2FXgPp4o%2BQCCzpYzGZszCnDHVjCkdHZRf6KDeg%3D
并运行以下 CLI 命令:
az storage blob list --container-name myContainer --account-name myAccount --auth-mode key --debug --sas-token "https://myAccount.blob.core.windows.net/myContainer?sv=2017-04-17&sr=c&si=testPolicy&sig=dbS680%2FXgPp4o%2BQCCzpYzGZszCnDHVjCkdHZRf6KDeg%3D" >> bloblist.txt
我收到以下错误:
azure.multiapi.storage.v2018_03_28.common.storageclient:Client-Request-ID=0f7a 7762-3729-11e9-8b32-ffc4c9592d0a 重试策略不允许重试:Server-Timestamp=Sat,2019 年 2 月 23 日 05:08: 30 GMT,Server-Request-ID=21f07a6a-f01e-00e9-32 35-cb7d5c000000,HTTP 状态码=403,异常=服务器未能验证请求。确保 Authorization 标头的值格式正确,包括签名。错误代码:AuthenticationFailed
AuthenticationFailed
服务器未能验证请求。确保 Authorization 标头的值正确形成,包括签名。RequestId:21f07a6a-f01e-00e9-3235-cb7d5c000000Time :2019-02-23T05:08:30.7149353Z Signature size is invalid。
您没有执行此操作所需的权限。根据您的操作,您可能需要被分配以下角色之一:
"Storage Blob Data Contributor (Preview)"
"Storage Blob Data Reader (Preview)"
"Storage Queue Data Contributor (Preview)"
"Storage Queue Data Reader (Preview)"
如果您想使用旧的认证方法并允许查询正确的帐户密钥,请使用“--auth-mode”参数和“key”值。
事件:CommandInvoker.OnFilterResult [] 'CommandResultItem' 对象不可迭代 Traceback(最近一次调用最后一次):文件“C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-r8nye8gm\knack\knack\cl i.py”,第 212 行,调用文件“C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-r8nye8gm\knack\knack\output.py”,第 132 行,在输出文件中C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-r8nye8gm\knack\knack\output.py",第 38 行,在 format_json TypeError: 'CommandResultItem' object is not iterable telemetry.save:保存缓存中长度为 2499 的遥测记录
我曾尝试生成存储帐户级别的 SAS 门户,但没有找到任何运气。
请帮忙!
解决方案
对于出现相同 azcopy 错误403 AuthenticationFailed
但详细信息显示的其他任何人Signature size is invalid
- 我在尝试从 windows .bat 文件编写 azcopy 脚本时遇到了同样的问题。当您获得 SAS url 时,字符串中会有百分号。从 .bat 文件运行时,您必须将百分号加倍以“转义”它们。例如,无论您在网址中看到 % 的位置,都将其设为 %% - 希望这会有所帮助!
有趣的是,我记得在我编写的前 3 个 azcopy 脚本中执行此操作,几周后为新的存储帐户制作了第 4 个,但不知道为什么我一直收到 403。我想这篇文章会提醒你下次我再次忘记时对自己说:)
推荐阅读
- ios - 我在 DateComponentsFormatter 中发现错误了吗?
- android-studio - Android Studio 中 com.diffplug.spotless 插件有什么用?
- python - 如何在python中将变量条件列表传递给过滤函数,而不是单个条件?
- mongodb - MongoDB/Mongoose 用过滤器计算大量文档的最佳方法是什么?
- laravel - 无法发布到路线“/”
- c++ - 如何在 C++ 中增加 shared_ptr?
- javascript - Vuetify 工具提示在悬停时刷新/重新渲染
- css - CSS 模块不更改 DOM/标记类名 - 包裹捆绑器
- r - 通过评估反向引用替换 gsub 中的文本
- sql - 从开始日期和结束日期生成日期范围 SQL Azure