Я использую конвейер devops для обновления containerApp. Конвейер devops использует собственный пул агентов, который использует агент VMSS. в задаче конвейера cli я создаю назначенное системой управляемое удостоверение для containerApp с помощью команд az cli, а на следующем шаге я пытаюсь назначить роль извлечения ACR реестра для containerApp в частном ACR, используя команду ниже
az role assignment create \
--assignee-object-id $PRINCIPALID \
--assignee-principal-type ServicePrincipal \
--role AcrPull \
--scope /subscriptions/$(SUBSCRIPTION)/resourceGroups/$(RG_NAME)/providers/Microsoft.ContainerRegistry/registries/$(acrContainerName)
получение этой ошибки в консоли devops:
(AuthorizationFailed) The client '3447a78f-2d20-4a27-abcd-4050272e5946' with object id '3447a78f-2d20-4a27-abcd-4050272e5946' does not have authorization or an ABAC condition not fulfilled to perform action 'Microsoft.Authorization/roleAssignments/write' over scope '/subscriptions/12d3e9402-cddbf-4272-83b5-c479199032d6/resourceGroups/my-infra-rg/providers/Microsoft.ContainerRegistry/registries/abccacrxqkglrt4qana4/providers/Microsoft.Authorization/roleAssignments/7722b8ef0-9418-4093-z230-152e422cc29d' or the scope is invalid
Я могу выполнить эту задачу через свою локальную командную строку, а также у меня есть права администратора доступа пользователя к подписке. Задача файла yaml выглядит следующим образом:
- task: AzureCLI@2
inputs:
azureSubscription: $(armDeploymentServiceConnection)
scriptType: 'bash'
scriptLocation: 'inlineScript'
AzureSubscription содержит сервисное соединение ARM, которое я создал в DevOps для подключения к ARM.
Если я ищу идентификатор клиента, показанный в ошибке консоли devops, на портале Azure он не существует, это результат Кто-нибудь может здесь помочь? Спасибо
@Daniel Mann, который является субъектом-службой, определенным там, я не могу найти субъект-службу с clientId на портале Azure, поэтому не могу проверить разрешения, но другая команда az containerapp Identity назначается успешно


Ошибка обычно возникает, если у субъекта-службы нет необходимых ролей или разрешений для выполнения действия. Я полагаю, что вы ищете идентификатор в регистрации приложений, а не в корпоративных приложениях.
Чтобы найти этот субъект-службу на портале Azure, скопируйте сообщение об ошибке clientID from и найдите его в корпоративных приложениях.
Перейдите на Портал Azure -> Azure Active Directory -> Корпоративные приложения -> Установите фильтр для всех приложений -> Вставьте скопированный идентификатор в строку поиска:

В вашем случае вам необходимо назначить роль администратора доступа пользователей субъекту-службе в требуемой области (подписка или группа ресурсов).
Обратите внимание, что вы можете искать только Name, чтобы найти субъект-службу для назначения роли.

Если у вас есть несколько субъектов-служб для одного отображаемого имени, вы можете либо переименовать этот субъект-службу, изменив свойства, либо проверить идентификатор при назначении роли.
Переименование субъекта-службы из свойств:

Проверка ID при назначении роли:

Спасибо за ваши подробные шаги. Поскольку в devops для docker и arm создано несколько сервисных подключений, и они имеют одно и то же имя на портале, как я могу узнать, какому субъекту службы дать разрешение на портале, прежде чем получить эту ошибку, которая дает идентификатор объекта?
Когда вы нажимаете Управление субъектом-службой из Azure DevOps, приложение открывается на странице регистрации приложений портала. Чтобы получить objectID, нажмите ссылку Управляемое приложение здесь . Откроется Enterprise application страница, где вы можете найти идентификатор объекта, например этот.
Имеет ли личность, указанная в
armDeploymentServiceConnection, соответствующие разрешения?