Powershell 使用SAS令牌上载Blob内容

Powershell 使用SAS令牌上载Blob内容,powershell,azure,azure-storage-blobs,azure-powershell,azure-resource-manager,Powershell,Azure,Azure Storage Blobs,Azure Powershell,Azure Resource Manager,我很难使用Blob SAS令牌通过Powershell将文件写入Azure中的Blob 我用来生成SAS令牌的代码是: $storageContext = Get-AzureRmStorageAccount -ResourceGroupName $resourceGroup -Name $storageName $token = New-AzureStorageBlobSASToken -Container $conName -Context $storageContext.Context -

我很难使用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)的禁书。我用来上传的代码是:

$accountContext = New-AzureStorageContext -SasToken $sasToken

Get-AzureStorageContainer -Context $accountContext.Context | Set-AzureStorageBlobContent -File $blobFile
在调用
addazurermaccount
进行身份验证后,我成功地使用了类似的方法来设置Blob内容

我还尝试使用一个容器SAS令牌,但我一直得到一个403错误

事实上,这个令牌可以用于读取,这让我相信我的Powershell脚本中缺少了一些东西——有人能解释一下这是什么吗

事实上,这个代币对读取有效,这让我相信我是正确的 我的Powershell脚本中缺少了一些东西-有人能解释一下吗 那是什么

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

Get-AzureStorageContainer -Context $accountContext.Context
这里有两件事:

  • 此cmdlet尝试列出存储帐户中的blob容器。为了列出使用SAS的blob容器,您需要一个
    帐户SAS
    ,因为您使用的SAS是一个
    容器SAS
  • 您的SAS只有
    读取
    写入
    权限。对于列出容器,您还需要
    List
    权限
  • 我建议只使用
    Set-AzureStorageBlobContent
    Cmdlet并向其提供必要的信息,而不是通过管道获取容器名称

    Set-AzureStorageBlobContent -File $blobFile -Container $conName -Context $accountContext.Context -Blob $blobName
    
    事实上,这个代币对读取有效,这让我相信我是正确的 我的Powershell脚本中缺少了一些东西-有人能解释一下吗 那是什么

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

    Get-AzureStorageContainer -Context $accountContext.Context
    
    这里有两件事:

  • 此cmdlet尝试列出存储帐户中的blob容器。为了列出使用SAS的blob容器,您需要一个
    帐户SAS
    ,因为您使用的SAS是一个
    容器SAS
  • 您的SAS只有
    读取
    写入
    权限。对于列出容器,您还需要
    List
    权限
  • 我建议只使用
    Set-AzureStorageBlobContent
    Cmdlet并向其提供必要的信息,而不是通过管道获取容器名称

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

    我已经确认,在创建
    blobsas
    时,对
    getazurestoragecontainer
    的调用正在抛出一个403。我更改了代码,用rwl创建了一个
    容器SAS
    ,并直接调用
    Set-AzureStorageBlobContent
    ,但仍然得到了403。你能用你正在使用的最新代码更新你的问题吗?谢谢。我已经解决了这个问题。您所说的是有效的,我在创建SAS令牌时使用了
    -FullUri
    标志。删除此标志只会给我令牌的查询字符串部分,现在允许我上载blob。谢谢。我已经确认,在创建
    Blob SAS
    时,对
    获取AzureStorageContainer
    的调用正在抛出403。我更改了代码,用rwl创建了一个
    容器SAS
    ,并直接调用
    Set-AzureStorageBlobContent
    ,但仍然得到了403。你能用你正在使用的最新代码更新你的问题吗?谢谢。我已经解决了这个问题。您所说的是有效的,我在创建SAS令牌时使用了
    -FullUri
    标志。删除此标志只会给我令牌的查询字符串部分,现在允许我上载blob。谢谢