如何创建SAS令牌以列出\删除blob

时间:2018-03-31 11:52:03

标签: azure authentication azure-storage azure-powershell

我尝试像这样创建SAS(添加"阅读"权限不会改变):

enter image description here

但它对我没用。我只希望我的脚本获得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

1 个答案:

答案 0 :(得分:1)

所以这里有两件事:

  1. 您收到403错误:假设您使用了与问题中提到的相同的SAS令牌以及Get-AzureStorageContainer Cmdlet,那么会得到这个错误。这样做的原因是此Cmdlet的目的是在存储帐户中列出blob容器,为此您需要在SAS令牌中具有Service权限(SAS令牌中的srt值应为{ {1}}代替sco)。由于SAS令牌中没有所需的权限,因此您收到此403错误。但是,如果您与Get-AzureStorageBlob一起使用相同的令牌,则不应出现任何错误。

  2. 获取blob列表,读取元数据和删除旧blob的必要权限:为此,您需要以下权限:

    • 允许的服务:Blob(b)
    • 允许的资源类型:容器(c)和对象(o)
    • 允许的权限:列表(l),读取(r)和删除(d)
  3. 使用此组合,您应该能够使用co列出blob容器中的blob,读取其元数据并删除blob。

    <强>更新

    所以我做的是我按照你的步骤尝试使用Get-AzureStorageBlob Cmdlet列出blob容器。我也得到了同样的错误:)。

    然后我使用Get-AzureStorageContainerDebug开关运行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容器。