Teilen über


Verwenden der rollenbasierten Zugriffssteuerung in Azure für die Kubernetes-Autorisierung

In diesem Artikel wird beschrieben, wie Sie Azure RBAC für die Kubernetes-Autorisierung verwenden, die eine einheitliche Verwaltungs- und Zugriffssteuerung für Azure-Ressourcen, AKS- und Kubernetes-Ressourcen ermöglicht. Weitere Informationen finden Sie unter Verwenden von Azure RBAC für die Kubernetes-Autorisierung.

Hinweis

Wenn Sie die integrierte Authentifizierung zwischen Microsoft Entra ID und AKS nutzen, können Sie Microsoft Entra-Benutzer, -Gruppen oder -Dienstprinzipale als Entitäten in der rollenbasierten Zugriffssteuerung in Kubernetes (Kubernetes RBAC) verwenden. Dank dieser Funktion müssen Sie Benutzeridentitäten und Anmeldeinformationen für Kubernetes nicht separat verwalten. Sie müssen jedoch weiterhin Azure RBAC und Kubernetes RBAC separat einrichten und verwalten.

Voraussetzungen

  • Azure CLI-Version 2.24.0 oder höher muss installiert und konfiguriert sein. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.
  • Sie benötigen kubectl mit der Mindestversion 1.18.3.
  • Sie müssen die verwaltete Microsoft Entra-Integration in Ihrem Cluster aktiviert haben, bevor Sie die Azure RBAC für Kubernetes-Autorisierung hinzufügen können. Wenn Sie die verwaltete Microsoft Entra-Integration aktivieren müssen, lesen Sie Verwenden der Microsoft Entra-ID in AKS.
  • Wenn Sie CRDs verwenden und benutzerdefinierte Rollendefinitionen erstellen, besteht zurzeit die einzige Möglichkeit zum Abdecken von CRDs darin, Microsoft.ContainerService/managedClusters/*/read einzusetzen. Für die restlichen Objekte können Sie die spezifischen API-Gruppen verwenden, z. B. Microsoft.ContainerService/apps/deployments/read.
  • Es kann bis zu fünf Minuten dauern, bis neue Rollenzuweisungen verteilt und vom Autorisierungsserver aktualisiert werden.
  • Azure RBAC für die Kubernetes-Autorisierung erfordert, dass der für die Authentifizierung konfigurierte Microsoft Entra-Mandant der gleiche ist wie der Mandant für das Abonnement, das ihren AKS-Cluster enthält.

Erstellen Sie einen neuen AKS-Cluster mit verwalteter Microsoft Entra-Integration und Azure RBAC für Kubernetes-Autorisierung

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

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Erstellen Sie mit dem Befehl az aks create einen AKS-Cluster mit verwalteter Microsoft Entra-Integration und Azure RBAC für Kubernetes-Autorisierung.

    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 von Azure RBAC in einem vorhandenen AKS-Cluster

  • Verwenden Sie den Befehl az aks update mit dem Flag --enable-azure-rbac, um die Azure RBAC für die Kubernetes-Autorisierung für einen vorhandenen AKS-Cluster zu aktivieren.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
    

Deaktivieren der Azure RBAC für Kubernetes-Autorisierung über einen AKS-Cluster

  • Verwenden Sie den Befehl az aks update mit dem Flag --disable-azure-rbac, um Azure RBAC für Kubernetes-Autorisierung aus einem vorhandenen AKS-Cluster zu entfernen.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
    

Integrierte AKS-Rollen

AKS stellt die folgenden vier integrierten Rollen bereit.

Role Beschreibung
RBAC-Leser von Azure Kubernetes Service Ermöglicht schreibgeschützten Zugriff, um die meisten Objekte in einem Namespace anzuzeigen. Es ist nicht möglich, Rollen oder Rollenbindungen anzuzeigen. Diese Rolle lässt das Anzeigen von Secrets nicht zu, da das Lesen des Inhalts von Geheimnissen den Zugriff auf ServiceAccount-Anmeldeinformationen im Namespace ermöglicht, was den API-Zugriff als beliebiges Dienstkonto im Namespace ermöglichen würde (eine Form von Berechtigungsausweitung).
RBAC-Writer von Azure Kubernetes Service 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 auf Secrets und das Ausführen von Pods als beliebiges Dienstkonto im Namespace, sodass sie verwendet werden kann, um die API-Zugriffsebenen eines beliebigen ServiceAccount 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. Diese Rolle ermöglicht die vollständige Kontrolle über alle Ressourcen im Cluster und in allen Namespaces.

Erstellen von Rollenzuweisungen für Benutzer für den Clusterzugriff

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

    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. Erstellen Sie eine Rollenzuweisung anhand des Befehls az role assignment create. <AAD-ENTITY-ID> kann ein Benutzername oder die Client-ID eines Dienstprinzipals sein. Im folgenden Beispiel wird eine Rollenzuweisung für die Rolle RBAC-Administrator für Azure Kubernetes Service erstellt.

    az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

    Hinweis

    Sie können die Azure Kubernetes Service RBAC Reader- und Azure Kubernetes Service RBAC Writer-Rollenzuweisungen erstellen, die auf einen bestimmten Namespace innerhalb des Clusters ausgerichtet sind, indem Sie den Befehl az role assignment create verwenden und den Bereich 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 von benutzerdefinierten Rollendefinitionen

Im Folgenden finden Sie ein Beispiel für eine benutzerdefinierte Rollendefinition, die es Benutzern ermöglicht, nur Bereitstellungen zu lesen. Andere Berechtigungen bestehen nicht. Eine vollständige Liste der möglichen Aktionen finden Sie unter Microsoft.ContainerService-Vorgänge.

  1. Um Ihre eigenen benutzerdefinierten Rollendefinitionen zu erstellen, kopieren Sie die folgende Datei, ersetzen Sie <YOUR SUBSCRIPTION ID> 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 mithilfe des az role assignment create-Befehls einem Benutzer oder einer anderen Identität zu.

    az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

Verwenden von Azure RBAC für Kubernetes-Autorisierung mit kubectl

  1. Stellen Sie sicher, dass Sie über die integrierte Rolle Azure Kubernetes Service Clusterbenutzer verfügen, und rufen Sie dann mithilfe des Befehls az aks get-credentials die kubeconfig Ihres AKS-Clusters ab.

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Jetzt können Sie über kubectl Ihren Cluster verwalten. Beispielsweise können Sie die Knoten in Ihrem Cluster mit kubectl get nodes auflisten.

    kubectl get nodes
    

    Beispielausgabe:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

Verwenden von Azure RBAC für Kubernetes-Autorisierung mit kubelogin

AKS hat das kubelogin-Plug-In erstellt, um Szenarien wie nicht interaktive Anmeldungen, ältere kubectl-Versionen oder die Nutzung des einmaligen Anmeldens für mehrere Cluster zu entsperren, ohne dass Sie sich bei einem neuen Cluster anmelden müssen.

  1. Verwenden Sie das kubelogin-Plug-In, indem Sie den folgenden Befehl ausführen:

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. Jetzt können Sie über kubectl Ihren Cluster verwalten. Beispielsweise können Sie die Knoten in Ihrem Cluster mit kubectl get nodes auflisten.

    kubectl get nodes
    

    Beispielausgabe:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

Bereinigen von Ressourcen

Löschen von Rollenzuweisungen

  1. Listen Sie Rollenzuweisungen mithilfe des Befehls az role assignment list auf:

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. Löschen Sie Rollenzuweisungen mithilfe des Befehls az role assignment delete:

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

Löschen einer Rollendefinition

  • Löschen Sie die benutzerdefinierte Rollendefinition mithilfe des Befehls az role definition delete:

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

Löschen der Ressourcengruppe und des AKS-Clusters

  • Löschen Sie mithilfe des Befehls az group delete die Ressourcengruppe und den AKS-Cluster:

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

Nächste Schritte

Weitere Informationen zu AKS-Authentifizierung und -Autorisierung, Kubernetes RBAC und Azure RBAC finden Sie hier: