Share via


S’authentifier avec Azure Container Registry à partir d’Azure Container Instances

Vous pouvez utiliser un principal de service Microsoft Entra pour fournir l’accès à vos registres de conteneurs privés dans Azure Container Registry.

Dans cet article, vous apprendrez à créer et à configurer un principal de service Microsoft Entra avec l’autorisation d’accès en extraction à votre registre. Dans Azure Container Instances (ACI), vous démarrerez ensuite un conteneur qui extrait son image de votre registre privé, en utilisant le principal de service pour l’authentification.

Quand utiliser un principal de service

Vous devez utiliser un principal de service pour l’authentification à partir d’ACI dans les scénarios sans affichage, par exemple dans les applications ou services qui créent des instances de conteneur de façon automatisée ou sans assistance.

Par exemple, si vous disposez d’un script automatisé qui s’exécute la nuit et crée une instance de conteneur basée sur les tâches pour traiter des données, il peut utiliser un principal de service avec une autorisation d’extraction uniquement pour s’authentifier auprès du registre. Vous pouvez ensuite faire tourner les informations d’identification du principal de service ou révoquer complètement son accès sans affecter les autres applications et services.

Les principaux de service doivent également être utilisés lorsque le registre admin user est désactivé.

Créer un principal du service

Pour créer un principal de service avec accès à votre registre de conteneurs, exécutez le script suivant dans Azure Cloud Shell ou dans une installation locale de l’interface de ligne de commande Azure CLI. Le script est mis en forme pour l’interpréteur de commandes Bash.

Avant d’exécuter le script, mettez à jour la variable ACR_NAME avec le nom de votre registre de conteneurs. La valeur SERVICE_PRINCIPAL_NAME doit être unique dans votre locataire Microsoft Entra. Si vous recevez une erreur « 'http://acr-service-principal' already exists. », spécifiez un autre nom pour le principal du service.

Vous pouvez éventuellement modifier la valeur --role dans la commande az ad sp create-for-rbac si vous souhaitez accorder des autorisations différentes. Pour obtenir la liste complète des rôles, consultez Autorisations et rôles Azure Container Registry.

Après avoir exécuté le script, notez l’ID et le mot de passe du principal de service. Une fois que vous avez noté les informations d’identification, vous pouvez configurer vos applications et services afin qu’ils s’authentifient auprès de votre registre de conteneurs en tant que principal du service.

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

Utiliser un principal de service existant

Pour accorder l’accès au registre à un principal de service existant, vous devez assigner un nouveau rôle au principal de service. Comme pour la création d’un principal du service, vous pouvez notamment accorder un accès en envoi (push), un accès en envoi et tirage (pull), ou un accès propriétaire.

Le script suivant utilise la commande az role assignment create pour accorder des autorisations en extraction à un principal de service que vous spécifiez dans la variable SERVICE_PRINCIPAL_ID. Ajustez la valeur --role si vous souhaitez accorder un niveau d’accès différent.

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

S’authentifier à l’aide du principal de service

Pour lancer un conteneur dans Azure Container Instances à l’aide d’un principal de service, spécifiez l’ID pour --registry-username et son mot de passe pour --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>

Notes

Nous vous recommandons d’exécuter les commandes dans la version la plus récente d’Azure Cloud Shell. Définissez export MSYS_NO_PATHCONV=1 pour l’exécution de l’environnement bash sur site.

Exemples de scripts

Vous trouverez les exemples de scripts précédents pour Azure CLI sur GitHub, ainsi que les versions pour Azure PowerShell :

Étapes suivantes

Les articles suivants incluent des détails supplémentaires sur l’utilisation des principaux de service et ACR :