Как я могу использовать удостоверение 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