Verwenden Microsoft Entra ID Autorisierung für die Kubernetes-API in Azure Kubernetes Service (AKS)

Gilt für: ✔️ AKS Automatic ✔️ AKS Standard

In diesem Artikel wird gezeigt, wie Aufrufe der Kubernetes-API in Azure Kubernetes Service (AKS) mithilfe von Microsoft Entra ID Identitäten autorisiert werden. Microsoft Entra ID Autorisierung für die Kubernetes-API verwendet Azure RBAC-Rollenzuweisungen, um Zugriff auf Kubernetes-Ressourcen zu gewähren. Weisen Sie für integrierte Kubernetes-Ressourcen eine der integrierten AKS-Rollen (z. B. Azure Kubernetes Service RBAC Reader) im Cluster- oder Namespacebereich zu. Weisen Sie für benutzerdefinierte Ressourcen (CRDs) eine benutzerdefinierte Rolle mit Azure ABAC-Bedingungen zu, die angeben, auf welche CRD-Gruppen oder -Typen der Zugewiesene zugreifen kann. Die beiden Rollenzuweisungen setzen sich zusammen: eine gewährt Zugriff auf Kubernetes-Standardressourcen, und die andere bietet bedingten Zugriff auf bestimmte benutzerdefinierte Ressourcen.

Für die meisten Produktionsworkloads ist AKS Automatic die standardmäßig empfohlene produktionsreife Option für AKS. AKS Automatic-Cluster sind mit Azure RBAC für die Kubernetes-Autorisierung vorkonfiguriert, sodass Sie sich darauf konzentrieren können, Benutzern, Gruppen und Dienstprinzipalen die richtigen Microsoft Entra-Rollenzuweisungen zuzuweisen.

Eine konzeptionelle Übersicht über die verfügbaren Kubernetes-API-Autorisierungsoptionen in AKS finden Sie unter Clusterautorisierungskonzepte.

Note

Wenn Sie die integrierte Authentifizierung zwischen Microsoft Entra ID und AKS verwenden, können Sie Microsoft Entra-Benutzer, Gruppen oder Dienstprinzipale als Themen in Kubernetes rollenbasierte Zugriffssteuerung (Kubernetes RBAC) verwenden. Mithilfe Microsoft Entra ID Autorisierung müssen Sie benutzeridentitäten und Anmeldeinformationen für Kubernetes nicht separat verwalten. Sie müssen jedoch weiterhin Microsoft Entra ID Rollenzuweisungen und alle Kubernetes-RBAC-Bindungen separat einrichten und verwalten.

Note

AKS Automatic-Cluster sind vorkonfiguriert, für die Kubernetes-Autorisierung Azure RBAC zu verwenden. Sie müssen --enable-azure-rbac in AKS Automatic-Clustern nicht aktivieren. In AKS Standard können Sie Azure RBAC basierend auf Ihrer Clusterkonfiguration aktivieren oder deaktivieren.

Prerequisites

  • Sie benötigen die Azure CLI-Version 2.24.0 oder höher installiert und konfiguriert. Führen Sie az --version aus, um die Version zu ermitteln. Wenn Sie eine Installation oder ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Azure CLI installieren.
  • Sie benötigen kubectl in mindestens der Version 1.18.3.
  • Sie müssen die verwaltete Microsoft-Entra-Integration auf Ihrem Cluster aktiviert haben, bevor Sie die Microsoft Entra ID-Autorisierung für die Kubernetes-API hinzufügen können. Wenn Sie die verwaltete Microsoft Entra-Integration aktivieren müssen, konsultieren Sie Use Microsoft Entra ID in AKS.
  • Es kann bis zu fünf Minuten dauern, bis neue Rollenzuweisungen verteilt und vom Autorisierungsserver aktualisiert werden.
  • Microsoft Entra ID Autorisierung für die Kubernetes-API erfordert, dass der für die Authentifizierung konfigurierte Microsoft Entra Mandant mit dem Mandanten für das Abonnement übereinstimmt, das Ihren AKS-Cluster enthält.

Verhalten des AKS-Clustermodus

Cluster-Modus Azure RBAC für Kubernetes-Autorisierung
AKS Automatik Vorkonfiguriert (standardmäßig aktiviert)
AKS Standard Optional (aktivieren mit --enable-azure-rbac)

Erstellen eines neuen AKS-Clusters mit verwalteter Microsoft Entra Integration und Microsoft Entra ID Autorisierung

Verwenden Sie für neue Produktionsworkloads AKS Automatic. Azure RBAC für Kubernetes-Autorisierung ist für AKS Automatic Clusters vorkonfiguriert.

  1. Erstellen Sie einen automatischen AKS-Cluster, indem Sie die folgenden Schritte ausführen: Erstellen eines automatischen Azure Kubernetes Service (AKS)-Clusters.

  2. Optional: Stellen Sie sicher, dass Azure RBAC für Kubernetes-Autorisierung auf Ihrem Cluster mithilfe des az aks show Befehls aktiviert ist.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    az aks show \
      --resource-group $RESOURCE_GROUP \
      --name $CLUSTER_NAME \
      --query "aadProfile.enableAzureRbac" \
      --output tsv
    

AKS Standard

  1. Erstellen Sie eine Azure Ressourcengruppe mithilfe des Befehls az group create.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Erstellen Sie einen AKS Standardcluster mit verwalteter Microsoft Entra Integration und Microsoft Entra ID Autorisierung mithilfe des az aks create Befehls.

    export CLUSTER_NAME=<cluster-name>
    
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --enable-aad \
        --enable-azure-rbac \
        --generate-ssh-keys
    

    Ihre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:

    "AADProfile": {
        "adminGroupObjectIds": null,
        "clientAppId": null,
        "enableAzureRbac": true,
        "managed": true,
        "serverAppId": null,
        "serverAppSecret": null,
        "tenantId": "****-****-****-****-****"
    }
    

Aktivieren Microsoft Entra ID Autorisierung für einen vorhandenen AKS-Cluster

Aktivieren Sie für vorhandene AKS-Standard-Cluster die Microsoft Entra ID-Autorisierung für die Kubernetes-API mit dem Befehl az aks update und dem Flag --enable-azure-rbac.

# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
export CLUSTER_NAME=<cluster-name>

# Enable Microsoft Entra ID authorization for the Kubernetes API
az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac

AKS Automatic-Cluster sind bereits mit Azure RBAC für die Kubernetes-Autorisierung vorkonfiguriert. Für AKS Automatic müssen Sie --enable-azure-rbac nicht ausführen.

Integrierte Rollen von AKS

AKS stellt die folgenden integrierten Rollen bereit:

Role Beschreibung
Azure Kubernetes Service RBAC Reader Ermöglicht nur-Lesezugriff, um die meisten Objekte in einem Namespace anzuzeigen. Es ist nicht möglich, Rollen oder Rollenbindungen anzuzeigen. Diese Rolle lässt die Anzeige Secrets nicht zu, da das Lesen der Inhalte von Secrets den Zugriff auf ServiceAccount-Anmeldeinformationen im Namespace ermöglicht, wodurch der API-Zugriff als beliebiges ServiceAccount im Namespace (eine Form der Berechtigungseskalation) möglich wäre.
Azure Kubernetes Service RBAC-Schreiber Ermöglicht Lese-/Schreibzugriff auf die meisten Objekte in einem Namespace. Diese Rolle lässt das Anzeigen oder Ändern von Rollen oder Rollenbindungen nicht zu. Diese Rolle ermöglicht jedoch den Zugriff Secrets und die Ausführung von Pods als beliebiges ServiceAccount im Namespace, sodass sie verwendet werden kann, um die API-Zugriffsebenen eines beliebigen ServiceAccounts im Namespace zu erhalten.
RBAC-Administrator von Azure Kubernetes Service Ermöglicht Administratorzugriff, der in einem Namespace erteilt werden soll. Ermöglicht Lese-/Schreibzugriff auf die meisten Ressourcen in einem Namespace (oder Clusterbereich), einschließlich der Möglichkeit zum Erstellen von Rollen und Rollenbindungen innerhalb des Namespace. Diese Rolle lässt keinen Schreibzugriff auf das Ressourcenkontingent oder den Namespace selbst zu.
RBAC-Clusteradministrator von Azure Kubernetes Service Ermöglicht Superuserzugriff, um beliebige Aktionen für beliebige Ressourcen auszuführen. Sie ermöglicht die vollständige Kontrolle über jede Ressource im Cluster und in allen Namespaces.

Erstellen von Rollenzuweisungen für den Clusterzugriff

  1. Rufen Sie Ihre AKS-Ressourcen-ID mithilfe des az aks show Befehls ab.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS resource ID
    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. Erstellen Sie eine Rollenzuweisung mithilfe des az role assignment create Befehls. <AAD-ENTITY-ID> kann ein Benutzername oder die Client-ID eines Dienstprinzipals sein. Im folgenden Beispiel wird eine Rollenzuweisung für die Azure Kubernetes Service RBAC-Administratorrolle erstellt.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS resource ID
    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
    # Create a role assignment for the Azure Kubernetes Service RBAC Admin role
    az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

    Note

    Sie können die Rollenzuweisungen für Azure Kubernetes Service RBAC Reader und Azure Kubernetes Service RBAC Writer, deren Geltungsbereich auf einen bestimmten Namespace innerhalb des Clusters beschränkt ist, mit dem Befehl az role assignment create erstellen, indem Sie den Geltungsbereich auf den gewünschten Namespace festlegen.

    az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
    

Erstellen benutzerdefinierter Rollendefinitionen

Für integrierte Kubernetes-Ressourcen verweisen benutzerdefinierte Rollendefinitionen auf die entsprechende API-Gruppenaktion unter Microsoft.ContainerService/managedClusters/. Im folgenden Beispiel kann ein Benutzer nur Bereitstellungen lesen und nichts anderes. Eine vollständige Liste der möglichen Aktionen finden Sie unter "Microsoft.ContainerService"-Vorgänge.

Für benutzerdefinierte Ressourcen muss die benutzerdefinierte Rolle die entsprechende Datenaktion für die benutzerdefinierte Ressource gewähren, z. B. Microsoft.ContainerService/managedClusters/customresources/read. Eine benutzerdefinierte Rolle allein filtert den Zugriff nicht nach benutzerdefinierter Ressourcendefinitionsgruppe oder -art. Um diese Filterung anzuwenden, fügen Sie der Rollenzuweisung eine Azure ABAC-Bedingung hinzu. Die vollständige Vorgehensweise finden Sie unter Einschränken des benutzerdefinierten Ressourcenzugriffs mithilfe von ABAC-Bedingungen.

  1. Um eigene benutzerdefinierte Rollendefinitionen zu erstellen, kopieren Sie die folgende Datei, ersetzen Sie <YOUR-SUBSCRIPTION-ID> sie durch Ihre eigene Abonnement-ID, und speichern Sie sie dann unter deploy-view.json.

    {
        "Name": "AKS Deployment Reader",
        "Description": "Lets you view all deployments in cluster/namespace.",
        "Actions": [],
        "NotActions": [],
        "DataActions": [
            "Microsoft.ContainerService/managedClusters/apps/deployments/read"
        ],
        "NotDataActions": [],
        "assignableScopes": [
            "/subscriptions/<YOUR-SUBSCRIPTION-ID>"
        ]
    }
    
  2. Erstellen Sie die Rollendefinition mithilfe des Befehls az role definition create und legen Sie die --role-definition auf die deploy-view.json-Datei fest, die Sie im vorherigen Schritt erstellt haben.

    az role definition create --role-definition @deploy-view.json 
    
  3. Weisen Sie die Rollendefinition einem Benutzer oder einer anderen Identität mithilfe des az role assignment create Befehls zu.

        # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS resource ID
    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
    # Create a role assignment for the AKS Deployment Reader role
    az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

Einschränken des benutzerdefinierten Ressourcenzugriffs mithilfe von ABAC-Bedingungen (Vorschau)

Important

AKS-Preview-Funktionen stehen auf Selbstbedienungs- und Opt-in-Basis zur Verfügung. Vorschauversionen werden „im Istzustand“ und „wie verfügbar“ bereitgestellt und sind von den Service Level Agreements und der eingeschränkten Garantie ausgeschlossen. AKS-Vorschauversionen werden teilweise vom Kundensupport auf Grundlage der bestmöglichen Leistung abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen. Weitere Informationen finden Sie in den folgenden Supportartikeln:

Mit ABAC-Bedingungen können Sie Microsoft-Entra-ID-Rollenzuweisungen auf bestimmte Gruppen und Typen benutzerdefinierter Ressourcen (CRDs) filtern – zentral aus Microsoft Entra ID heraus, ohne für jeden Cluster Kubernetes-RBAC-Role- und -RoleBinding-Manifeste schreiben zu müssen. Hintergrundinformationen zu Azure ABAC finden Sie unter "Was sind Azure Rollenzuweisungsbedingungen?

Wann ABAC-Bedingungen verwendet werden sollen

Verwenden Sie dieses Feature, wenn Sie Folgendes ausführen möchten:

  • Einschränken, welche CRD-Gruppen oder -Typen ein Zugewiesener auflisten oder abrufen kann.
  • Erzwingen Sie zentral benutzerdefinierte Ressourcenzugriffsgrenzen von Microsoft Entra ID, ohne die Kubernetes RBAC-Objekte Role und RoleBinding auf jedem Cluster verwalten zu müssen.
  • Unterscheiden Sie zwischen CRDs, die von verschiedenen Operatoren veröffentlicht werden (z. B. erlauben secrets-store.csi.x-k8s.io und blockieren security.istio.io).

Verfügbare Bedingungsattribute

Die folgenden Anforderungsattribute sind beim Erstellen von Bedingungen für die Kubernetes-API in einem AKS-Cluster verfügbar:

Merkmal Beschreibung
Microsoft.ContainerService/managedClusters/customResources:group Die API-Gruppe der benutzerdefinierten Ressource, auf die zugegriffen wird (z. B. secrets-store.csi.x-k8s.io).
Microsoft.ContainerService/managedClusters/customResources:kind Die Art der benutzerdefinierten Ressource, auf die zugegriffen wird (z. B. secretproviderclasses).

Hinzufügen einer ABAC-Bedingung zu einer Rollenzuweisung

Im folgenden Beispiel wird eine benutzerdefinierte AKS CRD Reader-Rolle erstellt, die Lesezugriff auf benutzerdefinierte Ressourcen gewährt. Anschließend wird die Rolle mit einer Bedingung zugewiesen, die nur den Zugriff auf secretproviderclasses in der Gruppe secrets-store.csi.x-k8s.io erlaubt (die CRD, die vom Azure Key Vault-Anbieter für den Secrets Store CSI-Treiber verwendet wird).

  1. Speichern Sie die folgende Rollendefinition in einer Datei mit dem Namen crd-reader.json, die durch Ihre eigene Abonnement-ID ersetzt wird <YOUR-SUBSCRIPTION-ID> .

    {
        "Name": "AKS CRD Reader",
        "Description": "Lets you read custom resources in the cluster.",
        "Actions": [],
        "NotActions": [],
        "DataActions": [
            "Microsoft.ContainerService/managedClusters/customresources/read"
        ],
        "NotDataActions": [],
        "assignableScopes": [
            "/subscriptions/<YOUR-SUBSCRIPTION-ID>"
        ]
    }
    
  2. Erstellen Sie die Rollendefinition mithilfe des az role definition create Befehls.

    az role definition create --role-definition @crd-reader.json
    
  3. Speichern Sie die folgende Bedingung in einer Datei mit dem Namen abac-condition.txt. Die Bedingung ermöglicht es, dass nicht benutzerdefinierte Leserechte für Ressourcen unverändert durchlaufen, und schränkt benutzerdefinierte Leserechte für Ressourcen auf eine bestimmte Gruppe und einen bestimmten Typ ein.

    (
     (
      !(ActionMatches{'Microsoft.ContainerService/managedClusters/customresources/read'})
     )
     OR
     (
      @Request[Microsoft.ContainerService/managedClusters/customResources:group] StringEqualsIgnoreCase 'secrets-store.csi.x-k8s.io'
      AND
      @Request[Microsoft.ContainerService/managedClusters/customResources:kind] StringEqualsIgnoreCase 'secretproviderclasses'
     )
    )
    
  4. Erstellen Sie die Rollenzuweisung mit der Bedingung mithilfe des az role assignment create Befehls.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS resource ID
    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
    # Create a role assignment for the AKS CRD Reader role with an ABAC condition
    az role assignment create \
        --role "AKS CRD Reader" \
        --assignee <AAD-ENTITY-ID> \
        --scope $AKS_ID \
        --condition "$(cat abac-condition.txt)" \
        --condition-version "2.0" \
        --description "Allow reads on SecretProviderClass resources only"
    

Sie können auch eine Bedingung über das Azure-Portal hinzufügen. Wählen Sie auf der Seite " Rollenzuweisung hinzufügen " die Registerkarte "Bedingungen " und dann " Bedingung hinzufügen " aus, und verwenden Sie den visuellen Editor, um den Ausdruck zu erstellen.

Überprüfen der Bedingung

Nach der Verteilung der Rollenzuweisung (bis zu fünf Minuten) melden Sie sich als der Benutzer, dem die Rolle zugewiesen wurde, an und bestätigen Sie, dass dieser die erlaubte CRD, aber keine anderen CRDs lesen darf.

  1. Rufen Sie die Clusteranmeldeinformationen mithilfe des az aks get-credentials Befehls ab.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the cluster credentials
    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Liste secretproviderclasses aus der Gruppe secrets-store.csi.x-k8s.io, die die Voraussetzung zulässt. Der Befehl sollte erfolgreich sein und entweder die vorhandenen Ressourcen oder eine leere Liste zurückgeben (oder einen nicht gefundenen Fehler, wenn die CRD nicht im Cluster installiert ist).

    kubectl get secretproviderclasses.secrets-store.csi.x-k8s.io --all-namespaces
    
  3. Liste authorizationpolicies aus der Istio-Gruppe security.istio.io , die die Bedingung blockiert. Der Befehl sollte mit einem Forbidden Fehler aus dem Microsoft Entra ID Autorisierungswebhook fehlschlagen (vorausgesetzt, dass der Istio CRD auf dem Cluster installiert ist; andernfalls kubectl wird ein nicht gefundener Fehler zurückgegeben, bevor der API-Server den Autorisierungswebhook erreicht).

    kubectl get authorizationpolicies.security.istio.io --all-namespaces
    

Bereinigen von Ressourcen

Deaktivieren Microsoft Entra ID Autorisierung

Entfernen Sie die Microsoft Entra ID-Autorisierung mit dem Befehl az aks update und dem Flag --disable-azure-rbac.

# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
export CLUSTER_NAME=<cluster-name>

# Disable Microsoft Entra ID authorization for the Kubernetes API
az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac

Rollenzuweisung löschen

  1. Rollenzuweisungen mithilfe des az role assignment list Befehls auflisten.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS resource ID
    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
    # List role assignments for the AKS cluster
    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. Löschen Sie die Rollenzuweisungen mithilfe des az role assignment delete Befehls.

    az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
    

Löschen einer Rollendefinition

Löschen Sie eine benutzerdefinierte Rollendefinition mithilfe des az role definition delete Befehls.

az role definition delete --name "AKS Deployment Reader"

Ressourcengruppe und AKS-Cluster löschen

Löschen Sie die Ressourcengruppe (und den darin enthaltenen AKS-Cluster) mithilfe des az group delete Befehls.

# Set environment variables
export RESOURCE_GROUP=<resource-group-name>

# Delete the resource group and all resources in it
az group delete --name $RESOURCE_GROUP --yes --no-wait

Weitere Informationen zu AKS finden Sie in den folgenden Artikeln: