Freigeben über


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

In diesem Artikel wird erläutert, wie Sie eine vom Benutzer zugewiesene verwaltete Identität auf einem neuen oder vorhandenen AKS-Cluster aktivieren, die Prinzipal-ID der vom Benutzer zugewiesenen verwalteten Identität abrufen und eine Rollenzuweisung für die vom Benutzer zugewiesene verwaltete Identität hinzufügen.

Voraussetzungen

  • Eine vorhandene Azure Ressourcengruppe. Wenn Sie keins haben, können Sie einen mit dem az group create Befehl erstellen.

    az group create \
        --name <resource-group-name> \
        --location <location>
    
  • Terraform lokal installiert. Installationsanweisungen finden Sie unter Install Terraform.

Einschränkungen

  • Nachdem Sie einen Cluster mit einer verwalteten Identität erstellt haben, können Sie nicht zurück zu einem Dienstprinzipal wechseln.
  • 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.
    • Sie können die angepasste Ressourcendefinition (CRD) AzurePodIdentityException so konfigurieren, dass Anfragen an den IMDS-Endpunkt, die von einem Pod stammen, der mit den in der CRD definierten Bezeichnungen übereinstimmt, ohne Verarbeitung in NMI als Proxy behandelt werden. 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 Sie Microsoft Entra Pod-verwaltete Identitäten in Azure Kubernetes Service (AKS).
    • Um eine Ausnahme zu konfigurieren, installieren Sie die mic-exception YAML.
  • Die REGIONEN USDOD Central, USDOD East und USGov Iowa in Azure US Government Cloud unterstützen das Erstellen eines Clusters mit einer vom Benutzer zugewiesenen verwalteten Identität nicht.

Überlegungen zur Aktualisierung von Clustern

Berücksichtigen Sie beim Aktualisieren eines 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 ordnungsgemäß festgelegt ist. Wenn Sie die Azure CLI nicht zum Ausführen des Migrationsvorgangs verwenden, müssen Sie die Berechtigung der Add-On-Identität selbst behandeln. Ein Beispiel für die Verwendung einer Azure Resource Manager (ARM)-Vorlage finden Sie unter Azure-Rollen mit ARM-Vorlagen zuweisen.
  • Wenn Ihr Cluster --attach-acr zum Abrufen von Bildern aus Azure Container Registry (ACR) verwendet hat, müssen Sie den Befehl az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id> ausführen, nachdem Sie ihren Cluster aktualisiert haben, damit das neu erstellte Kubelet, das für verwaltete Identität verwendet wird, die Berechtigung zum Abrufen von ACR abrufen kann. Andernfalls können Sie nach der Aktualisierung keinen Pull aus ACR ausführen.

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)

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

Erstellen Sie einen AKS-Cluster mit einer vom Benutzer zugewiesenen verwalteten Identität mithilfe des az aks create Befehls und des Parameters, der --assign-identity auf die Ressourcen-ID der vom Benutzer zugewiesenen verwalteten Identität festgelegt ist.

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

Um einen vorhandenen Cluster zu aktualisieren, sodass eine vom Benutzer zugewiesene verwaltete Identität verwendet wird, nutzen Sie den az aks update-Befehl und setzen Sie den Parameter --assign-identity auf die Ressourcen-ID der vom Benutzer zugewiesenen verwalteten Identität fest.

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>"
        }
    }
    },
...

Nachdem Sie den Cluster so aktualisiert haben, dass eine vom Benutzer zugewiesene verwaltete Identität anstelle eines Dienstprinzipals verwendet wird, verwenden die Steuerungsebene und die Pods die vom Benutzer zugewiesene verwaltete Identität für die Autorisierung, wenn sie auf andere Dienste in Azure zugreifen. Kubelet verwendet weiterhin einen Dienstprinzipal, bis Sie auch den Knotenpool aktualisieren. Ein Upgrade des Knotenpools verursacht Ausfallzeiten für Ihren AKS-Cluster, da die Knoten in den Knotenpools abgeriegelt, entleert und neu abgebildet werden. Sie können den Befehl in Ihren Knoten verwenden, um auf eine vom Benutzer zugewiesene verwaltete Identität zu aktualisieren.

az aks nodepool upgrade \
  --resource-group <resource-group-name> \
  --cluster-name <aks-cluster-name> \
  --name <node-pool-name> \
  --node-image-only

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 nutzen weiterhin die alte, vom System zugewiesene Identität für bis zu mehrere Stunden bis zur nächsten Token-Aktualisierung.

Zuweisen einer Azure RBAC-Rolle an die verwaltete Identität, die vom Benutzer zugewiesen wurde

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 Rolle Key Vault Secrets User der vom Benutzer zugewiesenen verwalteten Identität zugewiesen, um ihm Berechtigungen für den Zugriff auf geheime Schlüssel in einem key vault zu gewähren. Die Rollenzuweisung ist auf die Key Vault-Resource beschränkt.

az role assignment create \
    --assignee <client-id> \
    --role "Key Vault Secrets User" \
    --scope "<key-vault-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.

Erstellen der Terraform-Konfigurationsdatei

Terraform-Konfigurationsdateien definieren die Infrastruktur, die Terraform erstellt und verwaltet.

  1. Erstellen Sie eine Datei mit dem Namen main.tf, und fügen Sie den folgenden Code hinzu, um die Terraform-Version zu definieren und den Azure Anbieter anzugeben:

    terraform {
    required_version = ">= 1.0"
    required_providers {
      azurerm = {
        source  = "hashicorp/azurerm"
        version = "~> 4.0"
      }
     }
    }
    provider "azurerm" {
     features {}
    }
    
  2. Fügen Sie dem main.tf den folgenden Code hinzu, um eine Azure Ressourcengruppe zu erstellen. Sie können den Namen und den Speicherort der Ressourcengruppe nach Bedarf ändern.

    resource "azurerm_resource_group" "example" {
     name     = "aks-rg"
     location = "East US"
    }
    

Erstellen eines AKS-Clusters mit einer vom Benutzer zugewiesenen verwalteten Identität mithilfe von Terraform

Fügen Sie den folgenden Code hinzu, um eine vom Benutzer zugewiesene verwaltete Identität und einen AKS-Cluster zu main.tf erstellen, der die Identität verwendet:

resource "azurerm_user_assigned_identity" "uai" {
 name                = "aks-user-identity"
 resource_group_name = azurerm_resource_group.example.name
 location            = azurerm_resource_group.example.location
}
resource "azurerm_kubernetes_cluster" "user_assigned" {
 name                = "aks-user"
 location            = azurerm_resource_group.example.location
 resource_group_name = azurerm_resource_group.example.name
 dns_prefix          = "aksuser"
 identity {
   type         = "UserAssigned"
   identity_ids = [azurerm_user_assigned_identity.uai.id]
 }
 default_node_pool {
   name       = "system"
   node_count = 1
   vm_size    = "Standard_DS2_v2"
 }
}

Hinzufügen einer Rollenzuweisung für eine vom Benutzer zugewiesene verwaltete Identität mithilfe von Terraform

Fügen Sie den folgenden Code zu main.tf hinzu, um eine Rollenzuweisung für die benutzerdefinierte verwaltete Identität zu erstellen. In diesem Beispiel wird die Rolle Key Vault Secrets User der vom Benutzer zugewiesenen verwalteten Identität zugewiesen, um ihm Berechtigungen für den Zugriff auf geheime Schlüssel in einem key vault zu gewähren. Die Rollenzuweisung ist auf die Key Vault-Resource beschränkt.

resource "azurerm_role_assignment" "user_assigned_key_vault_secrets_user" {
 scope                = azurerm_resource_group.example.id
 role_definition_name = "Key Vault Secrets User"
 principal_id         = azurerm_user_assigned_identity.uai.principal_id
}

Initialisieren Sie Terraform

Initialisieren Sie Terraform im Verzeichnis, das Ihre main.tf Datei enthält, mithilfe des terraform init Befehls. Dieser Befehl lädt den Azure Anbieter herunter, der zum Verwalten von Azure Ressourcen mit Terraform erforderlich ist.

terraform init

Terraform-Ausführungsplan erstellen

Erstellen Sie mit dem Befehl „terraform plan“ einen Terraform-Ausführungsplan. Dieser Befehl zeigt Ihnen die Ressourcen, die Terraform in Ihrem Azure-Abonnement erstellen oder ändern wird.

terraform plan

Terraform-Konfiguration anwenden

Wenden Sie nach der Überprüfung und Bestätigung des Ausführungsplans die Terraform-Konfiguration mit dem terraform apply Befehl an. Dieser Befehl erstellt oder ändert die ressourcen, die in Ihrer main.tf-Datei in Ihrem Azure-Abonnement definiert sind.

terraform apply

Überprüfen Sie die Terraform-Bereitstellung

Nachdem Sie die Terraform-Konfiguration angewendet haben, können Sie die Bereitstellung mithilfe des Befehls [az aks show][az-aks-show] mit dem Parameter --query überprüfen, um die Ausgabe zu filtern und die Identitätsinformationen anzuzeigen. Beispiel:

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

Weitere Informationen zu verwalteten Identitäten in AKS finden Sie in den folgenden Artikeln: