Freigeben über


Verwenden der rollenbasierten Zugriffssteuerung (Azure Role-Based Access Control, RBAC) für die Kubernetes-Autorisierung

Gilt für: AKS auf Azure Local, Version 23H2

Infrastrukturadministratoren können die rollenbasierte Zugriffssteuerung (Azure RBAC) von Azure verwenden, um zu steuern, wer auf die Kubeconfig-Datei und die berechtigungen zugreifen kann, die sie besitzen. Kubernetes-Operatoren können mithilfe des Kubectl-Tools basierend auf den angegebenen Berechtigungen mit Kubernetes-Clustern interagieren. Azure CLI bietet eine einfache Möglichkeit, die Zugriffsanmeldeinformationen und kubeconfig-Konfigurationsdatei abzurufen, um mithilfe von Kubectl eine Verbindung mit Ihren AKS-Clustern herzustellen.

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. Dank dieser Funktion müssen Sie Benutzeridentitäten und Anmeldeinformationen für Kubernetes nicht separat verwalten. Sie müssen azure RBAC und Kubernetes RBAC jedoch weiterhin separat einrichten und verwalten.

In diesem Artikel wird beschrieben, wie Sie Azure RBAC für Kubernetes-Clusterautorisierung mit Microsoft Entra ID und Azure-Rollenzuweisungen verwenden.

Eine konzeptionelle Übersicht finden Sie unter Azure RBAC für Kubernetes-Autorisierung für AKS, die von Azure Arc aktiviert sind.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind:

  • AKS auf Azure Local, Version 23H2, unterstützt derzeit die Aktivierung von Azure RBAC nur während der Kubernetes-Clustererstellung. Sie können Azure RBAC nicht aktivieren, nachdem der Kubernetes-Cluster erstellt wurde.

  • Installieren Sie die neueste Version der Azure CLI-Erweiterungen aksarc und connectedk8s . Beachten Sie, dass Sie die aksarc-Erweiterung Version 1.1.1 oder höher ausführen müssen, um Azure RBAC zu aktivieren. Führen Sie az --version aus, um die aktuelle Version zu ermitteln. Wenn Sie Azure CLI installieren oder aktualisieren müssen, lesen Sie " Installieren von Azure CLI".

    az extension add --name aksarc
    az extension add --name connectedk8s
    

    Wenn Sie die Erweiterung bereits installiert haben, aktualisieren Sie die aksarc Erweiterung auf die neueste Version:

    az extension update --name aksarc
    az extension update --name connectedk8s
    
  • Um mit Kubernetes-Clustern zu interagieren, müssen Sie Kubectl und Kubelogin installieren.

  • Sie benötigen die folgenden Berechtigungen, um Azure RBAC beim Erstellen eines Kubernetes-Clusters zu aktivieren:

    • Zum Erstellen eines Kubernetes-Clusters benötigen Sie die Rolle "Azure Kubernetes Service Arc Contributor ".
    • Um den --enable-azure-rbac Parameter zu verwenden, benötigen Sie die Rolle "Rollenbasierte Zugriffssteuerungsadministrator " für den Zugriff auf die Berechtigung "Microsoft.Authorization/roleAssignments/Write ". Weitere Informationen finden Sie unter Integrierte Azure-Rollen.
    • Es kann bis zu fünf Minuten dauern, bis neue Rollenzuweisungen verteilt und vom Autorisierungsserver aktualisiert werden.
  • Sobald Azure RBAC aktiviert ist, können Sie auf Ihren Kubernetes-Cluster mit den angegebenen Berechtigungen entweder über den direkten Modus oder den Proxymodus zugreifen.

    • Um direkt über den az aksarc get-credentials Befehl auf den Kubernetes-Cluster zuzugreifen, benötigen Sie die Rollenberechtigung "Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action", die in der Azure Kubernetes Service Arc Cluster-Rollenberechtigung enthalten ist.
    • Für den Zugriff auf den Kubernetes-Cluster über den az connectedk8s proxy Befehl oder über den Azure-Portal benötigen Sie die Aktion "Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action", die in der Azure Arc-fähigen Rollenberechtigung "Kubernetes Cluster-Benutzer" enthalten ist. In der Zwischenzeit müssen Sie überprüfen, ob die Agents und der Computer, der den Onboarding-Prozess ausführt, die In Azure Arc-fähigen Kubernetes-Netzwerkanforderungen erfüllen.
  • Um kubectl zu verwenden, können Sie entweder mit Azure RBAC oder der AAD-Administratorgruppe darauf zugreifen.

    • Um Kubectl mit Azure RBAC zu verwenden, benötigen Sie die Azure Arc Kubernetes Viewer-Rolle , die auf die verbundene Clusterressource festgelegt ist.
    • Um Kubectl mit der AAD-Administratorgruppe zu verwenden, benötigen Sie keine bestimmte Rolle, aber Sie müssen sicherstellen, dass Sie sich in einer der Gruppen in der Add-Admin-Gruppenliste der verbundenen Clusterressource befinden.

Schritt 1: Erstellen eines Azure RBAC-fähigen Kubernetes-Clusters

Sie können einen Azure RBAC-fähigen Kubernetes-Cluster für die Autorisierung und eine Microsoft Entra-ID für die Authentifizierung erstellen.

az aksarc create -n $aks_cluster_name -g $resource_group_name --custom-location $customlocation_ID --vnet-ids $logicnet_Id --generate-ssh-keys --enable-azure-rbac

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

Schritt 2: Erstellen von Rollenzuweisungen für Benutzer für den Zugriff auf den Cluster

AKS, die von Arc aktiviert sind, stellt die folgenden fünf integrierten Rollen bereit. Sie ähneln den integrierten Kubernetes-Rollen mit einigen Unterschieden, z. B. der Unterstützung von CRDs. Sehen Sie sich die vollständige Liste der Aktionen an, die für die einzelnen integrierten Azure-Rollen zulässig sind.

Rolle Beschreibung
Azure Arc-aktivierter Kubernetes-Clusterbenutzer Ermöglicht es Ihnen, die Cluster Connect-basierte Kubeconfig-Datei abzurufen, um Cluster von überall aus zu verwalten.
Anzeigeberechtigter für Azure Arc Kubernetes Ermöglicht schreibgeschützten Zugriff, um die meisten Objekte in einem Namespace anzuzeigen.
Ermöglicht das Anzeigen von geheimen Schlüsseln nicht, da leseberechtigungen für geheime Schlüssel den Zugriff auf ServiceAccount-Anmeldeinformationen im Namespace ermöglichen. Diese Anmeldeinformationen ermöglichen wiederum den API-Zugriff über diesen ServiceAccount-Wert (eine Form der Berechtigungseskalation).
Schreibberechtigter für Azure Arc Kubernetes Ermöglicht Lese-/Schreibzugriff auf die meisten Objekte in einem Namespace.
Ermöglicht das Anzeigen oder Ändern von Rollen oder Rollenbindungen nicht. Diese Rolle ermöglicht jedoch den Zugriff auf geheime Schlüssel und das Ausführen von Pods als beliebiger ServiceAccount-Wert im Namespace, sodass sie verwendet werden kann, um die API-Zugriffsebenen eines solchen ServiceAccount-Werts im Namespace zu erhalten.
Azure Arc Kubernetes-Administrator Mit dieser Rolle wird Administratorzugriff gewährt. Es soll innerhalb eines Namespace über RoleBinding gewährt werden. Wenn Sie es in RoleBinding verwenden, ermöglicht es Lese-/Schreibzugriff auf die meisten Ressourcen in einem Namespace, einschließlich der Möglichkeit, Rollen und Rollenbindungen innerhalb des Namespaces zu erstellen. Diese Rolle lässt keinen Schreibzugriff auf das Ressourcenkontingent oder den Namespace selbst zu.
Azure Arc Kubernetes-Clusteradministrator Ermöglicht den Zugriff auf "Superuser", um jede Aktion für jede Ressource auszuführen. Wenn Sie es in ClusterRoleBinding verwenden, bietet es die vollständige Kontrolle über jede Ressource im Cluster und in allen Namespaces. Wenn Sie es in RoleBinding verwenden, bietet es die vollständige Kontrolle über jede Ressource im Rollenbindungsnamespace, einschließlich des Namespace selbst.

Sie können den az role assignment create Befehl verwenden, um Rollenzuweisungen zu erstellen.

Rufen Sie zunächst den $ARM-ID Zielcluster ab, dem Sie eine Rolle zuweisen möchten.

$ARM_ID = (az connectedk8s show -g "$resource_group_name" -n $aks_cluster_name --query id -o tsv)

Verwenden Sie dann den az role assignment create Befehl, um Ihrem Kubernetes-Cluster Rollen zuzuweisen. Sie müssen den $ARM_ID ersten Schritt und den assignee-object-id für diesen Schritt angeben. Dies assignee-object-id kann eine Microsoft Entra-ID oder eine Dienstprinzipal-Client-ID sein.

Im folgenden Beispiel wird die Azure Arc Kubernetes Viewer-Rolle dem Kubernetes-Cluster zugewiesen:

az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <assignee-object-id> --scope $ARM_ID

In diesem Beispiel ist der Bereich die Azure Resource Manager-ID des Clusters. Es kann auch die Ressourcengruppe sein, die den Kubernetes-Cluster enthält.

Erstellen benutzerdefinierter Rollendefinitionen

Sie können Ihre eigene Rollendefinition für die Verwendung in den Rollenzuweisungen erstellen.

Das folgende Beispiel zeigt eine Rollendefinition, mit der ein Benutzer nur Bereitstellungen lesen kann. Weitere Informationen finden Sie in der vollständigen Liste der Datenaktionen, die zum Erstellen einer Rollendefinition verwendet werden können. Weitere Informationen zum Erstellen einer benutzerdefinierten Rolle finden Sie in den Schritten zum Erstellen einer benutzerdefinierten Rolle.

Um eigene benutzerdefinierte Rollendefinitionen zu erstellen, kopieren Sie das folgende JSON-Objekt in eine Datei namens custom-role.json. Ersetzen Sie den Platzhalter <subscription-id> durch die tatsächliche Abonnement-ID. Die benutzerdefinierte Rolle verwendet eine der Datenaktionen. Sie ermöglicht Ihnen die Anzeige aller Bereitstellungen in dem Bereich (Cluster oder Namespace), in dem die Rollenzuweisung erstellt wird.

{
    "Name": "AKS Arc Deployment Reader",
    "Description": "Lets you view all deployments in cluster/namespace.",
    "Actions": [],
    "NotActions": [],
    "DataActions": [
        "Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
    ],
    "NotDataActions": [],
    "assignableScopes": [
        "/subscriptions/<YOUR SUBSCRIPTION ID>"
    ]
}

Informationen zu benutzerdefinierten Rollen und deren Erstellung finden Sie unter Azure custom roles.

Erstellen Sie die Rollendefinition mithilfe des az role definition create Befehls, und legen Sie den --role-definition Parameter auf die deploy-view.json Datei fest, die Sie im vorherigen Schritt erstellt haben:

az role definition create --role-definition @deploy-view.json 

Weisen Sie die Rollendefinition einem Benutzer oder einer anderen Identität mithilfe des az role assignment create Befehls zu:

az role assignment create --role "AKS Arc Deployment Reader" --assignee <assignee-object-id> --scope $ARM_ID

Schritt 3: Zugreifen auf Kubernetes-Cluster

Sie können jetzt mit den angegebenen Berechtigungen auf Ihren Kubernetes-Cluster zugreifen, indem Sie entweder den direkten Modus oder den Proxymodus verwenden.

Zugreifen auf Ihren Cluster mit Kubectl (direkter Modus)

Für den Zugriff auf den Kubernetes-Cluster mit den angegebenen Berechtigungen benötigt der Kubernetes-Operator die Microsoft Entra kubeconfig, die Sie mit dem az aksarc get-credentials Befehl abrufen können. Dieser Befehl bietet Zugriff auf den admin-basierten Kubeconfig sowie eine benutzerbasierte Kubeconfig. Die admin-basierte Kubeconfig-Datei enthält geheime Schlüssel und sollte regelmäßig sicher gespeichert und gedreht werden. Andererseits enthält die benutzerbasierte Microsoft Entra ID kubeconfig keine geheimen Schlüssel und kann an Benutzer verteilt werden, die von ihren Clientcomputern eine Verbindung herstellen.

Um diesen Azure CLI-Befehl auszuführen, benötigen Sie den Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, der in der Azure Kubernetes Service Arc Cluster-Rollenberechtigung enthalten ist:

az aksarc get-credentials -g "$resource_group_name" -n $aks_cluster_name --file <file-name>

Jetzt können Sie Den Cluster mithilfe von Kubectl verwalten. Beispielsweise können Sie die Knoten in Ihrem Cluster mit kubectl get nodes auflisten. Wenn Sie sie zum ersten Mal ausführen, müssen Sie sich anmelden, wie im folgenden Beispiel gezeigt:

kubectl get nodes

Zugreifen auf Ihren Cluster über ein Clientgerät (Proxymodus)

Um von überall aus mit einem Befehl az connectedk8s proxy auf den Kubernetes-Cluster zuzugreifen, benötigen Sie die Rollenberechtigung "Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action", die in Azure Arc aktiviert ist.

Führen Sie die folgenden Schritte auf einem anderen Clientgerät aus:

  1. Anmelden mithilfe der Microsoft Entra-Authentifizierung

  2. Rufen Sie den cluster connect kubeconfig ab, der für die Kommunikation mit dem Cluster von überall aus erforderlich ist (auch von außerhalb der Firewall, die den Cluster umgibt):

    az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
    

    Hinweis

    Dieser Befehl öffnet den Proxy und blockiert die aktuelle Shell.

  3. Verwenden Sie kubectl in einer anderen Shell-Sitzung, um Anforderungen an den Cluster zu senden:

    kubectl get pods -A
    

Nun sollte eine Antwort aus dem Cluster mit der Liste aller Pods im default-Namespace angezeigt werden.

Weitere Informationen finden Sie unter Zugreifen auf Ihren Cluster von einem Clientgerät aus.

Bereinigen von Ressourcen

Löschen von Rollenzuweisungen

# List role assignments
az role assignment list --scope $ARM_ID --query [].id -o tsv

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

Löschen einer Rollendefinition

az role definition delete -n "AKS Arc Deployment Reader"

Nächste Schritte