Конвейер Azure DevOps Файл хранилища BLOB-объектов Azure 403 Запрещенное исключение - PullRequest
0 голосов
/ 06 июля 2019

Резюме

Я создаю конвейер инициализации CI / CD для новой учетной записи хранилища Azure в конвейере DevOps Azure и пытаюсь загрузить некоторые файлы в хранилище BLOB-объектов с помощью AzCopy, запущенного из задачи Azure Powershell в конвейере.

Ошибка

Сценарий успешно запускается с моего локального компьютера, но при запуске в конвейере DevOps Azure я получаю следующую ошибку ( ErrorDateTime - это просто запутанная дата-время в формате ISO 8601):

  • System.Management.Automation.RemoteException: [ErrorDateTime] [ERROR] Ошибка при синтаксическом анализе места назначения "https://newStorageAccount.blob.core.windows.net/config/import": Не удалось проверить назначение: произошла одна или несколько ошибок. Удаленный сервер возвратил ошибку: (403) Запрещено.
  • [ошибка] [ErrorDateTime] [ОШИБКА] Ошибка при синтаксическом анализе места назначения "https://newStorageAccount.blob.core.windows.net/config/import": Не удалось проверить место назначения: произошла одна или несколько ошибок. Удаленный сервер возвратил ошибку: (403) Запрещено.

  • [отладка] Обработано: ## vso [task.logissue type = error] [ErrorDateTime] [ОШИБКА] Ошибка при синтаксическом анализе места назначения "https://newStorageAccount.blob.core.windows.net/config/import": Не удалось проверить место назначения: произошла одна или несколько ошибок. Удаленный сервер возвратил ошибку: (403) Запрещено.

  • Ошибка записи:
  • Этот запрос не авторизован для выполнения этой операции.

Предположения

  • Учетная запись хранения настроена так, чтобы разрешать доступ только для определенных виртуальных сетей и IP-адресов.
  • Похоже, что брандмауэр или учетные данные каким-то образом настроены неправильно, но ServicePrincipal, выполняющий сценарий, был успешно использован в других задачах конвейера, и для понимания этих проблем я временно предоставил разрешения Владельцу подписки ServicePrincipal и Правилам брандмауэра учетной записи хранения. на вкладке «Разрешить доверенным службам Microsoft доступ к этой учетной записи хранения»

Что я пробовал ...

  • Я успешно запустил скрипт с моего локального компьютера с моим IP-адресом в списке разрешенных.

  • Если я включу «Разрешить доступ из всех сетей» в правилах брандмауэра учетной записи хранения, сценарий запустится и файл будет успешно загружен.

  • Создается впечатление, что агенты конвейера Azure, работающие в собственной виртуальной сети, не имеют доступа к моей учетной записи хранения, но я бы подумал, что это требование будет удовлетворено, если установить «Разрешить доверенным службам Microsoft доступ к этой учетной записи хранения». "в настройках брандмауэра

Я использую следующую строку в задаче Azure Powershell. Я доволен значениями, потому что все работает, когда «Все сети» или мой IP-адрес включены, и я работаю локально.

.\AzCopy.exe /Source:$SourcePath /Dest:$blobUrlDir /DestKey:$key /Pattern:$FilenamePattern /Y

Будем благодарны за любые мысли или указания.

Спасибо

SJB

Ответы [ 2 ]

1 голос
/ 07 июля 2019

После проведения дальнейших исследований я заметил следующую возникшую проблему - то, что DevOps Azure не считается доверенной службой Microsoft с точки зрения учетной записи хранения.

Мой временный обходной путь:

  • Установка действия DefaultAction на Разрешить , что позволяет «Доступ ко всем сетям».
  • Установка действия DefaultAction на Запретить после того, как действие копирования обеспечило повторное применение моих правил виртуальной сети.
Try
{
    Update-AzureRmStorageAccountNetworkRuleSet -ResourceGroupName "$ResourceGroupName" -Name "$StorageAccountName" -DefaultAction Allow
    .\AzCopy.exe /Source:$SourcePath /Dest:$blobUrlDir /DestKey:$key /Pattern:$FilenamePattern /Y
}
Catch
{
    #Handle errors...
}
Finally
{
    Update-AzureRmStorageAccountNetworkRuleSet -ResourceGroupName "$ResourceGroupName" -Name "$StorageAccountName" -DefaultAction Deny
}

Спасибо

SJB

0 голосов
/ 07 июля 2019

Рассматривали ли вы использование задачи Azure DevOps «Копирование файла Azure» вместо сценария powershell? см .: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-file-copy?view=azure-devops

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