Powershell подключается к BLOB-объекту Azure, используя SAS вместо ключа - PullRequest
0 голосов
/ 25 октября 2018

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

Это сценарий, который я пытаюсь получить с помощью SAS-токена storagecontext:

$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 ]

0 голосов
/ 26 октября 2018

Я считаю, что проблема в том, что вы указываете 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"
0 голосов
/ 26 октября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...