Verwenden einer verwalteten Azure-Identität für die Azure Container Registry-AuthentifizierungUse an Azure managed identity to authenticate to an Azure container registry

Verwenden Sie eine verwaltete Identität für Azure-Ressourcen, um sich von einer anderen Azure-Ressource aus bei einer Azure Container Registry-Instanz zu authentifizieren, ohne Registrierungsanmeldeinformationen angeben oder verwalten zu müssen.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. Richten Sie beispielsweise eine benutzerseitig oder systemseitig zugewiesene verwaltete Identität für eine Linux-VM ein, um ebenso einfach wie bei Verwendung einer öffentlichen Registrierung auf Containerimages aus Ihrer Containerregistrierung zuzugreifen.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.

In diesem Artikel erfahren Sie mehr über verwaltete Identitäten und lernen Folgendes:For this article, you learn more about managed identities and how to:

  • Aktivieren einer benutzerseitig oder systemseitig zugewiesenen Identität für eine Azure-VMEnable a user-assigned or system-assigned identity on an Azure VM
  • Gewähren des Zugriffs auf eine Azure Container Registry-Instanz für die IdentitätGrant the identity access to an Azure container registry
  • Verwenden der verwalteten Identität, um auf die Registrierung zuzugreifen und ein Containerimage abzurufenUse the managed identity to access the registry and pull a container image

Um die in diesem Artikel verwendeten Azure-Ressourcen zu erstellen, müssen Sie mindestens Version 2.0.55 der Azure-Befehlszeilenschnittstelle (Azure CLI) ausführen.To create the Azure resources, this article requires that you run the Azure CLI version 2.0.55 or later. Führen Sie az --version aus, um die Version zu finden.Run az --version to find the version. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sei bei Bedarf unter Installieren der Azure CLI.If you need to install or upgrade, see Install Azure CLI.

Um eine Containerregistrierung einzurichten und per Push ein Containerimage zu übertragen, muss außerdem Docker lokal installiert sein.To set up a container registry and push a container image to it, you must also have Docker installed locally. Für Docker sind Pakete erhältlich, mit denen Docker auf einem macOS-, Windows- oder Linux-System problemlos konfiguriert werden kann.Docker provides packages that easily configure Docker on any macOS, Windows, or Linux system.

Gründe für die Verwendung einer verwalteten IdentitätWhy use a managed identity?

Über eine verwaltete Identität für Azure-Ressourcen wird für Azure-Dienste eine automatisch verwaltete Identität in Azure Active Directory (Azure AD) bereitgestellt.A managed identity for Azure resources provides Azure services with an automatically managed identity in Azure Active Directory (Azure AD). Sie können bestimmte Azure-Ressourcen wie z.B. virtuelle Computer mit einer verwalteten Identität konfigurieren.You can configure certain Azure resources, including virtual machines, with a managed identity. Anschließend verwenden Sie die Identität für den Zugriff auf weitere Ressourcen, ohne dass Anmeldeinformationen in Code oder Skripts übergeben werden.Then, use the identity to access other Azure resources, without passing credentials in code or scripts.

Es gibt zwei Arten von verwalteten Identitäten:Managed identities are of two types:

  • Benutzerseitig zugewiesene Identitäten können mehreren Ressourcen zugewiesen werden und werden für die gewünschte Dauer beibehalten.User-assigned identities, which you can assign to multiple resources and persist for as long as your want. Benutzerseitig zugewiesene Identitäten befinden sich zurzeit in der Vorschau.User-assigned identities are currently in preview.

  • Systemseitig zugewiesene Identitäten sind für eine spezifische Ressource eindeutig, z.B. eine einzelne VM, und sind für die Lebensdauer dieser Ressource gültig.A system-managed identity, which is unique to a specific resource like a single virtual machine and lasts for the lifetime of that resource.

Nachdem Sie eine Azure-Ressource mit einer verwalteten Identität eingerichtet haben, können Sie der verwalteten Identität genau wie bei jedem anderen Sicherheitsprinzipal Zugriff auf eine andere Ressource erteilen.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. Weisen Sie beispielsweise einer verwalteten Identität eine Rolle mit Pullberechtigungen, Push- und Pullberechtigungen oder anderen Berechtigungen für eine private Registrierung in Azure zu.For example, assign a managed identity a role with pull, push and pull, or other permissions to a private registry in Azure. (Eine vollständige Liste der Rollen finden Sie unter Azure Container Registry – Rollen und Berechtigungen.) Sie können einer Identität Zugriff auf eine oder mehrere Ressourcen gewähren.(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.

Anschließend können die Identität für die Authentifizierung bei jedem Dienst verwenden, der die Azure AD-Authentifizierung unterstützt. Hierfür müssen keine Anmeldeinformationen in Ihrem Code enthalten sein.Then, use the identity to authenticate to any service that supports Azure AD authentication, without any credentials in your code. Um mithilfe der Identität von einer VM aus auf eine Azure Container Registry-Instanz zuzugreifen, authentifizieren Sie sich mit Azure Resource Manager.To use the identity to access an Azure container registry from a virtual machine, you authenticate with Azure Resource Manager. Wählen Sie je nach Szenario die Art der Authentifizierung mithilfe der verwalteten Identität aus:Choose how to authenticate using the managed identity, depending on your scenario:

Erstellen einer ContainerregistrierungCreate a container registry

Wenn Sie nicht bereits über eine Azure Container Registry-Instanz verfügen, erstellen Sie eine Registrierung, und übertragen Sie per Push ein Beispielcontainerimage in die Registrierung.If you don't already have an Azure container registry, create a registry and push a sample container image to it. Die hierzu erforderlichen Schritte finden Sie unter Schnellstart: Erstellen einer privaten Containerregistrierung mit der Azure CLI.For steps, see Quickstart: Create a private container registry using the Azure CLI.

In diesem Artikel wird vorausgesetzt, dass Sie das Containerimage aci-helloworld:v1 in Ihrer Registrierung gespeichert haben.This article assumes you have the aci-helloworld:v1 container image stored in your registry. Die Beispiele verwenden eine Registrierung namens myContainerRegistry.The examples use a registry name of myContainerRegistry. Ersetzen Sie in den weiteren Schritten diesen Namen durch Ihre eigenen Registrierungs- und Imagenamen.Replace with your own registry and image names in later steps.

Erstellen einer Docker-fähigen VMCreate a Docker-enabled VM

Erstellen Sie eine Docker-fähige Ubuntu-VM.Create a Docker-enabled Ubuntu virtual machine. Sie müssen außerdem die Azure CLI auf dem virtuellen Computer installieren.You also need to install the Azure CLI on the virtual machine. Wenn Sie bereits über eine Azure-VM verfügen, überspringen Sie diesen Schritt zum Erstellen des virtuellen Computers.If you already have an Azure virtual machine, skip this step to create the virtual machine.

Stellen Sie mithilfe von az vm create eine Azure-Standard-VM mit Ubuntu bereit.Deploy a default Ubuntu Azure virtual machine with az vm create. Im folgenden Beispiel wird eine VM mit dem Namen myDockerVM in der vorhandenen Ressourcengruppe myResourceGroup erstellt: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

Die Erstellung des virtuellen Computers dauert einige Minuten.It takes a few minutes for the VM to be created. Notieren Sie nach Abschluss der Befehlsausführung die von der Azure CLI angezeigte publicIpAddress.When the command completes, take note of the publicIpAddress displayed by the Azure CLI. Verwenden Sie diese Adresse, um SSH-Verbindungen mit der VM herzustellen.Use this address to make SSH connections to the VM.

Installieren von Docker auf der VMInstall Docker on the VM

Wenn die VM ausgeführt wird, stellen Sie eine SSH-Verbindung mit der VM her.After the VM is running, make an SSH connection to the VM. Ersetzen Sie publicIpAddress durch die öffentliche IP-Adresse Ihrer VM.Replace publicIpAddress with the public IP address of your VM.

ssh azureuser@publicIpAddress

Führen Sie den folgenden Befehl aus, um Docker auf der VM zu installieren:Run the following command to install Docker on the VM:

sudo apt install docker.io -y

Führen Sie nach der Installation den folgenden Befehl aus, um sicherzustellen, dass Docker ordnungsgemäß auf der VM ausgeführt wird:After installation, run the following command to verify that Docker is running properly on the VM:

sudo docker run -it hello-world

Ausgabe:Output:

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

Installieren der Azure CLIInstall the Azure CLI

Führen Sie die in Installieren der Azure CLI mit apt beschriebenen Schritte aus, um die Azure CLI auf Ihrer Ubuntu-VM zu installieren.Follow the steps in Install Azure CLI with apt to install the Azure CLI on your Ubuntu virtual machine. Für diesen Artikel müssen Sie sicherstellen, dass Sie Version 2.0.55 oder höher installieren.For this article, ensure that you install version 2.0.55 or later.

Beenden Sie die SSH-Sitzung.Exit the SSH session.

Beispiel 1: Zugriff mit einer benutzerseitig zugewiesenen IdentitätExample 1: Access with a user-assigned identity

Erstellen einer IdentitätCreate an identity

Erstellen Sie mit dem Befehl az identity create eine Identität in Ihrem Abonnement.Create an identity in your subscription using the az identity create command. Sie können entweder dieselbe Ressourcengruppe verwenden, die Sie zuvor zum Erstellen der Containerregistrierung oder VM verwendet haben, oder Sie verwenden eine andere Ressourcengruppe.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

Um die Identität in den folgenden Schritten zu konfigurieren, verwenden Sie den Befehl az identity show, um die Ressourcen-ID und die Dienstprinzipal-ID der Identität in Variablen zu speichern.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)

Da Sie die ID der Identität in einem späteren Schritt benötigen, wenn Sie sich von Ihrer VM aus bei der CLI anmelden, zeigen Sie den Wert an: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

Die ID hat das folgende Format:The ID is of the form:

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

Konfigurieren der VM mit der IdentitätConfigure the VM with the identity

Über den folgenden Befehl az vm identity assign wird Ihre Docker-VM mit der benutzerseitig zugewiesenen Identität konfiguriert: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

Gewähren des Zugriffs auf die Containerregistrierung für die IdentitätGrant identity access to the container registry

Jetzt konfigurieren Sie die Identität für den Zugriff auf Ihre Containerregistrierung.Now configure the identity to access your container registry. Verwenden Sie zunächst den Befehl az acr show, um die Ressourcen-ID der Registrierung abzurufen: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)

Verwenden Sie den Befehl az role assignment create, um der Registrierung die Rolle „AcrPull“ zuzuweisen.Use the az role assignment create command to assign the AcrPull role to the registry. Diese Rolle gewährt der Registrierung Pullberechtigungen.This role provides pull permissions to the registry. Um sowohl Pull- als auch Pushberechtigungen zu gewähren, weisen Sie die Rolle „ACRPush“ zu.To provide both pull and push permissions, assign the ACRPush role.

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

Verwenden der Identität zum Zugriff auf die RegistrierungUse the identity to access the registry

Stellen Sie eine SSH-Verbindung mit der Docker-VM her, die mit der Identität konfiguriert ist.SSH into the Docker virtual machine that's configured with the identity. Führen Sie über die Azure CLI-Installation auf der VM die folgenden Azure CLI-Befehle aus.Run the following Azure CLI commands, using the Azure CLI installed on the VM.

Authentifizieren Sie sich zunächst mithilfe von az login bei der Azure-Befehlszeilenschnittstelle, und verwenden Sie hierbei die Identität, die Sie für die VM konfiguriert haben.First, authenticate to the Azure CLI with az login, using the identity you configured on the VM. Ersetzen Sie <userID> durch die ID der Identität, die Sie in einem der vorherigen Schritte abgerufen haben.For <userID>, substitute the ID of the identity you retrieved in a previous step.

az login --identity --username <userID>

Authentifizieren Sie sich anschließend mit dem Befehl az acr login bei der Registrierung.Then, authenticate to the registry with az acr login. Bei Verwendung dieses Befehls verwendet die CLI das bei Ausführung von az login erstellte Active Directory-Token für die nahtlose Authentifizierung Ihrer Sitzung mit der Containerregistrierung.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. (Je nach Einrichtung Ihrer VM müssen Sie diesen Befehl und docker-Befehle mit sudo ausführen.)(Depending on your VM's setup, you might need to run this command and docker commands with sudo.)

az acr login --name myContainerRegistry

Es sollte die Meldung Login succeeded angezeigt werden.You should see a Login succeeded message. Anschließend können Sie docker-Befehle ohne Angabe von Anmeldeinformationen ausführen.You can then run docker commands without providing credentials. Führen Sie beispielsweise docker pull aus, um das Image aci-helloworld:v1 zu pullen, und geben Sie dabei den Namen des Anmeldeservers für Ihre Registrierung an.For example, run docker pull to pull the aci-helloworld:v1 image, specifying the login server name of your registry. Der Name des Anmeldeservers setzt sich aus dem Namen Ihrer Containerregistrierung (nur Kleinbuchstaben) gefolgt von .azurecr.io zusammen. Beispiel: 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

Beispiel 2: Zugriff mit einer systemseitig zugewiesenen IdentitätExample 2: Access with a system-assigned identity

Konfigurieren der VM mit einer systemseitig verwalteten IdentitätConfigure the VM with a system-managed identity

Über den folgenden Befehl vom Typ az vm identity assign wird Ihre Docker-VM mit einer systemseitig zugewiesenen Identität konfiguriert: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 

Legen Sie mithilfe des Befehls az vm show eine Variable auf den Wert von principalId (die Dienstprinzipal-ID) der VM-Identität fest, um sie in späteren Schritten zu verwenden.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)

Gewähren des Zugriffs auf die Containerregistrierung für die IdentitätGrant identity access to the container registry

Jetzt konfigurieren Sie die Identität für den Zugriff auf Ihre Containerregistrierung.Now configure the identity to access your container registry. Verwenden Sie zunächst den Befehl az acr show, um die Ressourcen-ID der Registrierung abzurufen: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)

Verwenden Sie den Befehl az role assignment create, um der Identität die Rolle „AcrPull“ zuzuweisen.Use the az role assignment create command to assign the AcrPull role to the identity. Diese Rolle gewährt der Registrierung Pullberechtigungen.This role provides pull permissions to the registry. Um sowohl Pull- als auch Pushberechtigungen zu gewähren, weisen Sie die Rolle „ACRPush“ zu.To provide both pull and push permissions, assign the ACRPush role.

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

Verwenden der Identität zum Zugriff auf die RegistrierungUse the identity to access the registry

Stellen Sie eine SSH-Verbindung mit der Docker-VM her, die mit der Identität konfiguriert ist.SSH into the Docker virtual machine that's configured with the identity. Führen Sie über die Azure CLI-Installation auf der VM die folgenden Azure CLI-Befehle aus.Run the following Azure CLI commands, using the Azure CLI installed on the VM.

Authentifizieren Sie sich zunächst mithilfe von az login bei der Azure-Befehlszeilenschnittstelle, und verwenden Sie dabei die systemseitig zugewiesene Identität für die VM.First, authenticate the Azure CLI with az login, using the system-assigned identity on the VM.

az login --identity

Authentifizieren Sie sich anschließend mit dem Befehl az acr login bei der Registrierung.Then, authenticate to the registry with az acr login. Bei Verwendung dieses Befehls verwendet die CLI das bei Ausführung von az login erstellte Active Directory-Token für die nahtlose Authentifizierung Ihrer Sitzung mit der Containerregistrierung.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. (Je nach Einrichtung Ihrer VM müssen Sie diesen Befehl und docker-Befehle mit sudo ausführen.)(Depending on your VM's setup, you might need to run this command and docker commands with sudo.)

az acr login --name myContainerRegistry

Es sollte die Meldung Login succeeded angezeigt werden.You should see a Login succeeded message. Anschließend können Sie docker-Befehle ohne Angabe von Anmeldeinformationen ausführen.You can then run docker commands without providing credentials. Führen Sie beispielsweise docker pull aus, um das Image aci-helloworld:v1 zu pullen, und geben Sie dabei den Namen des Anmeldeservers für Ihre Registrierung an.For example, run docker pull to pull the aci-helloworld:v1 image, specifying the login server name of your registry. Der Name des Anmeldeservers setzt sich aus dem Namen Ihrer Containerregistrierung (nur Kleinbuchstaben) gefolgt von .azurecr.io zusammen. Beispiel: 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

Nächste SchritteNext steps

In diesem Artikel haben Sie mehr über die Verwendung verwalteter Identitäten mit Azure Container Registry erfahren und Folgendes gelernt:In this article, you learned about using managed identities with Azure Container Registry and how to:

  • Aktivieren einer benutzerseitig oder systemseitig zugewiesenen Identität in einer Azure-VMEnable a user-assigned or system-assigned identity in an Azure VM
  • Gewähren des Zugriffs auf eine Azure Container Registry-Instanz für die IdentitätGrant the identity access to an Azure container registry
  • Verwenden der verwalteten Identität, um auf die Registrierung zuzugreifen und ein Containerimage abzurufenUse the managed identity to access the registry and pull a container image