list - 容器的 Azure SAS token 引发 'invalid Signature Size' 错误

标签 list azure containers blob

我正在尝试从 Azure 上的容器列出并下载 blob。当我尝试使用存储帐户访问 key 执行此操作时,它工作得非常好。但是,使用 SAS token 时会失败。我使用以下 PowerShell 脚本生成了 SAS token :

    $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 token 附加到资源 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 Retry policy did not allow for a retry: Server- Timestamp=Sat, 23 Feb 2019 05:08:30 GMT, Server-Request-ID=21f07a6a-f01e-00e9-32 35-cb7d5c000000, HTTP status code=403, Exception=Server failed to authenticate t he request. Make sure the value of Authorization header is formed correctly incl uding the signature. ErrorCode: AuthenticationFailedAuthenticationFailedServer failed to auth enticate the request. Make sure the value of Authorization header is formed corr ectly including the signature.RequestId:21f07a6a-f01e-00e9-3235-cb7d5c000000Time :2019-02-23T05:08:30.7149353ZSignature size is invalid.

您没有执行此操作所需的权限。 根据您的操作,您可能需要被分配以下角色之一 莱斯:

"Storage Blob Data Contributor (Preview)"
"Storage Blob Data Reader (Preview)"
"Storage Queue Data Contributor (Preview)"
"Storage Queue Data Reader (Preview)"

如果您想使用旧的身份验证方法并允许查询正确的身份验证方法 t帐户 key ,请使用“--auth-mode”参数和“key”值。

Event: CommandInvoker.OnFilterResult [] 'CommandResultItem' object is not iterable Traceback (most recent call last): File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-r8nye8gm\knack\knack\cl i.py", line 212, in invoke File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-r8nye8gm\knack\knack\ou tput.py", line 132, in out File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-r8nye8gm\knack\knack\ou tput.py", line 38, in format_json TypeError: 'CommandResultItem' object is not iterable telemetry.save : Save telemetry record of length 2499 in cache

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

请帮忙!

最佳答案

对于遇到与 403 AuthenticationFailed 相同的 azcopy 错误但详细信息显示签名大小无效 的其他人 - 我在尝试编写 azcopy 脚本时遇到了同样的问题来自 Windows .bat 文件。当您获取 SAS url 时,字符串中将会有百分号。从 .bat 文件运行时,必须将百分号加倍以“转义”它们。例如无论您在网址中看到 %,请将其设为 %% - 希望这会有所帮助!

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

关于list - 容器的 Azure SAS token 引发 'invalid Signature Size' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54838483/

相关文章:

python - 在python中加入列表和列表列表

python - 将包含元组列表的字典转换为列表

c# - 如何在 N 分钟后从通用列表中删除项目?

asp.net - Azure Blob 存储上传错误 : (403) Forbidden

linux - Docker 容器中的内存限制和 CPU 限制

haskell - 为什么 Data.Sequence 中缺少 takeR、dropR 和 splitAtR?

docker - 如何使用Docker Compose设置容器以使用静态IP并可以在VM主机外部访问?

list - 具有任意数量生成器的 Haskell 列表理解

c# - Azure DevOps 使用 API 获取工作项通知

c# - Azure 免费订阅上消费托管函数的性能