Een door Azure beheerde identiteit gebruiken om te verifiëren bij een Azure-containerregister

Gebruik een beheerde identiteit voor Azure-resources om te verifiëren bij een Azure-containerregister vanuit een andere Azure-resource, zonder dat u registerreferenties hoeft op te geven of te beheren. Stel bijvoorbeeld een door de gebruiker toegewezen of door het systeem toegewezen beheerde identiteit in op een Linux-VM om toegang te krijgen tot containerinstallatiekopieën uit uw containerregister, net zo eenvoudig als u een openbaar register gebruikt. U kunt ook een Azure Kubernetes Service-cluster instellen om de beheerde identiteit te gebruiken om containerinstallatiekopieën op te halen uit Azure Container Registry voor podimplementaties.

Voor dit artikel leert u meer over beheerde identiteiten en het volgende:

  • Een door de gebruiker toegewezen of door het systeem toegewezen identiteit inschakelen op een Azure-VM
  • De identiteit toegang verlenen tot een Azure-containerregister
  • De beheerde identiteit gebruiken om toegang te krijgen tot het register en een containerinstallatiekopie op te halen

Als u de Azure-resources wilt maken, moet u voor dit artikel Azure CLI versie 2.0.55 of hoger uitvoeren. Voer az --version uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

Als u een containerregister wilt instellen en er een containerinstallatiekopieën naar wilt pushen, moet Docker ook lokaal zijn geïnstalleerd. Docker biedt pakketten die eenvoudig Docker configureren op elk macOS-, Windows- of Linux-systeem.

Waarom een beheerde identiteit gebruiken?

Als u niet bekend bent met de functie voor beheerde identiteiten voor Azure-resources, raadpleegt u dit overzicht.

Nadat u geselecteerde Azure-resources met een beheerde identiteit hebt ingesteld, geeft u de identiteit de toegang tot een andere resource, net zoals elke beveiligingsprincipaal. Wijs bijvoorbeeld een beheerde identiteit een rol toe met pull-, push- en pull-machtigingen of andere machtigingen voor een privéregister in Azure. (Zie voor een volledige lijst met registerrollen Azure Container Registry-rollen en -machtigingen.) U kunt een identiteit toegang geven tot een of meer resources.

Gebruik vervolgens de identiteit om te verifiëren bij elke service die Ondersteuning biedt voor Microsoft Entra-verificatie, zonder referenties in uw code. Kies hoe u verifieert met behulp van de beheerde identiteit, afhankelijk van uw scenario. Als u de identiteit wilt gebruiken voor toegang tot een Azure-containerregister vanaf een virtuele machine, verifieert u zich met Azure Resource Manager.

Een containerregister maken

Als u nog geen Azure-containerregister hebt, maakt u een register en pusht u er een voorbeeldcontainerinstallatiekopieën naartoe. Zie Quickstart: Een privécontainerregister maken met behulp van de Azure CLI voor stappen.

In dit artikel wordt ervan uitgegaan dat u de aci-helloworld:v1 containerinstallatiekopieën hebt opgeslagen in uw register. In de voorbeelden wordt een registernaam van myContainerRegistry gebruikt. Vervang in latere stappen door uw eigen register- en installatiekopieën.

Een VM met Docker maken

Maak een virtuele Ubuntu-machine met Docker-functionaliteit. U moet ook de Azure CLI installeren op de virtuele machine. Als u al een virtuele Azure-machine hebt, kunt u deze stap overslaan om de virtuele machine te maken.

Implementeer een standaard virtuele Ubuntu Azure-machine met az vm create. In het volgende voorbeeld wordt een VIRTUELE machine met de naam myDockerVM gemaakt in een bestaande resourcegroep met de naam myResourceGroup:

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

Het duurt enkele minuten voordat de virtuele machine wordt gemaakt. Wanneer de opdracht is voltooid, noteert u de publicIpAddress weergave van de Azure CLI. Gebruik dit adres om SSH-verbindingen met de virtuele machine te maken.

Docker installeren op de VIRTUELE machine

Nadat de VM is uitgevoerd, maakt u een SSH-verbinding met de virtuele machine. Vervang publicIpAddress door het openbare IP-adres van uw VIRTUELE machine.

ssh azureuser@publicIpAddress

Voer de volgende opdracht uit om Docker te installeren op de virtuele machine:

sudo apt update
sudo apt install docker.io -y

Voer na de installatie de volgende opdracht uit om te controleren of Docker correct wordt uitgevoerd op de VM:

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

De Azure CLI installeren

Volg de stappen in Azure CLI installeren met apt om de Azure CLI op uw virtuele Ubuntu-machine te installeren. Zorg ervoor dat u versie 2.0.55 of hoger voor dit artikel installeert.

Sluit de SSH-sessie af.

Voorbeeld 1: Toegang met een door de gebruiker toegewezen identiteit

Een identiteit maken

Maak een identiteit in uw abonnement met behulp van de opdracht az identity create . U kunt dezelfde resourcegroep gebruiken die u eerder hebt gebruikt om het containerregister of de virtuele machine of een andere te maken.

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

Als u de identiteit in de volgende stappen wilt configureren, gebruikt u de opdracht az identity show om de resource-id en service-principal-id van de identiteit op te slaan in variabelen.

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

Omdat u de id van de identiteit in een latere stap nodig hebt wanneer u zich aanmeldt bij de CLI vanaf uw virtuele machine, geeft u de waarde weer:

echo $userID

De id is van het formulier:

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

De VIRTUELE machine configureren met de identiteit

Met de volgende opdracht az vm identity assign configureert u uw Docker-VM met de door de gebruiker toegewezen identiteit:

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

Identiteit toegang verlenen tot het containerregister

Configureer nu de identiteit voor toegang tot uw containerregister. Gebruik eerst de opdracht az acr show om de resource-id van het register op te halen:

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

Gebruik de opdracht az role assignment create om de AcrPull-rol toe te wijzen aan de identiteit. Deze rol biedt pull-machtigingen voor het register. Als u zowel pull- als pushmachtigingen wilt opgeven, wijst u de rol AcrPush toe.

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

De identiteit gebruiken om toegang te krijgen tot het register

SSH naar de virtuele Docker-machine die is geconfigureerd met de identiteit. Voer de volgende Azure CLI-opdrachten uit met behulp van de Azure CLI die op de VIRTUELE machine is geïnstalleerd.

Verifieer eerst bij de Azure CLI met az login, met behulp van de identiteit die u hebt geconfigureerd op de virtuele machine. Vervang <userID>hiervoor de id van de identiteit die u in een vorige stap hebt opgehaald.

az login --identity --username <userID>

Verifieer vervolgens bij het register met az acr login. Wanneer u deze opdracht gebruikt, gebruikt de CLI het Active Directory-token dat is gemaakt toen u de sessie naadloos hebt geverifieerd az login met het containerregister. (Afhankelijk van de installatie van uw VIRTUELE machine moet u deze opdracht en docker-opdrachten mogelijk uitvoeren met sudo.)

az acr login --name myContainerRegistry

Er wordt een Login succeeded bericht weergegeven. Vervolgens kunt u opdrachten uitvoeren docker zonder referenties op te geven. Voer bijvoorbeeld docker pull uit om de aci-helloworld:v1 installatiekopie op te halen, waarbij u de naam van de aanmeldingsserver van uw register opgeeft. De naam van de aanmeldingsserver bestaat uit de naam van uw containerregister (allemaal kleine letters), gevolgd door .azurecr.io , mycontainerregistry.azurecr.iobijvoorbeeld.

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

Voorbeeld 2: Toegang met een door het systeem toegewezen identiteit

De VM configureren met een door het systeem beheerde identiteit

Met de volgende opdracht az vm identity assign configureert u uw Docker-VM met een door het systeem toegewezen identiteit:

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

Gebruik de opdracht az vm show om een variabele in te stellen op de waarde van principalId (de service-principal-id) van de identiteit van de virtuele machine, zodat u deze in latere stappen kunt gebruiken.

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

Identiteit toegang verlenen tot het containerregister

Configureer nu de identiteit voor toegang tot uw containerregister. Gebruik eerst de opdracht az acr show om de resource-id van het register op te halen:

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

Gebruik de opdracht az role assignment create om de AcrPull-rol toe te wijzen aan de identiteit. Deze rol biedt pull-machtigingen voor het register. Als u zowel pull- als pushmachtigingen wilt opgeven, wijst u de rol AcrPush toe.

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

De identiteit gebruiken om toegang te krijgen tot het register

SSH naar de virtuele Docker-machine die is geconfigureerd met de identiteit. Voer de volgende Azure CLI-opdrachten uit met behulp van de Azure CLI die op de VIRTUELE machine is geïnstalleerd.

Verifieer eerst de Azure CLI met az login met behulp van de door het systeem toegewezen identiteit op de virtuele machine.

az login --identity

Verifieer vervolgens bij het register met az acr login. Wanneer u deze opdracht gebruikt, gebruikt de CLI het Active Directory-token dat is gemaakt toen u de sessie naadloos hebt geverifieerd az login met het containerregister. (Afhankelijk van de installatie van uw VIRTUELE machine moet u deze opdracht en docker-opdrachten mogelijk uitvoeren met sudo.)

az acr login --name myContainerRegistry

Er wordt een Login succeeded bericht weergegeven. Vervolgens kunt u opdrachten uitvoeren docker zonder referenties op te geven. Voer bijvoorbeeld docker pull uit om de aci-helloworld:v1 installatiekopie op te halen, waarbij u de naam van de aanmeldingsserver van uw register opgeeft. De naam van de aanmeldingsserver bestaat uit de naam van uw containerregister (allemaal kleine letters), gevolgd door .azurecr.io , mycontainerregistry.azurecr.iobijvoorbeeld.

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

Volgende stappen

In dit artikel hebt u geleerd hoe u beheerde identiteiten gebruikt met Azure Container Registry en hoe u het volgende kunt doen:

  • Een door de gebruiker toegewezen of door het systeem toegewezen identiteit inschakelen in een Azure-VM
  • De identiteit toegang verlenen tot een Azure-containerregister
  • De beheerde identiteit gebruiken om toegang te krijgen tot het register en een containerinstallatiekopie op te halen