Я настроил службу приложений Azure, которая использует модель публикации контейнера. Все работает так, как ожидалось, но я хочу автоматизировать развертывание с помощью конвейера GitLab. Поэтому я создал субъекта-службы и назначил ему роль участника службы приложений. Однако в журналах заданий я вижу следующую ошибку:
ERROR: (AuthorizationFailed) The client 'xxx' with object id 'xxx' does not have authorization to perform action 'Microsoft.Web/serverfarms/read' over scope '/subscriptions/yyy/resourceGroups/my-resource-group/providers/Microsoft.Web/serverfarms/foo' or the scope is invalid. If access was recently granted, please refresh your credentials.
Code: AuthorizationFailed
Это мой трубопровод:
deploy:
image: mcr.microsoft.com/azure-cli
stage: deploy
before_script:
- az login --service-principal -u $AZURE_SP_ID -p $AZURE_SP_PASSWORD -t $AZURE_TENANT
- az extension add --name webapp --upgrade
script:
- az webapp config container set --name $AZURE_APP_NAME --resource-group $AZURE_APP_RESOURCE_GROUP
--container-image-name ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}
rules:
- if: $CI_COMMIT_TAG
Когда я назначаю роль участника службы на уровне подписки, все работает. Но не позволит ли это субъекту-службе получить доступ ко всем ресурсам в рамках этой подписки?
Проблема заключалась в том, что мне нужно было предоставить роль читателя в плане обслуживания приложений. Недостаточно предоставить роль участника в сервисе приложений.
Да, назначив субъекту-службе роль участника на уровне подписки, вы предоставите ему доступ для выполнения всех типов операций с ресурсами в области подписки. Поскольку ошибка указывает на то, что он пытается прочитать ресурс фермы серверов, который используется Службой приложений, я предлагаю предоставить SPN роль читателя на ресурсе фермы серверов, избегая при этом назначения какой-либо привилегированной роли на более высоком уровне. область действия в иерархии управления.