Как я могу использовать удостоверение SystemAssigned при извлечении образа из реестра контейнеров Azure в экземпляры контейнеров Azure?
Я хочу создать контейнер (или группу контейнеров) в экземплярах контейнеров Azure, извлекая образы из реестра контейнеров Azure, но с использованием удостоверения SystemAssigned. При этом я хочу избежать использования учетных данных ACR, субъекта- службы или идентификатора, присвоенного пользователем.
Когда я запускаю этот сценарий (Azure CLI в PowerShell)...
$LOC = "westeurope"
$RG = "myresourcegroup"
$ACRNAME = "myacr"
az configure --defaults location=$LOC group=$RG
$acr = az acr show -n $ACRNAME -o json | ConvertFrom-Json -Depth 10
az container create --name app1 --image $($acr.loginServer+"/app1") `
--assign-identity --role acrpull --scope $acr.id `
--debug
... ACI, похоже, не распознает, что он уже должен быть авторизован для ACR, и показывает это приглашение:
Image registry username:
Версия Azure CLI: 2.14.0
Имеет ли это смысл? Поддерживается ли управляемая идентификация ACI для ACR?
4 ответа
В вашем коде, когда вы создаете контейнер Azure с управляемым удостоверением, которое создается во время создания ACI для проверки подлинности в ACR. Боюсь, что вы не можете этого сделать, потому что есть ограничения
Вы не можете использовать управляемое удостоверение для извлечения образа из реестра контейнеров Azure при создании группы контейнеров. Идентификатор доступен только в работающем контейнере.
С января 2022 г. управляемое удостоверение поддерживается экземпляром контейнера Azure для доступа к реестру контейнеров Azure: https://docs.microsoft.com/en-us/azure/container-instances/using-azure-container-registry-mi .
Это решение не будет использовать управляемое удостоверение, и важно отметить, что нам потребуется роль владельца по крайней мере на уровне группы ресурсов.
Основная идея заключается в использовании субъектов-служб для получения доступа с использованием роли acrpull. См. следующий сценарий PowerShell:
$resourceGroup = (az group show --name $resourceGroupName | ConvertFrom-Json )
$containerRegistry = (az acr show --name $containerRegistryName | ConvertFrom-Json)
$servicePrincipal = (az ad sp create-for-rbac `
--name "${containerRegistryName}.azurecr.io" `
--scopes $containerRegistry.id `
--role acrpull `
| ConvertFrom-Json )
az container create `
--name $containerInstanceName `
--resource-group $resourceGroupName `
--image $containerImage `
--command-line "tail -f /dev/null" `
--registry-username $servicePrincipal.appId `
--registry-password $servicePrincipal.password
Обратите внимание, что мы создали субъект-службу, поэтому нам также необходимо удалить его:
az ad sp delete --id $servicePrincipal.appId
Существует документация о том, как это сделать:
Развертывание в экземплярах контейнеров Azure из реестра контейнеров Azure.
@minus_one - решение не работает в моем случае. Runbook для создания реестра контейнеров. Требуется больше привилегий, чем указано здесь... https://github.com/Azure/azure-powershell/issues/3215