Verwenden von verwalteten Identitäten mit Azure Container Instances

Verwenden Sie verwaltete Identitäten für Azure-Ressourcen, um Code in Azure Container Instances auszuführen, der mit anderen Azure-Diensten interagiert – ohne Geheimnisse oder Anmeldeinformationen im Code verwalten zu müssen. Das Feature bietet eine Bereitstellung von Azure Container Instances mit einer automatisch verwalteten Identität in Microsoft Entra ID.

In diesem Artikel erfahren Sie mehr über verwaltete Identitäten in Azure Container Instances, und Sie lernen Folgendes:

  • Aktivieren einer vom Benutzer oder vom System zugewiesenen Identität in einer Containergruppe
  • Gewähren des Zugriffs auf eine Azure Key Vault-Instanz für die Identität
  • Verwenden der verwalteten Identität zum Zugreifen auf eine Key Vault-Instanz über einen ausgeführten Container

Passen Sie die Beispiele an, um Identitäten in Azure Container Instances zu aktivieren und für den Zugriff auf andere Azure-Dienste zu verwenden. Die Beispiele sind interaktiv. In der Praxis würden Ihre Containerimages Code ausführen, um auf Azure-Dienste zuzugreifen.

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

Mit einer verwalteten Identität in einem ausgeführten Container können Sie sich bei jedem Dienst authentifizieren, der die Microsoft Entra-Authentifizierung unterstützt, ohne Anmeldeinformationen im Containercode verwalten zu müssen. Für Dienste, die die Azure AD-Authentifizierung nicht unterstützen, können Sie Geheimnisse in Azure Key Vault speichern und mithilfe der verwalteten Identität auf den Schlüsseltresor zugreifen, um Anmeldeinformationen abzurufen. Weitere Informationen zur Verwendung einer verwalteten Identität finden Sie unter Was sind verwaltete Identitäten für Azure-Ressourcen?

Aktivieren einer verwalteten Identität

Aktivieren Sie beim Erstellen einer Containergruppe eine oder mehrere verwaltete Identitäten, indem Sie eine ContainerGroupIdentity-Eigenschaft festlegen. Sie können verwaltete Identitäten auch aktivieren oder aktualisieren, wenn eine Containergruppe bereits ausgeführt wird. In beiden Fällen wird die Containergruppe neu gestartet. Zum Festlegen der Identitäten für eine neue oder vorhandene Containergruppe können Sie die Azure-Befehlszeilenschnittstelle, eine Resource Manager-Vorlage, eine YAML-Datei oder ein anderes Azure-Tool verwenden.

Azure Container Instances unterstützt sowohl vom Benutzer als auch vom System zugewiesene verwaltete Azure-Identitäten. In einer Containergruppe können Sie eine vom System zugewiesene Identität, eine oder mehrere vom Benutzer zugewiesene Identitäten oder beide Identitätstypen aktivieren. Wenn Sie nicht mit verwalteten Identitäten für Azure-Ressourcen vertraut sind, sehen Sie sich die Übersicht an.

Verwenden einer verwalteten Identität

Zur Verwendung einer verwalteten Identität muss der Identität der Zugriff auf mindestens eine Azure-Dienstressource (z. B. eine Web-App, einen Schlüsseltresor oder ein Speicherkonto) im Abonnement gewährt werden. Die Verwendung einer verwalteten Identität in einem ausgeführten Container ist mit der Verwendung einer Identität in einer Azure-VM vergleichbar. Weitere Informationen finden Sie in der Anleitung für VMs zur Verwendung eines Tokens, von Azure PowerShell oder der Azure-Befehlszeilenschnittstelle oder Azure-SDKs.

Voraussetzungen

  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.

    • Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.

    • Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.

    • Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.

  • Für diesen Artikel ist mindestens Version 2.0.49 der Azure CLI erforderlich. Bei Verwendung von Azure Cloud Shell ist die aktuelle Version bereits installiert.

Erstellen einer Azure Key Vault-Instanz

In den Beispielen in diesem Artikel wird eine verwaltete Identität in Azure Container Instances verwendet, um auf ein Azure Key Vault-Geheimnis zuzugreifen.

Erstellen Sie zunächst mit dem folgenden Befehl az group create eine Ressourcengruppe namens myResourceGroup am Standort eastus:

az group create --name myResourceGroup --location eastus

Verwenden Sie den Befehl az keyvault create, um einen Schlüsseltresor zu erstellen. Geben Sie hierbei einen eindeutigen Namen für die Key Vault-Instanz an.

az keyvault create \
  --name mykeyvault \
  --resource-group myResourceGroup \
  --location eastus

Speichern Sie mithilfe des Befehls az keyvault secret set ein Beispielgeheimnis im Schlüsseltresor:

az keyvault secret set \
  --name SampleSecret \
  --value "Hello Container Instances" \
  --description ACIsecret --vault-name mykeyvault

Fahren Sie mit den folgenden Beispielen fort, um mit einer vom Benutzer oder vom System zugewiesenen verwalteten Identität in Azure Container Instances auf die Key Vault-Instanz zuzugreifen.

Beispiel 1: Verwenden einer vom Benutzer zugewiesenen Identität für den Zugriff auf Azure Key Vault

Erstellen einer Identität

Erstellen Sie zunächst mit dem Befehl az identity create eine Identität in Ihrem Abonnement. Sie können die gleiche Ressourcengruppe verwenden, die Sie zum Erstellen der Key Vault-Instanz verwendet haben, oder eine andere Ressourcengruppe auswählen.

az identity create \
  --resource-group myResourceGroup \
  --name myACIId

Um die Identität in den folgenden Schritten verwenden zu können, speichern Sie mit dem Befehl az identity show die Dienstprinzipal-ID der Identität und die Ressourcen-ID in Variablen.

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

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

Gewähren des Zugriffs auf die Key Vault-Instanz für die vom Benutzer zugewiesene Identität

Führen Sie den folgenden Befehl vom Typ az keyvault set-policy aus, um eine Zugriffsrichtlinie für den Schlüsseltresor festzulegen. Das folgende Beispiel ermöglicht der vom Benutzer zugewiesenen Identität das Abrufen von Geheimnissen aus dem Schlüsseltresor:

 az keyvault set-policy \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --object-id $SP_ID \
    --secret-permissions get

Aktivieren einer vom Benutzer zugewiesenen Identität in einer Containergruppe

Führen Sie den folgenden az container create-Befehl aus, um eine auf dem azure-cli-Image von Microsoft basierende Containerinstanz zu erstellen. In diesem Beispiel wird eine einzelne Containergruppe bereitgestellt, die Sie interaktiv verwenden können, um die Azure CLI auszuführen, um auf andere Azure-Dienste zuzugreifen. In diesem Abschnitt wird nur das Basisbetriebssystem verwendet. Ein Beispiel für die Verwendung der Azure-Befehlszeilenschnittstelle im Container finden Sie unter Aktivieren einer vom System zugewiesenen Identität in einer Containergruppe.

Der --assign-identity-Parameter übergibt Ihre vom Benutzer zugewiesene verwaltete Identität an die Gruppe. Der Befehl mit langer Laufzeit sorgt dafür, dass der Container weiterhin ausgeführt wird. In diesem Beispiel wird die Ressourcengruppe verwendet, die zum Erstellen der Key Vault-Instanz verwendet wurde, Sie können aber auch eine andere Ressourcengruppe angeben.

az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity $RESOURCE_ID \
  --command-line "tail -f /dev/null"

Sie sollten innerhalb weniger Sekunden eine Antwort von der Azure-Befehlszeilenschnittstelle (Command Line Interface, CLI) mit dem Hinweis erhalten, dass die Bereitstellung abgeschlossen wurde. Überprüfen Sie den Status mit dem Befehl az container show.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

Der Abschnitt identity in der Ausgabe sieht in etwa wie folgt aus und zeigt, dass die Identität in der Containergruppe festgelegt wurde. principalID unter userAssignedIdentities ist der Dienstprinzipal der Identität, die Sie in Microsoft Entra ID erstellt haben:

[...]
"identity": {
    "principalId": "null",
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
        "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
        "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
      }
    }
  },
[...]

Verwenden der vom Benutzer zugewiesenen Identität zum Abrufen von Geheimnissen aus der Key Vault-Instanz

Jetzt können Sie mithilfe der verwalteten Identität in der ausgeführten Containerinstanz auf den Schlüsseltresor zugreifen. Starten Sie zuerst eine Bash-Shell im Container:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

Führen Sie die folgenden Befehle in der Bash-Shell im Container aus. Rufen Sie mit dem folgenden Befehl ein Zugriffstoken ab, um Microsoft Entra ID für die Authentifizierung bei Key Vault zu verwenden:

client_id="00001111-aaaa-2222-bbbb-3333cccc4444"
curl "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net&client_id=$client_id" -H Metadata:true -s

Ausgabe:

{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}

Um das Zugriffstoken in einer Variablen zu speichern, die in nachfolgenden Befehlen zur Authentifizierung verwendet werden kann, führen Sie den folgenden Befehl aus:

TOKEN=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')

Nun verwenden Sie das Zugriffstoken zum Durchführen der Authentifizierung bei Key Vault und Lesen eines Geheimnisses. Denken Sie daran, den Namen Ihres Schlüsseltresors in der URL zu ersetzen (https://mykeyvault.vault.azure.net/...):

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=7.4 -H "Authorization: Bearer $TOKEN"

Die Antwort sieht in etwa wie folgt aus und enthält das Geheimnis. In Ihrem Code würden Sie diese Ausgabe analysieren, um das Geheimnis abzurufen. Verwenden Sie das Geheimnis anschließend in einem nachfolgenden Vorgang, um auf eine andere Azure-Ressource zuzugreifen.

{"value":"Hello Container Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxxxxxxxxxxxx","attributes":{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-encoding":"utf-8"}}

Beispiel 2: Verwenden einer vom System zugewiesenen Identität für den Zugriff auf Azure Key Vault

Aktivieren einer vom System zugewiesenen Identität in einer Containergruppe

Führen Sie den folgenden az container create-Befehl aus, um eine auf dem azure-cli-Image von Microsoft basierende Containerinstanz zu erstellen. In diesem Beispiel wird eine einzelne Containergruppe bereitgestellt, die Sie interaktiv verwenden können, um die Azure CLI auszuführen, um auf andere Azure-Dienste zuzugreifen.

Der --assign-identity-Parameter ohne zusätzlichen Wert aktiviert eine vom System zugewiesene verwaltete Identität in der Gruppe. Die Gültigkeit der Identität ist auf die Ressourcengruppe der Containergruppe beschränkt. Der Befehl mit langer Laufzeit sorgt dafür, dass der Container weiterhin ausgeführt wird. In diesem Beispiel wird dieselbe Ressourcengruppe verwendet, die zum Erstellen des Schlüsseltresors im Gültigkeitsbereich der Identität verwendet wurde.

# Get the resource ID of the resource group
RG_ID=$(az group show --name myResourceGroup --query id --output tsv)

# Create container group with system-managed identity
az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity --scope $RG_ID \
  --command-line "tail -f /dev/null"

Sie sollten innerhalb weniger Sekunden eine Antwort von der Azure-Befehlszeilenschnittstelle (Command Line Interface, CLI) mit dem Hinweis erhalten, dass die Bereitstellung abgeschlossen wurde. Überprüfen Sie den Status mit dem Befehl az container show.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

Der Abschnitt identity in der Ausgabe sieht in etwa wie folgt aus und zeigt, dass eine systemseitig zugewiesene Identität in Microsoft Entra ID erstellt wurde:

[...]
"identity": {
    "principalId": "bbbbbbbb-cccc-dddd-2222-333333333333",
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
},
[...]

Legen Sie eine Variable auf den Wert von principalId (Dienstprinzipal-ID) der Identität fest, um sie in späteren Schritten zu verwenden.

SP_ID=$(az container show \
  --resource-group myResourceGroup \
  --name mycontainer \
  --query identity.principalId --out tsv)

Gewähren des Zugriffs auf die Key Vault-Instanz für die Containergruppe

Führen Sie den folgenden Befehl vom Typ az keyvault set-policy aus, um eine Zugriffsrichtlinie für den Schlüsseltresor festzulegen. Das folgende Beispiel ermöglicht der vom System verwalteten Identität das Abrufen von Geheimnissen aus der Key Vault-Instanz:

 az keyvault set-policy \
   --name mykeyvault \
   --resource-group myResourceGroup \
   --object-id $SP_ID \
   --secret-permissions get

Verwenden der Identität der Containergruppe zum Abrufen von Geheimnissen aus der Key Vault-Instanz

Jetzt können Sie mithilfe der verwalteten Identität in der ausgeführten Containerinstanz auf die Key Vault-Instanz zugreifen. Starten Sie zuerst eine Bash-Shell im Container:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

Führen Sie die folgenden Befehle in der Bash-Shell im Container aus. Melden Sie sich zuerst mit der verwalteten Identität bei der Azure CLI an:

az login --identity

Rufen Sie aus dem ausgeführten Container heraus das Geheimnis aus dem Schlüsseltresor ab:

az keyvault secret show \
  --name SampleSecret \
  --vault-name mykeyvault --query value

Der Wert des Geheimnisses wird abgerufen:

"Hello Container Instances"

Aktivieren der verwalteten Identität mithilfe einer Resource Manager-Vorlage

Um eine verwaltete Identität in einer Containergruppe mithilfe einer Resource Manager-Vorlage zu aktivieren, legen Sie die identity-Eigenschaft des Microsoft.ContainerInstance/containerGroups-Objekts mit einem ContainerGroupIdentity-Objekt fest. Die folgenden Codeausschnitte zeigen die für verschiedene Szenarien konfigurierte identity-Eigenschaft. Weitere Informationen finden Sie unter Resource Manager template reference (Referenz zur Resource Manager-Vorlage). Geben Sie mindestens eine apiVersion von 2018-10-01 an.

Vom Benutzer zugewiesene Identität

Eine vom Benutzer zugewiesene Identität ist eine Ressourcen-ID im folgenden Format:

"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"

Sie können eine oder mehrere vom Benutzer zugewiesene Identitäten aktivieren.

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }

Vom System zugewiesene Identität

"identity": {
    "type": "SystemAssigned"
    }

Vom System und vom Benutzer zugewiesene Identitäten

Sie können in einer Containergruppe sowohl eine vom System zugewiesene Identität als auch eine oder mehrere vom Benutzer zugewiesene Identitäten aktivieren.

"identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }
...

Aktivieren der verwalteten Identität mithilfe einer YAML-Datei

Um eine verwaltete Identität in einer mithilfe einer YAML-Datei bereitgestellten Containergruppe zu aktivieren, fügen Sie den folgenden YAML-Code hinzu. Geben Sie mindestens eine apiVersion von 2018-10-01 an.

Vom Benutzer zugewiesene Identität

Eine vom Benutzer zugewiesene Identität ist eine Ressourcen-ID im folgenden Format.

'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'

Sie können eine oder mehrere vom Benutzer zugewiesene Identitäten aktivieren.

identity:
  type: UserAssigned
  userAssignedIdentities:
    {'myResourceID1':{}}

Vom System zugewiesene Identität

identity:
  type: SystemAssigned

Vom System und vom Benutzer zugewiesene Identitäten

Sie können in einer Containergruppe sowohl eine vom System zugewiesene Identität als auch eine oder mehrere vom Benutzer zugewiesene Identitäten aktivieren.

identity:
  type: SystemAssigned, UserAssigned
  userAssignedIdentities:
   {'myResourceID1':{}}

Verwaltete Identität in Windows-Containern

Eine verwaltete Identität funktioniert in Windows-Containergruppen anders als in Linux-Containergruppen. Für Windows-Container ist der Metadatenserver (169.254.169.254) nicht verfügbar, um das Microsoft Entra ID-Token abzurufen. Kunden können ein anderes Muster anwenden, um das Zugriffstoken in Windows-Containern abzurufen. Das Muster umfasst das Senden einer Tokenanforderung an den IDENTITY_ENDPOINT sowie zusätzlicher Informationen wie Prinzipal-ID und Geheimnis, wie unten dargestellt. IDENTITY_ENDPOINT und IDENTITY_HEADER werden als Umgebungsvariablen in Ihren Container eingefügt.

curl -G -v %IDENTITY_ENDPOINT% --data-urlencode resource=https://vault.azure.net --data-urlencode principalId=<principal id> -H secret:%IDENTITY_HEADER%

Ein PowerShell-Beispielskript

identityEndpoint = $env:IDENTITY_ENDPOINT
$identityHeader = $env:IDENTITY_HEADER
$resource = "https://vault.azure.net"
$principalId = "b2ee9347-623c-4794-85af-2d5261356f67"
 
Invoke-RestMethod -Uri "$identityEndpoint" `
    -Method Get `
    -Headers @{secret = $identityHeader} `
    -Body @{resource = $resource; principalId = $principalId} `
    -ContentType "application/x-www-form-urlencoded"

Das Az Login-Modul und andere Clientbibliotheken, die vom Metadatenserver (169.254.169.254) abhängen, funktionieren in einem Windows-Container nicht. Darüber hinaus können Windows-Container in einem VNet keine Verbindung mit dem Endpunkt herstellen. Daher kann ein verwaltetes Identitätstoken nicht in einem Windows-Container in einem virtuellen Netzwerk generiert werden.

Nächste Schritte

In diesem Artikel haben Sie mehr über verwaltete Identitäten in Azure Container Instances erfahren und Folgendes gelernt:

  • Aktivieren einer vom Benutzer oder vom System zugewiesenen Identität in einer Containergruppe
  • Gewähren des Zugriffs auf eine Azure Key Vault-Instanz für die Identität
  • Verwenden der verwalteten Identität zum Zugreifen auf eine Key Vault-Instanz über einen ausgeführten Container