Condividi tramite


Eseguire l'autenticazione con Registro Azure Container da Istanze di Azure Container

È possibile usare un'entità servizio Microsoft Entra per fornire l'accesso ai registri contenitori privati in Registro Azure Container.

Questo articolo illustra come creare e configurare un'entità servizio Microsoft Entra con autorizzazioni pull per il registro. Si avvia un contenitore nelle Istanze di Azure Container che esegue il pull delle immagini dal registro privato usando l'entità servizio per l'autenticazione.

Quando usare un'entità servizio

Usare un'entità servizio per l'autenticazione da Istanze di Azure Container negli scenari headless, ad esempio nelle applicazioni o nei servizi che creano delle istanze del contenitore in modo automatico.

Ad esempio, se uno script automatico viene eseguito nelle ore notturne e crea un'istanza del contenitore basata sull'attività per elaborare alcuni dati, può usare un'entità servizio con le autorizzazioni pull-only per l'autenticazione al registro. È possibile ruotare le credenziali dell'entità servizio o revocarne completamente l'accesso senza alcun impatto sugli altri servizi o applicazioni.

Le entità servizio dovrebbero essere usate anche quando l'utente amministratore del registro è disabilitato.

Creare un'entità servizio

Per creare un'entità servizio con accesso al registro contenitori, eseguire lo script seguente in Azure Cloud Shell o in un'installazione locale dell'interfaccia della riga di comando di Azure. Lo script viene formattato per la shell Bash.

Prima di eseguire lo script, aggiornare la variabile ACR_NAME con il nome del registro contenitori. Il SERVICE_PRINCIPAL_NAME valore deve essere univoco all'interno del tenant di Microsoft Entra. Se si riceve un errore "'http://acr-service-principal' already exists.", specificare un nome diverso per l'entità servizio.

È facoltativamente possibile modificare il valore --role nel comando az ad sp create-for-rbac se si vogliono concedere autorizzazioni diverse. Per un elenco completo dei ruoli, vedere ACR roles and permissions (Ruoli e autorizzazioni del registro Azure Container).

Dopo aver eseguito lo script, prendere nota dell'ID e della password dell'entità servizio. Dopo aver ottenuto le credenziali, è possibile configurare le applicazioni e i servizi per l'autenticazione nel registro contenitori come entità servizio.

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

Usare un'entità servizio esistente

Per concedere al registro l'accesso a un'entità servizio esistente, è necessario assegnare un nuovo ruolo all'entità servizio. Come per la creazione di una nuova entità servizio, è possibile concedere, tra gli altri, l'accesso pull, push e pull e proprietario.

Lo script seguente usa il comando az role assignment create per concedere le autorizzazioni pull a un'entità servizio specificata nella variabile SERVICE_PRINCIPAL_ID. Modificare il valore --role se si vuole concedere un livello di accesso diverso.

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

Eseguire l'autenticazione con l'entità servizio

Per avviare un contenitore in Istanze di Azure Container usando un'entità servizio, specificare l'ID per --registry-username e la password per --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

È consigliabile eseguire i comandi nella versione più recente di Azure Cloud Shell. Impostare export MSYS_NO_PATHCONV=1 per l'esecuzione dell'ambiente Bash locale.

Script di esempio

Gli script di esempio precedenti per l'interfaccia della riga di comando di Azure sono disponibili in GitHub, così come le versioni per Azure PowerShell:

Passaggi successivi

Gli articoli seguenti contengono altre informazioni sull'uso delle entità servizio e di Registro Azure Container: