我有一个脚本正在根据存储帐户名和密钥(我意识到这不是一个好的解决方案)从Blob获取文件到临时存储。我试图移动做相同的事情(获取相同的文件),但改用SAS令牌。 在存储帐户中,有一个名为“ automationparams”的容器,然后在该容器中有一个名为“ nsgscript.ps1”的文件。
我为该容器生成了一个SAS令牌,但无法找到一种为整个存储帐户生成令牌的方法。必须位于以下容器级别(单个文件)。
原来的脚本(工作原理)是:
$StorageAccountName = "storagename"
$StorageAccountKey = "abcdefghijkstorageaccountkeyhere"
$ContainerName = "automationparams"
$Blob1Name = "nsgscript.ps1"
$TargetFolderPath = ($env:TEMP)
$context = New-AzureStorageContext `
-StorageAccountName $StorageAccountName `
-StorageAccountKey $StorageAccountKey
$result = Get-AzureStorageBlobContent `
-Blob $Blob1Name `
-Container $ContainerName `
-Context $context `
-Destination $TargetFolderPath
这会将nsgscript.ps1下载到storageName存储帐户的automationparams容器中。
这是我正在尝试使用SAS令牌获取存储上下文的脚本:
$StorageAccountName = "storagename"
$Blob1Name = "nsgscript.ps1"
$TargetFolderPath = ($env:TEMP)
$context = New-AzureStorageContext -StorageAccountName $StorageAccountName -SASToken "https://storagelocation.blob.core.windows.net/automationparams?st=2018-10-25T19%3A57%3A00Z&se=2020-10-26T19%3A57%3A00Z&sp=rl&sv=2018-03-28&sr=c&sig=abcdefghijklmnorestofkey"
$result = Get-AzureStorageBlobContent `
-Blob $Blob1Name `
-Container $ContainerName `
-Context $context `
-Destination $TargetFolderPath
运行该命令时,出现以下错误消息: Get-AzureStorageBlobContent:远程服务器返回错误: (403)禁止。 HTTP状态码:403-HTTP错误消息: 服务器无法验证请求。确保值 授权标头的格式正确,包括签名。 在第1行:char:11
有什么想法吗?
答案 0 :(得分:1)
我相信问题是因为您要在SAS令牌中指定URL
$context = New-AzureStorageContext -StorageAccountName $StorageAccountName -SASToken "https://storagelocation.blob.core.windows.net/automationparams?st=2018-10-25T19%3A57%3A00Z&se=2020-10-26T19%3A57%3A00Z&sp=rl&sv=2018-03-28&sr=c&sig=abcdefghijklmnorestofkey"
尝试将以下代码替换为以下代码:
$context = New-AzureStorageContext -StorageAccountName $StorageAccountName -SASToken "st=2018-10-25T19%3A57%3A00Z&se=2020-10-26T19%3A57%3A00Z&sp=rl&sv=2018-03-28&sr=c&sig=abcdefghijklmnorestofkey"
答案 1 :(得分:0)
我可以正确地把你的纸条放在我这边。您可以一边检查以下内容。
有关更多参考,您可以看到此question。