Freigeben über


Verwenden einer verwalteten Identität in Azure Kubernetes Service (AKS)

Dieser Artikel enthält schrittweise Anleitungen zum Aktivieren und Verwenden einer vom System zugewiesenen, vom Benutzer zugewiesenen oder vorab erstellten verwalteten Kubelet-Identität in Azure Kubernetes Service (AKS).

Voraussetzungen für verwaltete AKS-Identitäten

  • Lesen Sie die Übersicht über verwaltete Identitäten in Azure Kubernetes Service (AKS), um die verschiedenen Typen von verwalteten Identitäten zu verstehen, die in AKS verfügbar sind und wie Sie diese verwenden können, um sicher auf Azure-Ressourcen zuzugreifen.

  • Bevor Sie die Beispiele in diesem Artikel ausführen, legen Sie Ihr Abonnement mithilfe des az account set Befehls als aktuelles aktives Abonnement fest.

    az account set --subscription <subscription-id>
    
  • Erstellen Sie eine Azure-Ressourcengruppe, wenn Sie noch keines haben, indem Sie den az group create Befehl aufrufen.

    az group create \
        --name <resource-group-name> \
        --location <location>
    

Mindestanforderungen für die Azure CLI-Version

Einschränkungen

  • Das Verschieben oder Migrieren von Clustern mit aktivierter verwalteter Identität zu einem anderen Mandanten wird nicht unterstützt.

  • Wenn für den Cluster die verwaltete Microsoft Entra-Podidentität (aad-pod-identity) aktiviert wurde, werden die iptables der Knoten von NMI-Pods (Node Managed Identity) so geändert, dass Aufrufe des Azure Instance Metadata-Endpunkts (IMDS) abgefangen werden. Diese Konfiguration bedeutet, dass jede Anforderung, die an den IMDS-Endpunkt gerichtet ist, von NMI abgefangen wird, auch wenn ein bestimmter Pod aad-pod-identity nicht verwendet.

    Die benutzerdefinierte AzurePodIdentityException-Ressourcendefinition (CRD) kann so konfiguriert werden, das sie angibt, dass an den IMDS-Endpunkt gerichtete Anforderungen, die von einem Pod stammen, der in der CRD definierte Bezeichnungen abgleicht, ohne Verarbeitung in NMI über einen Proxy zu senden sind. Schließen Sie die Systempods mit der Bezeichnung kubernetes.azure.com/managedby: aks im Namespace kube-system in aad-pod-identity durch Konfigurieren der AzurePodIdentityException-CRD aus. Weitere Informationen finden Sie unter Verwenden von podseitig verwalteten Microsoft Entra-Identitäten in Azure Kubernetes Service.

    Installieren zur Konfiguration einer Ausnahme die YAML-Datei „mic-exception“.

  • AKS unterstützt die Verwendung einer systemseitig zugewiesenen verwalteten Identität bei Verwendung einer benutzerdefinierten privaten DNS-Zone nicht.

  • Die Regionen „USDOD, Mitte“, „USDOD, Osten“ und „USGov, Iowa“ in der Azure US Government-Cloud unterstützen das Erstellen eines Clusters mit einer benutzerseitig zugewiesenen verwalteten Identität nicht.

  • Eine zuvor erstellte verwaltete Kubelet-Identität muss eine vom Benutzer zugewiesene verwaltete Identität sein.
  • Die Regionen „China, Osten“ und „China, Norden“ werden in Microsoft Azure operated by 21Vianet nicht unterstützt.

Hinweis

Beachten Sie beim Aktualisieren Ihres Clusters die folgenden Informationen:

  • Eine Aktualisierung funktioniert nur, wenn ein VHD-Update verwendet werden kann. Wenn Sie die neueste VHD ausführen, müssen Sie warten, bis die nächste VHD verfügbar wird, um die Aktualisierung vorzunehmen.

  • Die Azure CLI stellt sicher, dass die Berechtigung Ihres Add-Ons nach der Migration richtig festgelegt ist. Wenn Sie nicht die Azure CLI zum Durchführen des Migrationsvorgangs verwenden, müssen Sie die Berechtigung der Add-On-Identität selbst festlegen. Ein Beispiel für die Verwendung einer ARM-Vorlage (Azure Resource Manager) finden Sie unter Zuweisen von Azure-Rollen mithilfe von ARM-Vorlagen.

  • Wenn Ihr Cluster --attach-acr verwendete, um Images aus der Azure Container Registry (ACR) abzurufen, müssen Sie nach dem Aktualisieren Ihres Clusters den az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id> Befehl ausführen, damit das neu erstellte Kubelet, das für die verwaltete Identität verwendet wird, die Berechtigung erhält, Images aus der ACR abzurufen. Andernfalls können Sie nach der Aktualisierung keinen Pull aus ACR ausführen.

Aktivieren einer vom System zugewiesenen verwalteten Identität auf einem AKS-Cluster

Aktivieren einer systemseitig zugewiesenen verwalteten Identität in einem neuen AKS-Cluster

Eine vom System zugewiesene verwaltete Identität ist standardmäßig aktiviert, wenn Sie einen neuen AKS-Cluster erstellen.

  • Erstellen Sie mit dem Befehl az aks create einen AKS-Cluster.

    az aks create \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --generate-ssh-keys
    

Aktualisieren eines vorhandenen AKS-Clusters zur Verwendung einer systemseitig zugewiesenen verwalteten Identität

  • Aktualisieren Sie einen vorhandenen AKS-Cluster von einem Dienstprinzipal auf eine vom System zugewiesene verwaltete Identität mithilfe des az aks update Befehls mit dem --enable-managed-identity Parameter.

    az aks update \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --enable-managed-identity
    

    Nachdem Sie den Cluster so aktualisiert haben, dass anstelle eines Dienstprinzipals eine systemseitig zugewiesene verwaltete Identität verwendet wird, verwenden die Steuerungsebene und Pods die systemseitig zugewiesene verwaltete Identität für die Autorisierung beim Zugriff auf andere Dienste in Azure. Kubelet verwendet weiterhin einen Dienstprinzipal, bis Sie für Ihren Agentpool auch ein Upgrade durchführen. Sie können den Befehl az aks nodepool upgrade --resource-group <resource-group-name> --cluster-name <aks-cluster-name> --name <node-pool-name> --node-image-only auf Ihren Knoten verwenden, um auf eine verwaltete Identität zu aktualisieren. Ein Upgrade des Knotenpools verursacht Ausfallzeiten für Ihren AKS-Cluster, da die Knoten in den Knotenpools abgeriegelt, entleert und neu abgebildet werden.

Abrufen der Hauptkennung einer vom System zugewiesenen verwalteten Identität

  • Rufen Sie die Prinzipal-ID für die systemseitig zugewiesene verwaltete Identität des Clusters ab, indem Sie den Befehl az aks show verwenden.

    CLIENT_ID=$(az aks show \
        --name <aks-cluster-name> \
        --resource-group <resource-group-name> \
        --query identity.principalId \
        --output tsv)
    

Hinzufügen einer Rollenzuweisung für eine systemseitig zugewiesene verwaltete Identität

  • Weisen Sie der vom System zugewiesenen verwalteten Identität mithilfe des az role assignment create Befehls eine Azure RBAC-Rolle zu.

    Für ein VNet, einen angefügten Azure-Datenträger, eine statische IP-Adresse oder eine Routingtabelle, die sich außerhalb der standardmäßigen Workerknoten-Ressourcengruppe befinden, müssen Sie die Network Contributor-Rolle für die benutzerdefinierte Ressourcengruppe zuweisen.

    Im folgenden Beispiel wird die Rolle "Netzwerkmitwirkender" der vom System zugewiesenen verwalteten Identität zugewiesen. Die Rollenzuweisung gilt für die Ressourcengruppe, die das VNet enthält.

    az role assignment create \
        --assignee <client-id> \
        --role "Network Contributor" \
        --scope <custom-resource-group-id>
    

    Hinweis

    Es kann bis zu 60 Minuten dauern, bis die Berechtigungen, die der verwalteten Identität Ihres Clusters gewährt wurden, verteilt sind.

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität

  • Wenn Sie noch nicht über eine Ressource der benutzerseitig zugewiesenen verwalteten Identität verfügen, erstellen Sie eine mithilfe des Befehls az identity create.

    az identity create \
        --name <identity-name> \
        --resource-group <resource-group-name>
    

    Ihre Ausgabe sollte in etwa wie die folgende Beispielausgabe aussehen:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>",
      "location": "<location>",
      "name": "<identity-name>",
      "principalId": "<principal-id>",
      "resourceGroup": "<resource-group-name>",
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Abrufen der Prinzipal-ID der benutzerseitig zugewiesenen verwalteten Identität

  • Rufen Sie die Principal-ID der vom Benutzer zugewiesenen verwalteten Identität mithilfe des az identity show Befehls ab.

    CLIENT_ID=$(az identity show \
        --name <identity-name> \
        --resource-group <resource-group-name> \
        --query principalId \
        --output tsv)
    

Abrufen der Ressourcen-ID der benutzerseitig zugewiesenen verwalteten Identität

  • Rufen Sie die Ressourcen-ID der vom Benutzer zugewiesenen verwalteten Identität mithilfe des az identity show Befehls ab.

    RESOURCE_ID=$(az identity show \
        --name <identity-name> \
        --resource-group <resource-group-name> \
        --query id \
        --output tsv)
    

Zuweisen einer Azure RBAC-Rolle zur benutzerseitig zugewiesenen verwalteten Identität

  • Fügen Sie mithilfe des az role assignment create Befehls eine Rollenzuweisung für die vom Benutzer zugewiesene verwaltete Identität hinzu.

    Im folgenden Beispiel wird der benutzerseitig zugewiesenen verwalteten Identität die Rolle Key Vault-Geheimnisbenutzer zugewiesen, um ihr Berechtigungen für den Zugriff auf Geheimnisse in einem Schlüsseltresor zu gewähren. Die Rollenzuweisung ist auf die Schlüsseltresorressource festgelegt:

    az role assignment create \
        --assignee <client-id> \
        --role "Key Vault Secrets User" \
        --scope "<keyvault-resource-id>"
    

    Hinweis

    Es kann bis zu 60 Minuten dauern, bis die Berechtigungen, die der verwalteten Identität Ihres Clusters gewährt wurden, verteilt sind.

Aktivieren einer vom Benutzer zugewiesenen verwalteten Identität auf einem AKS-Cluster

Aktivieren einer vom Benutzer zugewiesenen verwalteten Identität in einem neuen AKS-Cluster

  • Erstellen Sie einen AKS-Cluster mit der vom Benutzer zugewiesenen verwalteten Identität mithilfe des az aks create Befehls. Fügen Sie den Parameter --assign-identity hinzu, und übergeben Sie die Ressourcen-ID für die benutzerseitig zugewiesene verwaltete Identität:

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --network-plugin azure \
        --vnet-subnet-id <vnet-subnet-id> \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24 \
        --assign-identity $RESOURCE_ID \
        --generate-ssh-keys
    

Aktualisieren eines vorhandenen Clusters zur Verwendung einer benutzerseitig zugewiesenen verwalteten Identität

  • Aktualisieren Sie einen vorhandenen Cluster, um mithilfe des az aks update Befehls eine vom Benutzer zugewiesene verwaltete Identität zu verwenden. Fügen Sie den Parameter --assign-identity hinzu, und übergeben Sie die Ressourcen-ID für die benutzerseitig zugewiesene verwaltete Identität:

    az aks update \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --enable-managed-identity \
        --assign-identity $RESOURCE_ID
    

    Die Ausgabe bei einer erfolgreichen Clusteraktualisierung zur Verwendung einer benutzerseitig zugewiesenen verwalteten Identität sollte der folgenden Beispielausgabe ähneln:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
    

    Hinweis

    Die Migration einer verwalteten Identität für die Steuerungsebene von systemseitig zu benutzerseitig zugewiesen führt nicht zu Ausfallzeiten für Steuerungsebene und Agentpools. Die Komponenten der Steuerungsebene verwenden weiterhin die alte systemseitig zugewiesene Identität bis zu mehreren Stunden bis zur nächsten Tokenaktualisierung.

Ermitteln, welchen Typ von verwalteter Identität ein Cluster verwendet

  • Überprüfen Sie, welche Art von verwalteter Identität Ihr Cluster mit dem az aks show Befehl verwendet.

    az aks show \
        --name <aks-cluster-name> \
        --resource-group <resource-group-name> \
        --query identity.type \
        --output tsv       
    

    Wenn der Cluster eine verwaltete Identität verwendet, ist der Wert der type-Eigenschaft entweder SystemAssigned oder UserAssigned.

    Wenn der Cluster einen Dienstprinzipal verwendet, ist der Wert der type-Eigenschaft NULL. Führen Sie gegebenenfalls ein Upgrade Ihres Clusters durch, um eine verwaltete Identität zu verwenden.

Erstellen einer verwalteten Kubelet-Identität

  • Sollten Sie über keine verwaltete Kubelet-Identität verfügen, erstellen Sie eine mit dem Befehl az identity create.

    az identity create \
        --name <kubelet-identity-name> \
        --resource-group <resource-group-name>
    

    Ihre Ausgabe sollte in etwa wie die folgende Beispielausgabe aussehen:

    {
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>",
      "location": "<location>",
      "name": "<kubelet-identity-name>",
      "principalId": "<principal-id>",
      "resourceGroup": "<resource-group-name>",
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Zuweisen einer RBAC-Rolle zu der verwalteten Kubelet-Identität

  • Weisen Sie der verwalteten Kubelet-Identität die acrpull Rolle mithilfe des az role assignment create Befehls zu.

    az role assignment create \
        --assignee <kubelet-client-id> \
        --role "acrpull" \
        --scope "<acr-registry-id>"
    

Aktivieren einer verwalteten Kubelet-Identität in einem AKS-Cluster

Aktivieren einer verwalteten Kubelet-Identität in einem neuen AKS-Cluster

  • Erstellen Sie mithilfe des Befehls az aks create einen AKS-Cluster mit den vorhandenen Identitäten.

    az aks create \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --network-plugin azure \
        --vnet-subnet-id <vnet-subnet-id> \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24 \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id> \
        --generate-ssh-keys
    

    Eine erfolgreiche AKS-Clustererstellung unter Verwendung einer verwalteten Kubelet-Identität sollte zu einer ähnlichen Ausgabe wie der folgenden führen:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>"
        }
      },
    

Aktualisieren eines vorhandenen Clusters zur Verwendung einer verwalteten Kubelet-Identität

Um einen vorhandenen Cluster für die Verwendung der verwalteten Kubelet-Identität zu aktualisieren, rufen Sie zunächst die aktuelle verwaltete Identität der Steuerungsebene für Ihren AKS-Cluster ab.

Warnung

Durch die Aktualisierung der vom Kubelet verwalteten Identität werden die Knotenpools Ihres AKS-Clusters aktualisiert. Stellen Sie sicher, dass Sie die richtigen Verfügbarkeitskonfigurationen, wie z. B. Pod Disruption Budgets, konfiguriert haben, bevor Sie diesen Vorgang ausführen, um Unterbrechungen der Workload zu vermeiden, oder führen Sie diesen Vorgang während eines Wartungsfensters aus.

  1. Bestätigen Sie mit dem Befehl az aks show, dass Ihr AKS-Cluster die benutzerseitig zugewiesene verwaltete Identität verwendet.

    az aks show \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --query "servicePrincipalProfile"
    

    Wenn Ihr Cluster eine verwaltete Identität verwendet, zeigt die Ausgabe clientId mit dem Wert msi an. Ein Cluster mit einem Dienstprinzipal zeigt eine Objekt-ID an. Beispiel:

    # The cluster is using a managed identity.
    {
      "clientId": "msi"
    }
    
  2. Nachdem Sie sich vergewissert haben, dass Ihr Cluster eine verwaltete Identität verwendet, suchen Sie die Ressourcen-ID der verwalteten Identität mit dem Befehl az aks show.

    az aks show --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --query "identity"
    

    Für eine benutzerseitig zugewiesene verwaltete Identität sollte Ihre Ausgabe ungefähr so aussehen wie die folgende Beispielausgabe:

    {
      "principalId": null,
      "tenantId": null,
      "type": "UserAssigned",
      "userAssignedIdentities": <identity-resource-id>
          "clientId": "<client-id>",
          "principalId": "<principal-id>"
    },
    
  3. Aktualisieren Sie mithilfe des Befehls az aks update Ihren Cluster mit den vorhandenen Identitäten. Stellen Sie die Ressourcen-ID der benutzerseitig zugewiesenen verwalteten Identität für die Steuerebene für das Argument assign-identity bereit. Stellen Sie die Ressourcen-ID der verwalteten Kubelet-Identität für das Argument assign-kubelet-identity bereit.

    az aks update \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id>
    

    Die Ausgabe bei einer erfolgreichen Clusteraktualisierung unter Verwendung Ihrer eigenen verwalteten Kubelet-Identität sollte der folgenden Beispielausgabe ähneln:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>"
        }
      },
    

Abrufen der Eigenschaften der verwalteten Kubelet-Identität

  • Rufen Sie die Eigenschaften der verwalteten Kubelet-Identität mithilfe des Befehls az aks show und Abfragen über die Eigenschaft identityProfile.kubeletidentity ab.

    az aks show \
        --name <aks-cluster-name> \
        --resource-group <resource-group-name> \
        --query "identityProfile.kubeletidentity"
    

Nächste Schritte

  • Verwenden Sie Azure Resource Manager-Vorlagen zum Erstellen eines Clusters mit aktivierter verwalteter Identität.
  • Erfahren Sie, wie Sie kubelogin für alle unterstützten Microsoft Entra-Authentifizierungsmethoden in AKS verwenden.