首页 > 解决方案 > 容器的 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 标头的值格式正确,包括签名。错误代码:AuthenticationFailedAuthenticationFailed服务器未能验证请求。确保 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 门户,但没有找到任何运气。

请帮忙!

标签: listazurecontainersblob

解决方案


对于出现相同 azcopy 错误403 AuthenticationFailed但详细信息显示的其他任何人Signature size is invalid- 我在尝试从 windows .bat 文件编写 azcopy 脚本时遇到了同样的问题。当您获得 SAS url 时,字符串中会有百分号。从 .bat 文件运行时,您必须将百分号加倍以“转义”它们。例如,无论您在网址中看到 % 的位置,都将其设为 %% - 希望这会有所帮助!

有趣的是,我记得在我编写的前 3 个 azcopy 脚本中执行此操作,几周后为新的存储帐户制作了第 4 个,但不知道为什么我一直收到 403。我想这篇文章会提醒你下次我再次忘记时对自己说:)


推荐阅读