Usare un'identità gestita di Azure per eseguire l'autenticazione a un Registro Azure ContainerUse an Azure managed identity to authenticate to an Azure container registry

Usare un'identità gestita per le risorse di Azure per eseguire l'autenticazione a un Registro Azure Container da un'altra risorsa di Azure, senza dover fornire o gestire le credenziali del registro.Use a managed identity for Azure resources to authenticate to an Azure container registry from another Azure resource, without needing to provide or manage registry credentials. Ad esempio, configurare un'identità gestita assegnata dall'utente o dal sistema in una macchina virtuale Linux per accedere alle immagini del contenitore dal registro contenitori, con la stessa facilità con cui si usa un registro pubblico.For example, set up a user-assigned or system-assigned managed identity on a Linux VM to access container images from your container registry, as easily as you use a public registry.

L'articolo fornisce altre informazioni sulle identità gestite e spiega come:For this article, you learn more about managed identities and how to:

  • Abilitare un'identità assegnata dall'utente o dal sistema in una macchina virtuale di AzureEnable a user-assigned or system-assigned identity on an Azure VM
  • Concedere all'identità l'accesso al Registro Azure ContainerGrant the identity access to an Azure container registry
  • Usare l'identità gestita per accedere al registro e per eseguire il pull di un'immagine del contenitoreUse the managed identity to access the registry and pull a container image

Per creare risorse di Azure, questo articolo richiede che sia eseguita l'interfaccia della riga di comando di Azure versione 2.0.55 o successive.To create the Azure resources, this article requires that you run the Azure CLI version 2.0.55 or later. Eseguire az --version per trovare la versione.Run az --version to find the version. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.If you need to install or upgrade, see Install Azure CLI.

Per configurare un registro contenitori ed eseguire il push di un'immagine del contenitore su di esso, è necessario disporre anche di un Docker installato localmente.To set up a container registry and push a container image to it, you must also have Docker installed locally. Docker offre pacchetti che consentono di configurare facilmente Docker in qualsiasi sistema macOS, Windows o Linux.Docker provides packages that easily configure Docker on any macOS, Windows, or Linux system.

Perché usare un'identità gestita?Why use a managed identity?

Un'identità gestita per le risorse di Azure fornisce ai servizi di Azure un'identità gestita automaticamente in Azure Active Directory (Azure AD).A managed identity for Azure resources provides Azure services with an automatically managed identity in Azure Active Directory (Azure AD). Con un'identità gestita è possibile configurare alcune risorse di Azure, tra cui macchine virtuali.You can configure certain Azure resources, including virtual machines, with a managed identity. Quindi, usare l'identità per accedere ad altre risorse di Azure, senza passare credenziali nel codice o negli script.Then, use the identity to access other Azure resources, without passing credentials in code or scripts.

Esistono due tipi di identità gestite:Managed identities are of two types:

  • Le identità assegnate dall'utente, che è possibile assegnare a più risorse e sono conservate per il tempo desiderato.User-assigned identities, which you can assign to multiple resources and persist for as long as your want. Le identità assegnate dall'utente sono attualmente in anteprima.User-assigned identities are currently in preview.

  • Un'identità gestita dal sistema, che è univoca per una risorsa specifica, ad esempio una singola macchina virtuale, e che è conservata per tutta la durata di tale risorsa.A system-managed identity, which is unique to a specific resource like a single virtual machine and lasts for the lifetime of that resource.

Dopo aver configurato una risorsa di Azure con un'identità gestita, è possibile concedere all'identità l'accesso a un'altra risorsa, proprio come per qualsiasi entità di sicurezza.After you set up an Azure resource with a managed identity, give the identity the access you want to another resource, just like any security principal. Ad esempio, assegnare a un'identità gestita un ruolo con pull, push e pull o altre autorizzazioni a un registro privato in Azure.For example, assign a managed identity a role with pull, push and pull, or other permissions to a private registry in Azure. Per un elenco completo dei ruoli del registro di sistema, vedere Azure container Registry Roles and Permissions. È possibile concedere a un'identità l'accesso a una o più risorse.(For a complete list of registry roles, see Azure Container Registry roles and permissions.) You can give an identity access to one or more resources.

Quindi, usare l'identità per l'autenticazione a qualsiasi servizio che supporti l'autenticazione di Azure AD senza nessuna credenziale nel codice.Then, use the identity to authenticate to any service that supports Azure AD authentication, without any credentials in your code. Per usare l'identità per accedere a un Registro Azure Container da una macchina virtuale, eseguire l'autenticazione con Azure Resource Manager.To use the identity to access an Azure container registry from a virtual machine, you authenticate with Azure Resource Manager. Scegliere come eseguire l'autenticazione usando l'identità gestita, a seconda dello scenario:Choose how to authenticate using the managed identity, depending on your scenario:

Creare un registro contenitoriCreate a container registry

Se non si ha già un Registro Azure Container, creare un registro ed eseguire il push di un'immagine del contenitore di esempio su di esso.If you don't already have an Azure container registry, create a registry and push a sample container image to it. Per i passaggi, vedere Guida introduttiva: creare un registro contenitori privato usando l'interfaccia dellariga di comando di Azure.For steps, see Quickstart: Create a private container registry using the Azure CLI.

Questo articolo presuppone che l'immagine del contenitore aci-helloworld:v1 sia archiviata nel registro.This article assumes you have the aci-helloworld:v1 container image stored in your registry. Gli esempi usano il nome di registro myContainerRegistry.The examples use a registry name of myContainerRegistry. Sostituirlo con i nomi del proprio registro e della propria immagine nei passaggi successivi.Replace with your own registry and image names in later steps.

Creare una macchina virtuale abilitata per DockerCreate a Docker-enabled VM

Creare una macchina virtuale Ubuntu abilitata per Docker.Create a Docker-enabled Ubuntu virtual machine. È inoltre necessario installare l'interfaccia della riga di comando di Azure nella macchina virtuale.You also need to install the Azure CLI on the virtual machine. Se si dispone già di una macchina virtuale di Azure, ignorare questo passaggio per creare la macchina virtuale.If you already have an Azure virtual machine, skip this step to create the virtual machine.

Distribuire una macchina virtuale di Azure Ubuntu predefinita con AZ VM create.Deploy a default Ubuntu Azure virtual machine with az vm create. L'esempio seguente crea una macchina virtuale denominata myDockerVM nel gruppo di risorse esistente denominato myResourceGroup:The following example creates a VM named myDockerVM in an existing resource group named myResourceGroup:

az vm create \
    --resource-group myResourceGroup \
    --name myDockerVM \
    --image UbuntuLTS \
    --admin-username azureuser \
    --generate-ssh-keys

Per creare la macchina virtuale sono necessari alcuni minuti.It takes a few minutes for the VM to be created. Dopo aver eseguito il comando, prendere nota del publicIpAddress visualizzato dall'interfaccia della riga di comando di Azure.When the command completes, take note of the publicIpAddress displayed by the Azure CLI. Usare questo indirizzo per stabilire connessioni SSH alla macchina virtuale.Use this address to make SSH connections to the VM.

Installare Docker nella macchina virtualeInstall Docker on the VM

Una volta che la macchina virtuale è in esecuzione, stabilire una connessione SSH alla macchina virtuale.After the VM is running, make an SSH connection to the VM. Sostituire publicIpAddress con l'indirizzo IP pubblico della macchina virtuale.Replace publicIpAddress with the public IP address of your VM.

ssh azureuser@publicIpAddress

Eseguire il comando seguente per installare Docker nella macchina virtuale:Run the following command to install Docker on the VM:

sudo apt install docker.io -y

Dopo l'installazione, eseguire il comando seguente per verificare la corretta esecuzione di Docker nella macchina virtuale:After installation, run the following command to verify that Docker is running properly on the VM:

sudo docker run -it hello-world

Output:Output:

Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Installare l'interfaccia della riga di comando di AzureInstall the Azure CLI

Seguire i passaggi descritti in Installare l'interfaccia della riga di comando di Azure con APT per installare l'interfaccia della riga di comando di Azure nella macchina virtuale Ubuntu.Follow the steps in Install Azure CLI with apt to install the Azure CLI on your Ubuntu virtual machine. Per questo articolo, assicurarsi di installare la versione 2.0.55 o successive.For this article, ensure that you install version 2.0.55 or later.

Chiudere la sessione SSH.Exit the SSH session.

Esempio 1: accesso con un'identità assegnata dall'utenteExample 1: Access with a user-assigned identity

Creare un'identitàCreate an identity

Creare un'identità nella sottoscrizione usando il comando az identity create.Create an identity in your subscription using the az identity create command. È possibile usare lo stesso gruppo di risorse usato in precedenza per creare il registro contenitori o la macchina virtuale, o un altro gruppo di risorse.You can use the same resource group you used previously to create the container registry or virtual machine, or a different one.

az identity create --resource-group myResourceGroup --name myACRId

Per configurare l'identità nei passaggi seguenti, usare il comando AZ Identity Show per archiviare l'ID risorsa dell'identità e l'ID dell'entità servizio nelle variabili.To configure the identity in the following steps, use the az identity show command to store the identity's resource ID and service principal ID in variables.

# Get resource ID of the user-assigned identity
userID=$(az identity show --resource-group myResourceGroup --name myACRId --query id --output tsv)

# Get service principal ID of the user-assigned identity
spID=$(az identity show --resource-group myResourceGroup --name myACRId --query principalId --output tsv)

Poiché è necessario l'ID dell'identità in un passaggio successivo quando si accede all'interfaccia della riga di comando dalla macchina virtuale, visualizzare il valore:Because you need the identity's ID in a later step when you sign in to the CLI from your virtual machine, show the value:

echo $userID

L'ID è nel formato:The ID is of the form:

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId

Configurare la macchina virtuale con l'identitàConfigure the VM with the identity

Il comando AZ VM Identity Assign seguente configura la macchina virtuale Docker con l'identità assegnata dall'utente:The following az vm identity assign command configures your Docker VM with the user-assigned identity:

az vm identity assign --resource-group myResourceGroup --name myDockerVM --identities $userID

Concedere all'identità l'accesso al registro contenitoriGrant identity access to the container registry

Configurare ora l'identità per accedere al registro contenitori.Now configure the identity to access your container registry. Usare prima il comando AZ ACR Show per ottenere l'ID risorsa del registro di sistema:First use the az acr show command to get the resource ID of the registry:

resourceID=$(az acr show --resource-group myResourceGroup --name myContainerRegistry --query id --output tsv)

Usare il comando AZ Role Assignment create per assegnare il ruolo AcrPull al registro di sistema.Use the az role assignment create command to assign the AcrPull role to the registry. Questo ruolo offre autorizzazioni pull al registro.This role provides pull permissions to the registry. Per fornire autorizzazioni pull e push, assegnare il ruolo ACRPush.To provide both pull and push permissions, assign the ACRPush role.

az role assignment create --assignee $spID --scope $resourceID --role acrpull

Usare l'identità per accedere al registroUse the identity to access the registry

SSH nella macchina virtuale Docker che è configurato con l'identità.SSH into the Docker virtual machine that's configured with the identity. Eseguire i comandi seguenti dell'interfaccia della riga di comando di Azure, tramite l'interfaccia della riga di comando di Azure installata nella macchina virtuale.Run the following Azure CLI commands, using the Azure CLI installed on the VM.

Eseguire prima l'autenticazione nell'interfaccia della riga di comando di Azure con AZ login, usando l'identità configurata nella macchina virtuale.First, authenticate to the Azure CLI with az login, using the identity you configured on the VM. Per <userID>, sostituire l'ID dell'identità recuperato in un passaggio precedente.For <userID>, substitute the ID of the identity you retrieved in a previous step.

az login --identity --username <userID>

Eseguire quindi l'autenticazione nel registro di sistema con AZ ACR login.Then, authenticate to the registry with az acr login. Quando si usa questo comando, l'interfaccia della riga di comando usa il token di Active Directory creato durante l'esecuzione di az login per l'autenticazione della sessione con il registro contenitori.When you use this command, the CLI uses the Active Directory token created when you ran az login to seamlessly authenticate your session with the container registry. (A seconda della configurazione della macchina virtuale, potrebbe essere necessario eseguire questo comando e i comandi di Docker con sudo.)(Depending on your VM's setup, you might need to run this command and docker commands with sudo.)

az acr login --name myContainerRegistry

Dovrebbe essere visualizzato il messaggio Login succeeded.You should see a Login succeeded message. È quindi possibile eseguire i comandi docker senza fornire credenziali.You can then run docker commands without providing credentials. Eseguire ad esempio Docker pull per eseguire il pull dell'immagine aci-helloworld:v1, specificando il nome del server di accesso del registro di sistema.For example, run docker pull to pull the aci-helloworld:v1 image, specifying the login server name of your registry. Il nome del server di accesso è costituito dal nome del registro contenitori (solo lettere minuscole) seguito da .azurecr.io, ad esempio mycontainerregistry.azurecr.io.The login server name consists of your container registry name (all lowercase) followed by .azurecr.io - for example, mycontainerregistry.azurecr.io.

docker pull mycontainerregistry.azurecr.io/aci-helloworld:v1

Esempio 2: accesso con un'identità assegnata dal sistemaExample 2: Access with a system-assigned identity

Configurare la macchina virtuale con un'identità gestita dal sistemaConfigure the VM with a system-managed identity

Il comando AZ VM Identity Assign seguente configura la macchina virtuale Docker con un'identità assegnata dal sistema:The following az vm identity assign command configures your Docker VM with a system-assigned identity:

az vm identity assign --resource-group myResourceGroup --name myDockerVM 

Usare il comando AZ VM Show per impostare una variabile sul valore di principalId (ID dell'entità servizio) dell'identità della macchina virtuale da usare nei passaggi successivi.Use the az vm show command to set a variable to the value of principalId (the service principal ID) of the VM's identity, to use in later steps.

spID=$(az vm show --resource-group myResourceGroup --name myDockerVM --query identity.principalId --out tsv)

Concedere all'identità l'accesso al registro contenitoriGrant identity access to the container registry

Configurare ora l'identità per accedere al registro contenitori.Now configure the identity to access your container registry. Usare prima il comando AZ ACR Show per ottenere l'ID risorsa del registro di sistema:First use the az acr show command to get the resource ID of the registry:

resourceID=$(az acr show --resource-group myResourceGroup --name myContainerRegistry --query id --output tsv)

Usare il comando AZ Role Assignment create per assegnare il ruolo AcrPull all'identità.Use the az role assignment create command to assign the AcrPull role to the identity. Questo ruolo offre autorizzazioni pull al registro.This role provides pull permissions to the registry. Per fornire autorizzazioni pull e push, assegnare il ruolo ACRPush.To provide both pull and push permissions, assign the ACRPush role.

az role assignment create --assignee $spID --scope $resourceID --role acrpull

Usare l'identità per accedere al registroUse the identity to access the registry

SSH nella macchina virtuale Docker che è configurato con l'identità.SSH into the Docker virtual machine that's configured with the identity. Eseguire i comandi seguenti dell'interfaccia della riga di comando di Azure, tramite l'interfaccia della riga di comando di Azure installata nella macchina virtuale.Run the following Azure CLI commands, using the Azure CLI installed on the VM.

Per prima cosa, autenticare l'interfaccia della riga di comando di Azure con AZ login, usando l'identità assegnata dal sistema nella macchina virtuale.First, authenticate the Azure CLI with az login, using the system-assigned identity on the VM.

az login --identity

Eseguire quindi l'autenticazione nel registro di sistema con AZ ACR login.Then, authenticate to the registry with az acr login. Quando si usa questo comando, l'interfaccia della riga di comando usa il token di Active Directory creato durante l'esecuzione di az login per l'autenticazione della sessione con il registro contenitori.When you use this command, the CLI uses the Active Directory token created when you ran az login to seamlessly authenticate your session with the container registry. (A seconda della configurazione della macchina virtuale, potrebbe essere necessario eseguire questo comando e i comandi di Docker con sudo.)(Depending on your VM's setup, you might need to run this command and docker commands with sudo.)

az acr login --name myContainerRegistry

Dovrebbe essere visualizzato il messaggio Login succeeded.You should see a Login succeeded message. È quindi possibile eseguire i comandi docker senza fornire credenziali.You can then run docker commands without providing credentials. Eseguire ad esempio Docker pull per eseguire il pull dell'immagine aci-helloworld:v1, specificando il nome del server di accesso del registro di sistema.For example, run docker pull to pull the aci-helloworld:v1 image, specifying the login server name of your registry. Il nome del server di accesso è costituito dal nome del registro contenitori (solo lettere minuscole) seguito da .azurecr.io, ad esempio mycontainerregistry.azurecr.io.The login server name consists of your container registry name (all lowercase) followed by .azurecr.io - for example, mycontainerregistry.azurecr.io.

docker pull mycontainerregistry.azurecr.io/aci-helloworld:v1

Passaggi successiviNext steps

In questo articolo sono state fornite altre informazioni sull'uso delle identità gestite con il Registro Azure Container e su come:In this article, you learned about using managed identities with Azure Container Registry and how to:

  • Abilitare un'identità assegnata dall'utente o dal sistema in una macchina virtuale di AzureEnable a user-assigned or system-assigned identity in an Azure VM
  • Concedere all'identità l'accesso al Registro Azure ContainerGrant the identity access to an Azure container registry
  • Usare l'identità gestita per accedere al registro e per eseguire il pull di un'immagine del contenitoreUse the managed identity to access the registry and pull a container image