1

我很难使用Blob SAS令牌通过Powershell将文件写入Azure中的Blob。使用SAS令牌上传Blob内容

我使用生成的SAS标记的代码是:如果我使用这个浏览器它的正常工作和下载文件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

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

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

这产生预期令牌如预期。但是,我无法使用它来上传文件。每当我尝试我收到一个(403)禁止。我使用上传的代码是:

$accountContext = New-AzureStorageContext -SasToken $sasToken 

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

我已经成功地使用了类似这样的制作到Add-AzureRmAccount调用验证后,BLOB内容设置的方法。

我也试过使用容器SAS令牌,但我一直得到403错误。

该令牌适用于阅读的事实导致我相信我错过了我的Powershell脚本中的任何东西 - 任何人都可以了解这是什么?

回答

2

令牌适用于读取使我相信,我是 失去了一些东西在我的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 
+0

我证实,创造一个'一滴SAS'当调用'GET-AzureStorageContainer'被抛出403。我改变了我的代码,用rwl创建一个'Container SAS'并直接调用'Set-AzureStorageBlobContent',但仍然得到了403. – Fermin

+0

你能用你正在使用的最新代码更新你的问题吗?谢谢。 –

+0

我已解决该问题。你说的是工作,我在创建SAS令牌时使用了'-FullUri'标志。删除这个标志只给了我现在允许我上传blob的令牌的查询字符串部分。谢谢。 – Fermin