Powershell подключается к BLOB-объекту Azure, используя SAS вместо ключа

У меня есть сценарий, который работает для получения файла из BLOB-объекта на основе имени и ключа учетной записи хранения (что, как я понимаю, не является хорошим решением), во временное хранилище. Я пытаюсь сделать то же самое (получить тот же файл), но вместо этого использую токен SAS. В учетной записи хранения есть контейнер с именем "Autoparams", а затем в этом контейнере находится файл с именем "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 в контейнере automaparams в учетной записи хранения storageName.

Вот скрипт, который я пытаюсь получить, который получает текст хранения с помощью токена 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 символ:11

Есть идеи?

2 ответа

Решение

Я могу правильно запустить твои скрипы на моей стороне. Вы можете проверить следующее на вашей стороне.

  • Убедитесь, что вы используете токен уровня учетной записи хранения SAS, его можно найти на странице учетной записи хранения, нажмите "Создать SAS и строку подключения". Затем скопируйте токен SAS в свои скрипты.
  • Обновите модуль AzureRM до последней версии. Командлеты Powershell работают на 5.5.0 и более поздних версиях.
  • Добавьте параметр -debug, чтобы найти некоторые подсказки в журнале отладки.

Для более подробной информации, вы можете увидеть этот вопрос.

Я считаю, что проблема заключается в том, что вы указываете URL в SAS Token

$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"
Другие вопросы по тегам