Compartir a través de


Autenticación con Azure Container Registry desde Azure Container Instances

Puede usar una entidad de servicio de Microsoft Entra para proporcionar acceso a sus registros de contenedor privados en Azure Container Registry.

En este artículo, aprenderá a crear y configurar una entidad de servicio de Microsoft Entra con permisos de extracción para el registro. A continuación, iniciará un contenedor en Azure Container Instances (ACI) que extraerá la imagen de su registro privado usando la entidad de servicio para la autenticación.

Cuándo usar una entidad de servicio

Debe usar una entidad de servicio para la autenticación desde ACI en escenarios de equipos sin periféricos, como, por ejemplo aplicaciones o servicios que crean instancias de contenedor de manera automática o desatendida.

Por ejemplo, si tiene un script automatizado que se ejecuta cada noche y crea una instancia de contenedor basado en tareas para procesar determinados datos, este puede usar una entidad de servicio con permisos de solo extracción para autenticarse en el Registro. A continuación, puede intercambiar las credenciales de la entidad de servicio o revocar el acceso por completo sin que ello afecte a otros servicios y aplicaciones.

Las entidades de servicio también deben usarse cuando el usuario administrador del registro está deshabilitado.

Creación de una entidad de servicio

Para crear una entidad de servicio con acceso al registro de contenedor, ejecute el siguiente script en Azure Cloud Shell o en una instalación local de la CLI de Azure. El script tiene el formato adecuado para el shell de Bash.

Antes de ejecutar el script, actualice la variable ACR_NAME con el nombre del registro de contenedor. El valor SERVICE_PRINCIPAL_NAME debe ser único dentro del inquilino de Microsoft Entra. Si recibe un error "'http://acr-service-principal' already exists.", especifique un nombre diferente para la entidad de servicio.

Opcionalmente, puede modificar el valor --role en el comando az ad sp create-for-rbac si desea conceder permisos diferentes. Para obtener una lista completa de roles, consulte ACR roles and permissions (Roles y permisos de ACR).

Tras ejecutar el script, tome nota del identificador y la contraseña de la entidad de servicio. Cuando disponga de las credenciales, podrá configurar las aplicaciones y los servicios para autenticarse en su registro de contenedor como la entidad de servicio.

#!/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"

Uso de una entidad de servicio existente

Para conceder al registro acceso a una entidad de servicio existente, debe asignar un nuevo rol a la entidad de servicio. Al igual que con la creación de una nueva entidad de servicio, puede conceder acceso de extracción, inserción y extracción, así como de propietario, entre otros.

El script siguiente usa el comando az role assignment create para conceder permisos de extracción a la entidad de servicio especificada en la variable SERVICE_PRINCIPAL_ID. Ajuste el valor --role si quiere conceder un nivel de acceso diferente.

#!/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

Autenticación mediante la entidad de servicio

Para iniciar un contenedor en Azure Container Instances mediante una entidad de servicio, especifique su identificador para --registry-username y su contraseña 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

Se recomienda ejecutar los comandos en la versión más reciente de Azure Cloud Shell. Se establece export MSYS_NO_PATHCONV=1 para ejecutar el entorno de bash local.

Muestras de scripts

Puede encontrar los scripts del ejemplo anterior para la CLI de Azure en GitHub, así como versiones para Azure PowerShell:

Pasos siguientes

Los artículos siguientes contienen detalles adicionales sobre cómo trabajar con entidades de servicio y ACR: