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

Azure 如何创建SAS令牌以列出\删除Blob,azure,authentication,azure-storage,azure-powershell,Azure,Authentication,Azure Storage,Azure Powershell,我尝试像这样创建SA添加读取权限不会改变任何内容: 但这对我不起作用。我只希望我的脚本获取blob列表,读取元数据并删除旧blob Get-AzureStorageContainer:远程服务器返回错误:403 被禁止的HTTP状态代码:403-HTTP错误消息:此请求为 未授权执行此操作 另外,我想知道实现我的目标的最低权限是多少 $ctx = New-AzureStorageContext -StorageAccountName xxx -SasToken zzz $Containers =

我尝试像这样创建SA添加读取权限不会改变任何内容:

但这对我不起作用。我只希望我的脚本获取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

这里有两件事:

您将收到403错误:假设您使用的SAS令牌与问题中提到的Cmdlet相同,您将收到此错误。原因是此Cmdlet的目的是列出存储帐户中的blob容器,因此您需要在SAS令牌中具有服务权限。SAS令牌中的srt值应为sco而不是co。因为您的SAS令牌中没有所需的权限,因此您将收到此403错误。但是,如果同时使用相同的令牌,则不会出现任何错误

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

允许的服务:blob 允许的资源类型:容器c和对象o 允许的权限:列表l、读取r和删除d 通过这种组合,您应该能够使用Get-AzureStorageBlob列出blob容器中的blob,读取其元数据并删除blob

更新

因此,我所做的是按照您的步骤,尝试使用Get-AzureStorageContainer Cmdlet列出blob容器。我也得到了同样的错误:

然后,我运行带有调试和详细开关的Cmdlet,发现对于每个blob容器,此Cmdlet都会尝试获取

_https://account.blob.core.windows.net/my-container?sv=2017-07-29&ss=b&srt=sco&sp=dl&se=2018-03-31T23:28:27Z&st=2018-03-31T15:2 8:27Z&spr=https&sig=signature&api version=2017-04-17&restype=container&comp=acl

确认远程服务器返回错误:403禁止。超文本传输协议 状态代码:403-HTTP错误消息:此请求未经授权 执行此操作。[Y] 是[A]对所有[H]暂停命令都是 [S] 挂起[?]帮助默认值为Y:Y Get-AzureStorageContainer: 远程服务器返回错误:403禁止。状态码 代码:403-HTTP错误消息:此请求未被授权 执行此操作。第1行字符:1 +获取AzureStorageContainer-Context$ctx-Debug-Verbose + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:CloseError::[Get-AzureStorageContainer],StorageException +FullyQualifiedErrorId:StorageException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.GetAzureStorageCont ainerCommand

现在的问题是,您无法使用共享访问签名获取容器的ACL,您需要使用帐户密钥,这与创建共享访问签名的方法相同。这就是您从服务返回403错误的原因


不确定您是否会将其归类为Get-AzureStorageContainer中的错误,或者是否希望在功能请求中允许您在不获取ACL的情况下列出blob容器,但目前的情况是,您无法使用此Cmdlet和SAS令牌列出blob容器。

此Cmdlet列出帐户中的容器。对于列出blob,cmdlet是Get-AzureStorageBlob。但无论如何,您不应该得到403错误。您是否可以编辑您的问题,并包括您如何调用此Cmdlet以及如何创建存储上下文?我不是问这个问题:我是问:如何在屏幕截图上创建正确的sas令牌@GauravMantribution尽管如此,我相信您选择了正确的权限,因此您的sas令牌应该是正确的。请共享您的SAS令牌,以便检查其正确性。是否在任何地方记录了该令牌@GauravMantriI实际上是在寻找用于创建存储上下文的SAS令牌的价值。但是服务的东西被检查了吗?我用sco创建了另一个SAS,但仍然收到相同的错误。为什么我这么幸运:D。但是如果你知道blob容器,那么你可以使用其他cmdlet列出和删除blob。其他方法是使用invoke-WebRequest调用list blob containers REST API。是的,这很明显,但我无法在网上找到示例,当我看到一篇关于msdn创建所需参数的文章时,我有点伤心。我宁愿使用连接字符串,tbh。容易多了。谢谢你!