Freigeben über


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

Gilt für: AKS auf Azure Stack HCI 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 unterstützt derzeit die Aktivierung von Azure RBAC nur während der erstbereitstellung und der Kubernetes-Clustererstellung. Sie können Azure RBAC nicht aktivieren, nachdem der Kubernetes-Cluster erstellt wurde.

  • Azure-Befehlszeilenschnittstelle. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.

  • Installieren Sie die neueste Version der aksarcconnectedk8s Azure CLI-Erweiterung. Beachten Sie, dass Sie erweiterungsversion 1.1.1 oder höher ausführen aksarc müssen, um Azure RBAC zu aktivieren.

    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.

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 --control-plane-ip $controlplaneIP --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 Azure Arc aktiviert sind, bietet die folgenden integrierten Rollen:

Role Beschreibung
Anzeigeberechtigter für Azure Arc Kubernetes Ermöglicht schreibgeschützten Zugriff, um die meisten Objekte in einem Namespace anzuzeigen.
Ermöglicht nicht das Anzeigen von Rollen oder Rollenbindungen.
Lässt die Anzeige secretsnicht zu, da read die Berechtigung für geheime Schlüssel den Zugriff auf ServiceAccount Anmeldeinformationen im Namespace ermöglicht, wodurch der API-Zugriff als jeder ServiceAccount im Namespace möglich ist (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.
Ermöglicht den Zugriff und secrets die Ausführung von Pods als beliebiger ServiceAccount Namespace, sodass er verwendet werden kann, um die API-Zugriffsebenen eines ServiceAccount beliebigen Namespaces zu erhalten.
Azure Arc Kubernetes-Administrator 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.
Ermöglicht keinen Schreibzugriff auf das Ressourcenkontingent oder den Namespace selbst.
Azure Arc Kubernetes-Clusteradministrator Ermöglicht den "Superbenutzer"-Zugriff, um jede Aktion für jede Ressource auszuführen.
Ermöglicht die vollständige Kontrolle über alle Ressourcen im Cluster und in allen Namespaces.

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: Verwenden von Azure RBAC für Kubernetes-Autorisierung mit kubectl

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, müssen Sie über Azure Kubernetes Service Arc Cluster-Benutzerrollenberechtigungen für den Cluster verfügen.

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

Um sich anzumelden, verwenden Sie einen Webbrowser, um die Seite https://microsoft.com/deviceloginzu öffnen, und geben Sie den Code AAAAAAAAA ein, um sich zu authentifizieren.

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

AKS stellt das kubelogin Plug-In bereit, um zusätzliche Szenarien wie nicht interaktive Anmeldungen, ältere kubectl Versionen oder SSO über mehrere Cluster hinweg zu entsperren, ohne sich bei einem neuen Cluster anmelden zu müssen.

Sie können das kubelogin-Plug-In verwenden, indem Sie den folgenden Befehl ausführen:

export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig

Ähnlich wie kubectlbei der ersten Ausführung müssen Sie sich anmelden, wie im folgenden Beispiel gezeigt:

kubectl get nodes

Um sich anzumelden, verwenden Sie einen Webbrowser, um die Seite https://microsoft.com/deviceloginzu öffnen, und geben Sie den Code AAAAAAAAA ein, um sich zu authentifizieren.

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