容器的Azure SAS令牌会引发“无效的签名大小”错误

问题描述 投票:0回答:2

我试图从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

我附加了带有资源URI的sas标记来获取:

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,23 Feb 2019 05:08: 30 GMT,Server-Request-ID = 21f07a6a-f01e-00e9-32 35-cb7d5c000000,HTTP状态代码= 403,异常=服务器无法验证请求。确保正确形成Authorization标头的值,包括签名。 ErrorCode:AuthenticationFailedAuthenticationFailedServer无法验证请求。确保严格形成Authorization标头的值,包括签名.RequestId:21f07a6a-f01e-00e9-3235-cb7d5c000000时间:2019-02-23T05:08:30.7149353Z签名大小无效。

您没有执行此操作所需的权限。根据您的操作,您可能需要分配以下其中一个:

"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 \ ou tput.py“,第132行,在文件中” C:\ Users \ VSSADM~1 \ AppData \ Local \ Temp \ pip-install-r8nye8gm \ knack \ knack \ ou tput.py“,第38行,格式_json TypeError:'CommandResultItem'对象不可迭代遥测.save:保存缓存中长度为2499的遥测记录

我已经尝试生成存储帐户级SAS门户,但没有找到任何运气。

请帮忙!

list azure containers blob
2个回答
0
投票

您收到此错误的原因是您使用完整的SAS URL而不是SAS令牌。

请更改以下内容:

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

az storage blob list --container-name myContainer --account-name myAccount --auth-mode key --debug --sas-token "?sv=2017-04-17&sr=c&si=testPolicy&sig=dbS680%2FXgPp4o%2BQCCzpYzGZszCnDHVjCkdHZRf6KDeg%3D" >> bloblist.txt

你应该能够列出blob。


0
投票

对于其他任何与403 AuthenticationFailed相同的azcopy错误,但细节显示Signature size is invalid - 我尝试从Windows .bat文件脚本azcopy时遇到了同样的问题。当你获得SAS网址时,字符串中会有百分号。从.bat文件运行时,必须将百分号翻倍以“逃避”它们。例如无论你在网址中看到%,请将其设为%% - 希望这会有所帮助!

有趣的是我记得在我写的前3个azcopy脚本中这样做,几个星期之后为新的存储帐户做了第4个,并且无法弄清楚为什么我一直得到403.我想这篇文章将是一个提醒下次我再次忘记:)给自己:)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.