Autentisera till ett Azure-containerregister med hjälp av en hanterad Azure-identitet

Använd en hanterad identitet för Azure-resurser för att autentisera till ett Azure-containerregister från en annan Azure-resurs, utan att behöva ange eller hantera registerautentiseringsuppgifter. Du kan till exempel konfigurera en användartilldelad eller systemtilldelad hanterad identitet på en virtuell Linux-dator för att få åtkomst till containeravbildningar från containerregistret, lika enkelt som du använder ett offentligt register. Eller konfigurera ett Azure Kubernetes Service-kluster för att använda sin hanterade identitet för att hämta containeravbildningar från Azure Container Registry för podddistributioner.

I den här artikeln får du lära dig mer om hanterade identiteter och hur du:

  • Aktivera en användartilldelad eller systemtilldelad identitet på en virtuell Azure-dator
  • Bevilja identiteten åtkomst till ett Azure-containerregister
  • Använda den hanterade identiteten för att komma åt registret och hämta en containeravbildning

För att skapa Azure-resurserna kräver den här artikeln att du kör Azure CLI version 2.0.55 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Om du vill konfigurera ett containerregister och skicka en containeravbildning till det måste du också ha Docker installerat lokalt. Docker innehåller paket som enkelt kan konfigurera Docker på ett macOS-, Windows- eller Linux-system.

Varför ska jag använda en hanterad identitet?

Om du inte känner till funktionen för hanterade identiteter för Azure-resurser kan du läsa igenom den här översikten.

När du har konfigurerat valda Azure-resurser med en hanterad identitet ger du identiteten den åtkomst du vill ha till en annan resurs, precis som alla säkerhetsobjekt. Du kan till exempel tilldela en hanterad identitet en roll med pull-, push- och pull-behörigheter eller andra behörigheter till ett privat register i Azure. (En fullständig lista över registerroller finns i Roller och behörigheter för Azure Container Registry.) Du kan ge en identitet åtkomst till en eller flera resurser.

Använd sedan identiteten för att autentisera till alla tjänster som stöder Microsoft Entra-autentisering, utan några autentiseringsuppgifter i koden. Välj hur du ska autentisera med hjälp av den hanterade identiteten, beroende på ditt scenario. Om du vill använda identiteten för att komma åt ett Azure-containerregister från en virtuell dator autentiserar du med Azure Resource Manager.

Skapa ett containerregister

Om du inte redan har ett Azure-containerregister skapar du ett register och skickar en exempelcontaineravbildning till det. Anvisningar finns i Snabbstart: Skapa ett privat containerregister med hjälp av Azure CLI.

Den här artikeln förutsätter att du har containeravbildningen aci-helloworld:v1 lagrad i registret. I exemplen används registernamnet myContainerRegistry. Ersätt med dina egna register- och avbildningsnamn i senare steg.

Skapa en Docker-aktiverad virtuell dator

Skapa en Docker-aktiverad virtuell Ubuntu-dator. Du måste också installera Azure CLI på den virtuella datorn. Om du redan har en virtuell Azure-dator hoppar du över det här steget för att skapa den virtuella datorn.

Distribuera en virtuell Ubuntu Azure-standarddator med az vm create. I följande exempel skapas en virtuell dator med namnet myDockerVM i en befintlig resursgrupp med namnet myResourceGroup:

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

Det tar några minuter att skapa den virtuella datorn. När kommandot har slutförts noterar du det publicIpAddress som visas av Azure CLI. Använd den här adressen för att skapa SSH-anslutningar till den virtuella datorn.

Installera Docker på den virtuella datorn

När den virtuella datorn har körts skapar du en SSH-anslutning till den virtuella datorn. Ersätt publicIpAddress med den offentliga IP-adressen för den virtuella datorn.

ssh azureuser@publicIpAddress

Kör följande kommando för att installera Docker på den virtuella datorn:

sudo apt update
sudo apt install docker.io -y

Efter installationen kör du följande kommando för att kontrollera att Docker körs korrekt på den virtuella datorn:

sudo docker run -it mcr.microsoft.com/hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Installera Azure CLI

Följ stegen i Installera Azure CLI med apt för att installera Azure CLI på din virtuella Ubuntu-dator. I den här artikeln ska du se till att du installerar version 2.0.55 eller senare.

Avsluta SSH-sessionen.

Exempel 1: Åtkomst med en användartilldelad identitet

Skapa en identitet

Skapa en identitet i din prenumeration med kommandot az identity create . Du kan använda samma resursgrupp som du använde tidigare för att skapa containerregistret eller den virtuella datorn eller en annan.

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

Om du vill konfigurera identiteten i följande steg använder du kommandot az identity show för att lagra identitetens resurs-ID och tjänstens huvudnamns-ID i variabler.

# 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)

Eftersom du behöver identitetens ID i ett senare steg när du loggar in på CLI från den virtuella datorn visar du värdet:

echo $userID

ID:t är av formuläret:

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

Konfigurera den virtuella datorn med identiteten

Följande az vm identity assign-kommando konfigurerar den virtuella Docker-datorn med den användartilldelade identiteten:

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

Bevilja identitetsåtkomst till containerregistret

Konfigurera nu identiteten så att den får åtkomst till containerregistret. Använd först kommandot az acr show för att hämta resurs-ID:t för registret:

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

Använd kommandot az role assignment create för att tilldela AcrPull-rollen till identiteten. Den här rollen ger pull-behörigheter till registret. Om du vill ge både pull- och push-behörigheter tilldelar du AcrPush-rollen.

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

Använda identiteten för att komma åt registret

SSH till den virtuella Docker-dator som har konfigurerats med identiteten. Kör följande Azure CLI-kommandon med hjälp av Azure CLI installerat på den virtuella datorn.

Autentisera först till Azure CLI med az login med hjälp av den identitet som du konfigurerade på den virtuella datorn. För <userID>ersätter du ID:t för den identitet som du hämtade i ett tidigare steg.

az login --identity --username <userID>

Autentisera sedan till registret med az acr login. När du använder det här kommandot använder CLI den Active Directory-token som skapades när du körde az login för att smidigt autentisera sessionen med containerregistret. (Beroende på konfigurationen av den virtuella datorn kan du behöva köra det här kommandot och Docker-kommandona med sudo.)

az acr login --name myContainerRegistry

Du bör se ett Login succeeded meddelande. Du kan sedan köra docker kommandon utan att ange autentiseringsuppgifter. Kör till exempel docker pull för att hämta avbildningen aci-helloworld:v1 och ange namnet på inloggningsservern för registret. Namnet på inloggningsservern består av ditt containerregisternamn (alla gemener) följt av .azurecr.io – till exempel mycontainerregistry.azurecr.io.

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

Exempel 2: Åtkomst med en systemtilldelad identitet

Konfigurera den virtuella datorn med en systemhanterad identitet

Följande az vm identity assign-kommando konfigurerar den virtuella Docker-datorn med en systemtilldelad identitet:

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

Använd kommandot az vm show för att ange en variabel till värdet principalId för (tjänstens huvudnamns-ID) för den virtuella datorns identitet, som ska användas i senare steg.

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

Bevilja identitetsåtkomst till containerregistret

Konfigurera nu identiteten så att den får åtkomst till containerregistret. Använd först kommandot az acr show för att hämta resurs-ID:t för registret:

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

Använd kommandot az role assignment create för att tilldela AcrPull-rollen till identiteten. Den här rollen ger pull-behörigheter till registret. Om du vill ge både pull- och push-behörigheter tilldelar du AcrPush-rollen.

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

Använda identiteten för att komma åt registret

SSH till den virtuella Docker-dator som har konfigurerats med identiteten. Kör följande Azure CLI-kommandon med hjälp av Azure CLI installerat på den virtuella datorn.

Autentisera först Azure CLI med az login med hjälp av den systemtilldelade identiteten på den virtuella datorn.

az login --identity

Autentisera sedan till registret med az acr login. När du använder det här kommandot använder CLI den Active Directory-token som skapades när du körde az login för att smidigt autentisera sessionen med containerregistret. (Beroende på konfigurationen av den virtuella datorn kan du behöva köra det här kommandot och Docker-kommandona med sudo.)

az acr login --name myContainerRegistry

Du bör se ett Login succeeded meddelande. Du kan sedan köra docker kommandon utan att ange autentiseringsuppgifter. Kör till exempel docker pull för att hämta avbildningen aci-helloworld:v1 och ange namnet på inloggningsservern för registret. Namnet på inloggningsservern består av ditt containerregisternamn (alla gemener) följt av .azurecr.io – till exempel mycontainerregistry.azurecr.io.

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

Nästa steg

I den här artikeln har du lärt dig hur du använder hanterade identiteter med Azure Container Registry och hur du:

  • Aktivera en användartilldelad eller systemtilldelad identitet på en virtuell Azure-dator
  • Bevilja identiteten åtkomst till ett Azure-containerregister
  • Använda den hanterade identiteten för att komma åt registret och hämta en containeravbildning