我尝试像这样创建SAS(添加"阅读"权限不会改变):
但它对我没用。我只希望我的脚本获得blob列表,读取元数据并删除旧blob。
Get-AzureStorageContainer:远程服务器返回错误:(403) 故宫。 HTTP状态码:403 - HTTP错误消息:此请求是 没有授权执行此操作。
此外,我想了解实现目标的最低权限。
$ctx = New-AzureStorageContext -StorageAccountName xxx -SasToken zzz
$Containers = Get-AzureStorageContainer -Context $ctx
示例sas标记:
?sv=2017-07-29&ss=b&srt=co&sp=dl&se=2018-03-31T21:24:06Z&st=2018-03-31T09:24:06Z&spr=https&sig=bWsg5sSPZF%2FaBXxfW6RoCH%2BlcFKBT6MFyMKTRM3I2jI%3D
答案 0 :(得分:1)
所以这里有两件事:
您收到403错误:假设您使用了与问题中提到的相同的SAS令牌以及Get-AzureStorageContainer
Cmdlet,那么会得到这个错误。这样做的原因是此Cmdlet的目的是在存储帐户中列出blob容器,为此您需要在SAS令牌中具有Service
权限(SAS令牌中的srt
值应为{ {1}}代替sco
)。由于SAS令牌中没有所需的权限,因此您收到此403错误。但是,如果您与Get-AzureStorageBlob
一起使用相同的令牌,则不应出现任何错误。
获取blob列表,读取元数据和删除旧blob的必要权限:为此,您需要以下权限:
使用此组合,您应该能够使用co
列出blob容器中的blob,读取其元数据并删除blob。
<强>更新强>
所以我做的是我按照你的步骤尝试使用Get-AzureStorageBlob
Cmdlet列出blob容器。我也得到了同样的错误:)。
然后我使用Get-AzureStorageContainer
和Debug
开关运行Cmdlet,发现对于每个blob容器,此Cmdlet尝试获取ACL
。
_HTTPS://account.blob.core.windows.net/my-container SV = 2017年7月29日&安培; SS = B和= SRT SCO&安培; SP =&DL放大器; SE = 2018-03-31T23:28 :27Z&安培; ST = 2018-03-31T15:2 8:27Z&安培; SPR = HTTPS&安培; SIG =签名&安培; API-版本= 2017年4月17日&安培;的 restype =容器&安培;可比= ACL 强>
确认远程服务器返回错误:(403)禁止。 HTTP 状态代码:403 - HTTP错误消息:此请求未经授权 执行此操作。 [Y]是[A]是全部[H]停止命令 [S]暂停[?]帮助(默认为&#34; Y&#34;):y Get-AzureStorageContainer: 远程服务器返回错误:(403)禁止。 HTTP状态 代码:403 - HTTP错误消息:此请求未被授权 执行此操作。在行:1个字符:1 + Get-AzureStorageContainer -Context $ ctx -Debug -Verbose + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ + CategoryInfo:CloseError:(:) [Get-AzureStorageContainer],StorageException + FullyQualifiedErrorId:StorageException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.GetAzureStorageCont ainerCommand
现在的问题是,您无法使用共享访问签名来获取容器的ACL,您需要使用帐户密钥(创建共享访问签名也是如此)。这就是您从服务中收到403错误的原因。
不确定是否会将此归类为Verbose
中的错误,或者想要添加功能请求,允许您在不获取其ACL的情况下列出blob容器但是现在情况如此,您不能使用此Cmdlet和SAS令牌列出blob容器。