Verwenden einer verwalteten Azure-Identität für die Azure Container Registry-Authentifizierung

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. 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. Oder richten Sie einen Azure Kubernetes Service-Cluster ein, um seine verwaltete Identität zu verwenden, um Container-Images aus der Azure Container Registry für Pod-Bereitstellungen zu ziehen.

In diesem Artikel erfahren Sie mehr über verwaltete Identitäten und lernen Folgendes:

  • Aktivieren einer benutzerseitig oder systemseitig zugewiesenen Identität für eine Azure-VM
  • Gewähren des Zugriffs auf eine Azure Container Registry-Instanz für die Identität
  • Verwenden der verwalteten Identität, um auf die Registrierung zuzugreifen und ein Containerimage abzurufen

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. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.

Um eine Containerregistrierung einzurichten und per Push ein Containerimage zu übertragen, muss außerdem Docker lokal installiert sein. Für Docker sind Pakete erhältlich, mit denen Docker auf einem macOS-, Windows- oder Linux-System problemlos konfiguriert werden kann.

Gründe für die Verwendung einer verwalteten Identität

Wenn Sie mit der Funktion für verwaltete Identitäten für Azure-Ressourcen nicht vertraut sind, finden Sie hier eine Übersicht.

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. 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. (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.

Sie können dann diese Identität für die Authentifizierung bei jedem Dienst verwenden, der die Microsoft Entra-Authentifizierung unterstützt. Hierfür müssen keine Anmeldeinformationen im Code enthalten sein. Wählen Sie je nach Szenario, wie die Authentifizierung mit der verwalteten Identität erfolgen soll. Um mithilfe der Identität von einer VM aus auf eine Azure Container Registry-Instanz zuzugreifen, authentifizieren Sie sich mit Azure Resource Manager.

Erstellen einer Containerregistrierung

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. Die hierzu erforderlichen Schritte finden Sie unter Schnellstart: Erstellen einer privaten Containerregistrierung mit der Azure CLI.

In diesem Artikel wird vorausgesetzt, dass Sie das Containerimage aci-helloworld:v1 in Ihrer Registrierung gespeichert haben. Die Beispiele verwenden eine Registrierung namens myContainerRegistry. Ersetzen Sie in den weiteren Schritten diesen Namen durch Ihre eigenen Registrierungs- und Imagenamen.

Erstellen einer Docker-fähigen VM

Erstellen Sie eine Docker-fähige Ubuntu-VM. Sie müssen außerdem die Azure CLI auf dem virtuellen Computer installieren. Wenn Sie bereits über eine Azure-VM verfügen, überspringen Sie diesen Schritt zum Erstellen des virtuellen Computers.

Stellen Sie mithilfe von az vm create eine Azure-Standard-VM mit Ubuntu bereit. Im folgenden Beispiel wird eine VM mit dem Namen myDockerVM in der vorhandenen Ressourcengruppe myResourceGroup erstellt:

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

Die Erstellung des virtuellen Computers dauert einige Minuten. Notieren Sie nach Abschluss der Befehlsausführung die von der Azure CLI angezeigte publicIpAddress. Verwenden Sie diese Adresse, um SSH-Verbindungen mit der VM herzustellen.

Installieren von Docker auf der VM

Wenn die VM ausgeführt wird, stellen Sie eine SSH-Verbindung mit der VM her. Ersetzen Sie publicIpAddress durch die öffentliche IP-Adresse Ihrer VM.

ssh azureuser@publicIpAddress

Führen Sie den folgenden Befehl aus, um Docker auf der VM zu installieren:

sudo apt update
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:

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

Installieren der 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. Für diesen Artikel müssen Sie sicherstellen, dass Sie Version 2.0.55 oder höher installieren.

Beenden Sie die SSH-Sitzung.

Beispiel 1: Zugriff mit einer benutzerseitig zugewiesenen Identität

Erstellen einer Identität

Erstellen Sie mit dem Befehl az identity create eine Identität in Ihrem Abonnement. Sie können entweder dieselbe Ressourcengruppe verwenden, die Sie zuvor zum Erstellen der Containerregistrierung oder VM verwendet haben, oder Sie verwenden eine andere Ressourcengruppe.

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.

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

echo $userID

Die ID hat das folgende Format:

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

Konfigurieren der VM mit der Identität

Über den folgenden Befehl az vm identity assign wird Ihre Docker-VM mit der benutzerseitig zugewiesenen Identität konfiguriert:

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

Gewähren des Zugriffs auf die Containerregistrierung für die Identität

Jetzt konfigurieren Sie die Identität für den Zugriff auf Ihre Containerregistrierung. Verwenden Sie zunächst den Befehl az acr show, um die Ressourcen-ID der Registrierung abzurufen:

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. Diese Rolle gewährt der Registrierung Pullberechtigungen. Um sowohl Pull- als auch Pushberechtigungen zu gewähren, weisen Sie die Rolle „AcrPush“ zu.

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

Verwenden der Identität zum Zugriff auf die Registrierung

Stellen Sie eine SSH-Verbindung mit der Docker-VM her, die mit der Identität konfiguriert ist. Führen Sie über die Azure CLI-Installation auf der VM die folgenden Azure CLI-Befehle aus.

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. Ersetzen Sie <userID> durch die ID der Identität, die Sie in einem der vorherigen Schritte abgerufen haben.

az login --identity --username <userID>

Authentifizieren Sie sich anschließend mit dem Befehl az acr login bei der Registrierung. 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. (Je nach Einrichtung Ihrer VM müssen Sie diesen Befehl und docker-Befehle mit sudo ausführen.)

az acr login --name myContainerRegistry

Es sollte die Meldung Login succeeded angezeigt werden. Anschließend können Sie docker-Befehle ohne Angabe von Anmeldeinformationen ausführen. 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. Der Name des Anmeldeservers setzt sich aus dem Namen Ihrer Containerregistrierung (nur Kleinbuchstaben) gefolgt von .azurecr.io zusammen. Beispiel: mycontainerregistry.azurecr.io.

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

Beispiel 2: Zugriff mit einer systemseitig zugewiesenen Identität

Konfigurieren der VM mit einer systemseitig verwalteten Identität

Über den folgenden Befehl vom Typ az vm identity assign wird Ihre Docker-VM mit einer systemseitig zugewiesenen Identität konfiguriert:

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.

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ät

Jetzt konfigurieren Sie die Identität für den Zugriff auf Ihre Containerregistrierung. Verwenden Sie zunächst den Befehl az acr show, um die Ressourcen-ID der Registrierung abzurufen:

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. Diese Rolle gewährt der Registrierung Pullberechtigungen. Um sowohl Pull- als auch Pushberechtigungen zu gewähren, weisen Sie die Rolle „AcrPush“ zu.

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

Verwenden der Identität zum Zugriff auf die Registrierung

Stellen Sie eine SSH-Verbindung mit der Docker-VM her, die mit der Identität konfiguriert ist. Führen Sie über die Azure CLI-Installation auf der VM die folgenden Azure CLI-Befehle aus.

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.

az login --identity

Authentifizieren Sie sich anschließend mit dem Befehl az acr login bei der Registrierung. 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. (Je nach Einrichtung Ihrer VM müssen Sie diesen Befehl und docker-Befehle mit sudo ausführen.)

az acr login --name myContainerRegistry

Es sollte die Meldung Login succeeded angezeigt werden. Anschließend können Sie docker-Befehle ohne Angabe von Anmeldeinformationen ausführen. 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. Der Name des Anmeldeservers setzt sich aus dem Namen Ihrer Containerregistrierung (nur Kleinbuchstaben) gefolgt von .azurecr.io zusammen. Beispiel: mycontainerregistry.azurecr.io.

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

Nächste Schritte

In diesem Artikel haben Sie mehr über die Verwendung verwalteter Identitäten mit Azure Container Registry erfahren und Folgendes gelernt:

  • Aktivieren einer benutzerseitig oder systemseitig zugewiesenen Identität in einer Azure-VM
  • Gewähren des Zugriffs auf eine Azure Container Registry-Instanz für die Identität
  • Verwenden der verwalteten Identität, um auf die Registrierung zuzugreifen und ein Containerimage abzurufen