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

Wenn Sie die integrierte Authentifizierung zwischen Microsoft Entra ID und AKS nutzen, können Sie Microsoft Entra-Benutzer, -Gruppen oder -Dienstprinzipale als Themen 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.

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.

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

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

az group create --name myResourceGroup --location westus2

Erstellen Sie mit dem Befehl az aks create einen AKS-Cluster mit verwalteter Microsoft Entra-Integration und Azure RBAC für Kubernetes-Autorisierung.

az aks create -g myResourceGroup -n myManagedCluster --enable-aad --enable-azure-rbac

Die Ausgabe ähnelt der folgenden Beispielausgabe:

"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 zu einem vorhandenen AKS-Cluster hinzuzufügen.

az aks update -g myResourceGroup -n myAKSCluster --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 -g myResourceGroup -n myAKSCluster --disable-azure-rbac

Erstellen von Rollenzuweisungen für Benutzer zum Zugriff auf den Cluster

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.

Rollenzuweisungen, die für den gesamten AKS-Cluster gelten, können entweder auf dem Blatt „Zugriffssteuerung (IAM)“ der Clusterressource im Azure-Portal oder mithilfe der folgenden Azure CLI-Befehle erfolgen:

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

AKS_ID=$(az aks show -g myResourceGroup -n myManagedCluster --query id -o tsv)

Erstellen Sie eine Rollenzuweisung anhand des Befehls az role assignment create. <AAD-ENTITY-ID> kann ein Benutzername oder die Client-ID eines Dienstprinzipals sein.

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>

Hinweis

Wenn Sie Rollenzuweisungen für einen bestimmten Namespace festlegen, können Sie im Azure-Portal anschließend keine „Rollenzuweisungen“ für den Namespace in einem Bereich sehen. Sie finden sie mithilfe des Befehls az role assignment list oder indem Sie Rollenzuweisungen für einen Benutzer oder eine Gruppe auflisten, dem/der Sie die Rolle zugewiesen haben.

az role assignment list --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.

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>"
    ]
}

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 

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

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 -g myResourceGroup -n myManagedCluster

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

kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

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 zusätzliche 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.

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 bei kubectl müssen Sie sich bei der ersten Ausführung anmelden, wie im folgenden Beispiel gezeigt:

kubectl get nodes
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

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

# List role assignments
az role assignment list --scope $AKS_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 Deployment Reader"

Löschen der Ressourcengruppe und des AKS-Clusters

az group delete -n myResourceGroup

Nächste Schritte

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