【问题标题】:Using SAS token to upload Blob content使用 SAS 令牌上传 Blob 内容
【发布时间】:2017-07-27 14:01:33
【问题描述】:

我在使用 Blob SAS 令牌通过 Powershell 将文件写入 Azure 中的 Blob 时遇到困难。

我用来生成 SAS 令牌的代码是:

$storageContext = Get-AzureRmStorageAccount -ResourceGroupName $resourceGroup -Name $storageName

$token = New-AzureStorageBlobSASToken -Container $conName -Context $storageContext.Context -Blob $blobName -ExpiryTime $expiry -Permission rw -FullUri

这会按预期生成一个令牌:https://name.blob.core.windows.net/container/test.json?sv=2015-04-05&sr=b&sig=abc123&se=2017-03-07T12%3A58%3A52Z&sp=rw

如果我在浏览器中使用它,它可以正常工作并按预期下载文件。但是,我不能使用它来上传文件。每当我尝试时,我都会收到 (403) Forbidden。我用来上传的代码是:

$accountContext = New-AzureStorageContext -SasToken $sasToken

Get-AzureStorageContainer -Context $accountContext.Context | Set-AzureStorageBlobContent -File $blobFile

在调用Add-AzureRmAccount 进行身份验证后,我已成功使用类似于此的方法设置 Blob 内容。

我也尝试使用 Container SAS 令牌,但我不断收到 403 错误。

令牌用于读取的事实让我相信我在我的 Powershell 脚本中遗漏了一些东西 - 任何人都可以阐明那是什么吗?

【问题讨论】:

    标签: powershell azure azure-blob-storage azure-powershell azure-resource-manager


    【解决方案1】:

    令牌可用于读取的事实使我相信我是 在我的 Powershell 脚本中遗漏了一些东西 - 任何人都可以阐明 那是什么?

    我认为问题出在以下代码行:

    Get-AzureStorageContainer -Context $accountContext.Context
    

    这里有两件事:

    1. 此 cmdlet 尝试列出存储帐户中的 blob 容器。为了列出使用 SAS 的 blob 容器,您需要 Account SAS,因为您使用的 SAS 是 Container SAS
    2. 您的 SAS 只有 ReadWrite 权限。要列出容器,您还需要List 权限。

    我建议只使用Set-AzureStorageBlobContent Cmdlet 并向其提供必要的信息,而不是通过管道获取容器名称。

    Set-AzureStorageBlobContent -File $blobFile -Container $conName -Context $accountContext.Context -Blob $blobName
    

    【讨论】:

    • 我已确认在创建 Blob SAS 时,对 Get-AzureStorageContainer 的调用会引发 403。我更改了代码以使用 rwl 创建 Container SAS 并直接调用 Set-AzureStorageBlobContent 但仍然得到 403。
    • 你能用你正在使用的最新代码更新你的问题吗?谢谢。
    • 我已经解决了这个问题。您所说的有效,我在创建 SAS 令牌时使用了 -FullUri 标志。删除这个标志只给了我令牌的查询字符串部分,现在允许我上传 blob。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2021-10-31
    • 2022-01-17
    • 2021-09-12
    • 2022-01-17
    • 2018-12-12
    相关资源
    最近更新 更多