Share via


Tutorial: Verwenden einer Workloadidentität mit einer Anwendung in Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) ist ein verwalteter Kubernetes-Dienst, mit dem Sie schnell Kubernetes-Cluster bereitstellen und verwalten können. In diesem Tutorial:

  • Stellen Sie einen AKS-Cluster über die Azure CLI mit OpenID Connect-(OIDC-)Aussteller und verwalteter Identität bereit.
  • Erstellen einer Azure Key Vault-Instanz und eines Geheimnisses
  • Erstellen Sie eine Microsoft Entra-Workload-ID und ein Kubernetes-Dienstkonto.
  • Konfigurieren der verwalteten Identität für den Tokenverbund
  • Bereitstellen der Workload und Überprüfen der Authentifizierung mit der Workloadidentität

Voraussetzungen

Voraussetzungen

  • Sollten Sie über kein Azure-Abonnement verfügen, können Sie zunächst ein kostenloses Azure-Konto erstellen.
  • Für diesen Artikel ist mindestens Version 2.47.0 der Azure CLI erforderlich. Bei Verwendung von Azure Cloud Shell ist die aktuelle Version bereits installiert.
  • Die Identität, die Sie zum Erstellen Ihres Clusters verwenden, muss über die erforderlichen Mindestberechtigungen verfügen. Weitere Informationen zu Zugriff und Identität für AKS finden Sie unter Zugriffs- und Identitätsoptionen für Azure Kubernetes Service (AKS).
  • Wenn Sie über mehrere Azure-Abonnements verfügen, wählen Sie mithilfe des Befehls az account set die ID des Abonnements aus, in dem die Ressourcen fakturiert werden sollen.

Erstellen einer Ressourcengruppe

Eine Azure-Ressourcengruppe ist eine logische Gruppe, in der Azure-Ressourcen bereitgestellt und verwaltet werden. Wenn Sie eine Ressourcengruppe erstellen, werden Sie zur Angabe eines Speicherorts aufgefordert. An diesem Speicherort werden die Metadaten Ihrer Ressourcengruppe gespeichert. Darüber hinaus werden dort die Ressourcen in Azure ausgeführt, wenn Sie während der Ressourcenerstellung keine andere Region angeben.

Das folgende Beispiel erstellt eine Ressourcengruppe mit dem Namen myResourceGroup am Standort eastus.

  • Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe.

    az group create --name myResourceGroup --location eastus
    

    Das folgende Ausgabebeispiel ähnelt der erfolgreichen Erstellung der Ressourcengruppe:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    

Exportieren von Umgebungsvariablen

Um die Schritte zum Konfigurieren der erforderlichen Identitäten zu vereinfachen, werden in den folgenden Schritten Umgebungsvariablen zum Verweisen auf den Cluster definiert.

  • Führen Sie die folgenden Befehle aus, um diese Variablen zu erstellen. Ersetzen Sie die Standardwerte für RESOURCE_GROUP, LOCATION, SERVICE_ACCOUNT_NAME, SUBSCRIPTION, USER_ASSIGNED_IDENTITY_NAME und FEDERATED_IDENTITY_CREDENTIAL_NAME.

    export RESOURCE_GROUP="myResourceGroup"
    export LOCATION="westcentralus"
    export SERVICE_ACCOUNT_NAMESPACE="default"
    export SERVICE_ACCOUNT_NAME="workload-identity-sa"
    export SUBSCRIPTION="$(az account show --query id --output tsv)"
    export USER_ASSIGNED_IDENTITY_NAME="myIdentity"
    export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity"
    export KEYVAULT_NAME="azwi-kv-tutorial"
    export KEYVAULT_SECRET_NAME="my-secret"
    

Erstellen eines AKS-Clusters

  1. Erstellen Sie einen AKS-Cluster über den Befehl az aks create mit dem Parameter --enable-oidc-issuer, um den OIDC-Aussteller zu verwenden.

    az aks create --resource-group "${RESOURCE_GROUP}" --name myAKSCluster --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
    

    Nach wenigen Minuten ist die Ausführung des Befehls abgeschlossen, und es werden Informationen zum Cluster im JSON-Format zurückgegeben.

  2. Rufen Sie die URL des OIDC-Ausstellers ab und speichern Sie sie mithilfe des folgenden Befehls in einer Umgebungsvariablen ab. Ersetzen Sie den Standardwert für das Argument -n (Name des Clusters).

    export AKS_OIDC_ISSUER="$(az aks show --name myAKSCluster --resource-group "${RESOURCE_GROUP}" --query "oidcIssuerProfile.issuerUrl" -o tsv)"
    

    Die Variable sollte die URL des Ausstellers enthalten, ähnlich wie im folgenden Beispiel:

    https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/
    

    Standardmäßig ist der Aussteller so eingestellt, dass er die Basis-URL https://{region}.oic.prod-aks.azure.com verwendet, wobei der Wert für {region} dem Speicherort entspricht, an dem der AKS-Cluster eingesetzt wird.

Erstellen einer Azure Key Vault-Instanz und eines Geheimnisses

  1. Erstellen Sie mithilfe des Befehls az keyvault create eine Azure Key Vault-Instanz in der Ressourcengruppe, die Sie in diesem Tutorial erstellt haben.

    az keyvault create --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --name "${KEYVAULT_NAME}" --enable-rbac-authorization false
    

    In der Ausgabe dieses Befehls werden die Eigenschaften des neu erstellten Schlüsseltresors angezeigt. Beachten Sie die beiden folgenden Eigenschaften:

    • Name: Der Tresorname, den Sie als Parameter --name angegeben haben.
    • vaultUri: In dem Beispiel ist dies https://<your-unique-keyvault-name>.vault.azure.net/. Anwendungen, die Ihren Tresor über die zugehörige REST-API nutzen, müssen diesen URI verwenden.

    An diesem Punkt ist nur Ihr Azure-Konto zum Ausführen von Vorgängen für den neuen Tresor autorisiert.

  2. Fügen Sie dem Tresor mit dem Befehl az keyvault secret set ein Geheimnis hinzu. Das Kennwort ist der Wert, den Sie für die Umgebungsvariable KEYVAULT_SECRET_NAME angegeben haben. Darin ist der Wert Hello! gespeichert.

    az keyvault secret set --vault-name "${KEYVAULT_NAME}" --name "${KEYVAULT_SECRET_NAME}" --value 'Hello!'
    
  3. Fügen Sie der Umgebungsvariablen KEYVAULT_URL mithilfe des Befehls az keyvault show die Key Vault-URL hinzu.

    export KEYVAULT_URL="$(az keyvault show --resource-group "${RESOURCE_GROUP}" --name ${KEYVAULT_NAME} --query properties.vaultUri -o tsv)"
    

Erstellen einer verwalteten Identität und Erteilen von Berechtigungen zum Zugriff auf das Geheimnis

  1. Legen Sie mit dem Befehl az account set ein bestimmtes Abonnement als aktuelles aktives Abonnement fest.

    az account set --subscription "${SUBSCRIPTION}"
    
  2. Erstellen Sie eine verwaltete Identität mit dem Befehl az identity create.

    az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
    
  3. Legen Sie eine Zugriffsrichtlinie für die verwaltete Identität fest, um auf das Key Vault-Geheimnis zuzugreifen. Führen Sie dazu die folgenden Befehle aus.

    export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -otsv)"
    
    az keyvault set-policy --name "${KEYVAULT_NAME}" --secret-permissions get --spn "${USER_ASSIGNED_CLIENT_ID}"
    

Erstellen eines Kubernetes-Dienstkontos

  1. Erstellen Sie mithilfe des Befehls az aks get-credentials ein Kubernetes-Dienstkonto und kommentieren Sie es mit der Client-ID der verwalteten Identität, die Sie im vorherigen Schritt erstellt haben. Ersetzen Sie den Standardwert für den Clusternamen und den Ressourcengruppennamen.

    az aks get-credentials --name myAKSCluster --resource-group "${RESOURCE_GROUP}"
    
  2. Kopieren Sie die folgende mehrzeilige Eingabe in Ihr Terminal, und führen Sie den Befehl zum Erstellen des Dienstkontos aus.

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        azure.workload.identity/client-id: ${USER_ASSIGNED_CLIENT_ID}
      name: ${SERVICE_ACCOUNT_NAME}
      namespace: ${SERVICE_ACCOUNT_NAMESPACE}
    EOF
    

    Die folgende Ausgabe ähnelt der erfolgreichen Erstellung der Identität:

    Serviceaccount/workload-identity-sa created
    

Einrichten von Anmeldeinformationen für eine Verbundidentität

  • Erstellen Sie mit dem Befehl az identity federated-credential create die Verbundidentitätsberechtigung zwischen der verwalteten Identität, dem Aussteller des Servicekontos und dem Antragsteller.

    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name ${USER_ASSIGNED_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --issuer ${AKS_OIDC_ISSUER} --subject system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}
    

    Hinweis

    Es dauert einige Sekunden, bis die Verbundidentitäts-Anmeldeinformationen nach dem erstmaligen Hinzufügen weitergegeben werden. Wenn eine Tokenanforderung unmittelbar nach dem Hinzufügen der Verbundidentitäts-Anmeldeinformationen zur Verfügung steht, kann dies einige Minuten lang zu Fehlern führen, da der Cache im Verzeichnis noch mit alten Daten befüllt ist. Um dieses Problem zu vermeiden, können Sie eine kleine Verzögerung nach dem Hinzufügen der Verbundidentitäts-Anmeldeinformationen hinzufügen.

Bereitstellen der Workload

  1. Stellen Sie mithilfe des folgende Befehls einen Pod bereit, der auf das im vorherigen Schritt erstellte Dienstkonto verweist.

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: quick-start
      namespace: ${SERVICE_ACCOUNT_NAMESPACE}
      labels:
        azure.workload.identity/use: "true"
    spec:
      serviceAccountName: ${SERVICE_ACCOUNT_NAME}
      containers:
        - image: ghcr.io/azure/azure-workload-identity/msal-go
          name: oidc
          env:
          - name: KEYVAULT_URL
            value: ${KEYVAULT_URL}
          - name: SECRET_NAME
            value: ${KEYVAULT_SECRET_NAME}
      nodeSelector:
        kubernetes.io/os: linux
    EOF
    

    Die folgende Ausgabe zeigt eine erfolgreiche Erstellung des Pods:

    pod/quick-start created
    
  2. Überprüfen Sie mit dem Befehl kubectl describe, ob mit dem Webhook alle Eigenschaften ordnungsgemäß eingefügt werden.

    kubectl describe pod quick-start
    
  3. Vergewissern Sie sich, dass der Pod mithilfe des Befehls kubectl logs ein Token abrufen und über die Key Vault auf das Geheimnis zugreifen kann.

    kubectl logs quick-start
    

    Die folgende Ausgabe zeigt einen erfolgreichen Zugriff des Tokens:

    I1013 22:49:29.872708       1 main.go:30] "successfully got secret" secret="Hello!"
    

Bereinigen von Ressourcen

Möglicherweise möchten Sie diese Ressourcen beibehalten. Wenn Sie diese Ressourcen nicht mehr benötigen, verwenden Sie die folgenden Befehle, um sie zu löschen.

  1. Löschen Sie den Pod mit dem Befehl kubectl delete pod.

    kubectl delete pod quick-start
    
  2. Löschen Sie das Dienstkonto mit dem Befehl kubectl delete sa.

    kubectl delete sa "${SERVICE_ACCOUNT_NAME}" --namespace "${SERVICE_ACCOUNT_NAMESPACE}"
    
  3. Löschen Sie die Azure-Ressourcengruppe und alle zugehörigen Ressourcen mithilfe des Befehls az group delete.

    az group delete --name "${RESOURCE_GROUP}"
    

Nächste Schritte

In diesem Tutorial haben Sie einen Kubernetes-Cluster und dann eine einfache Containeranwendung bereitgestellt, um die Arbeit mit einer Microsoft Entra-Workload ID zu testen.

Dieses Tutorial dient nur zur Einführung. Anleitungen zum Erstellen vollständiger Lösungen mit AKS für die Produktion finden Sie unter AKS-Lösungsleitfaden.