【问题标题】:How to create SAS token to list\delete blobs如何创建 SAS 令牌以列出\删除 blob
【发布时间】:2018-09-10 06:19:17
【问题描述】:

我尝试像这样创建 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

【问题讨论】:

  • 此 Cmdlet 列出帐户中的容器。对于列出 blob,cmdlet 是 Get-AzureStorageBlob。但是你不应该得到 403 错误。您能否编辑您的问题并包括您如何调用此 Cmdlet 以及如何创建存储上下文?
  • 好吧,我不是在要求那个 :) 我在问:“如何创建一个合适的 sas 令牌”@GauravMantri
  • 根据屏幕截图(虽然是部分截图),我相信您选择了正确的权限,因此您的 SAS 令牌应该是正确的。请分享您的 SAS 令牌,以便检查其正确性。
  • 这是否记录在任何地方? @GauravMantri
  • 我实际上是在寻找您用来创建存储上下文的 SAS 令牌的值。

标签: azure authentication azure-storage azure-powershell


【解决方案1】:

所以这里有两件事:

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

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

    • 允许的服务:Blob (b)
    • 允许的资源类型:容器 (c) 和对象 (o)
    • 允许的权限:列表 (l)、读取 (r) 和删除 (d)

通过这种组合,您应该能够使用Get-AzureStorageBlob 列出来自 blob 容器的 blob、读取其元数据并删除 blob。

更新

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

然后我使用DebugVerbose 开关运行Cmdlet,发现对于每个blob 容器,此Cmdlet 尝试获取ACL

_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) Forbidden。 HTTP 状态码:403 - HTTP 错误消息:此请求未经授权 来执行此操作。 [Y] 是 [A] 全部是 [H] 暂停命令 [S] 暂停 [?] 帮助(默认为“Y”): y Get-AzureStorageContainer : 远程服务器返回错误:(403) Forbidden。 HTTP 状态 代码: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 容器,但现在的情况是,您不能使用列出 blob 容器此 Cmdlet 和 SAS 令牌。

【讨论】:

  • 但是service 的东西被检查了?我用 sco 创建了另一个 SAS,但仍然遇到同样的错误
  • 我为什么这么幸运
  • :D。但如果您知道 Blob 容器,则可以使用其他 cmdlet 列出和删除 Blob。
  • 其他方法是使用 Invoke-WebRequest 调用列表 blob 容器 REST API。
  • 是的,这很明显,但是我无法在网上找到示例,当我在 msdn 上看到一篇文章来创建所需的参数时,我有点去了sad panda。我宁愿使用连接字符串,tbh。容易得多。不过谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-01-17
  • 2019-12-05
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2018-08-14
  • 2013-02-14
相关资源
最近更新 更多