Partilhar via


Autenticar com o Registro de Contêiner do Azure a partir de Instâncias de Contêiner do Azure

Você pode usar uma entidade de serviço do Microsoft Entra para fornecer acesso aos seus registros de contêiner privados no Registro de Contêiner do Azure.

Neste artigo, você aprenderá a criar e configurar uma entidade de serviço do Microsoft Entra com permissões pull para seu registro. Em seguida, inicie um contêiner nas Instâncias de Contêiner do Azure (ACI) que extrai sua imagem do seu registro privado, usando a entidade de serviço para autenticação.

Quando usar uma entidade de serviço

Você deve usar uma entidade de serviço para autenticação da ACI em cenários sem cabeça, como em aplicativos ou serviços que criam instâncias de contêiner de maneira automatizada ou autônoma.

Por exemplo, se você tiver um script automatizado que é executado todas as noites e cria uma instância de contêiner baseada em tarefas para processar alguns dados, ele pode usar uma entidade de serviço com permissões somente recebimento para autenticar no registro. Em seguida, você pode alternar as credenciais da entidade de serviço ou revogar seu acesso completamente sem afetar outros serviços e aplicativos.

As entidades de serviço também devem ser usadas quando o usuário administrador do registro estiver desabilitado.

Criar um principal de serviço

Para criar uma entidade de serviço com acesso ao seu registro de contêiner, execute o seguinte script no Azure Cloud Shell ou em uma instalação local da CLI do Azure. O script é formatado para o shell Bash.

Antes de executar o script, atualize a ACR_NAME variável com o nome do seu registro de contêiner. O SERVICE_PRINCIPAL_NAME valor deve ser exclusivo dentro do locatário do Microsoft Entra. Se você receber um erro "'http://acr-service-principal' already exists.", especifique um nome diferente para a entidade de serviço.

Opcionalmente, você pode modificar o --role valor no comando az ad sp create-for-rbac se quiser conceder permissões diferentes. Para obter uma lista completa de funções, consulte Funções e permissões ACR.

Depois de executar o script, anote o ID e a senha da entidade de serviço. Depois de ter suas credenciais, você pode configurar seus aplicativos e serviços para autenticar no registro de contêiner como a entidade de serviço.

#!/bin/bash
# This script requires Azure CLI version 2.25.0 or later. Check version with `az --version`.

# Modify for your environment.
# ACR_NAME: The name of your Azure Container Registry
# SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_NAME=$servicePrincipal

# Obtain the full registry ID
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
# echo $registryId

# Create the service principal with rights scoped to the registry.
# Default permissions are for docker pull access. Modify the '--role'
# argument value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)

# Output the service principal's credentials; use these in your services and
# applications to authenticate to the container registry.
echo "Service principal ID: $USER_NAME"
echo "Service principal password: $PASSWORD"

Usar uma entidade de serviço existente

Para conceder acesso ao Registro a uma entidade de serviço existente, você deve atribuir uma nova função à entidade de serviço. Assim como na criação de uma nova entidade de serviço, você pode conceder acesso pull, push and pull e owner, entre outros.

O script a seguir usa o comando az role assignment create para conceder permissões pull a uma entidade de serviço especificada na SERVICE_PRINCIPAL_ID variável. Ajuste o --role valor se quiser conceder um nível diferente de acesso.

#!/bin/bash
# Modify for your environment. The ACR_NAME is the name of your Azure Container
# Registry, and the SERVICE_PRINCIPAL_ID is the service principal's 'appId' or
# one of its 'servicePrincipalNames' values.
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_ID=$servicePrincipal

# Populate value required for subsequent command args
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)

# Assign the desired role to the service principal. Modify the '--role' argument
# value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
az role assignment create --assignee $SERVICE_PRINCIPAL_ID --scope $ACR_REGISTRY_ID --role acrpull

Autenticar usando a entidade de serviço

Para iniciar um contêiner nas Instâncias de Contêiner do Azure usando uma entidade de serviço, especifique sua ID para --registry-username, e sua senha para --registry-password.

az container create \
    --resource-group myResourceGroup \
    --name mycontainer \
    --image mycontainerregistry.azurecr.io/myimage:v1 \
    --registry-login-server mycontainerregistry.azurecr.io \
    --registry-username <service-principal-ID> \
    --registry-password <service-principal-password>

Nota

Recomendamos executar os comandos na versão mais recente do Azure Cloud Shell. Definido export MSYS_NO_PATHCONV=1 para executar o ambiente bash on-perm.

Scripts de amostra

Você pode encontrar os scripts de exemplo anteriores para a CLI do Azure no GitHub, bem como versões para o Azure PowerShell:

Próximos passos

Os seguintes artigos contêm detalhes adicionais sobre como trabalhar com entidades de serviço e ACR: