Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 --versionaus, 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
kubectlin 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
AKS Automatic (empfohlen für Produktionsworkloads)
Verwenden Sie für neue Produktionsworkloads AKS Automatic. Azure RBAC für Kubernetes-Autorisierung ist für AKS Automatic Clusters vorkonfiguriert.
Erstellen Sie einen automatischen AKS-Cluster, indem Sie die folgenden Schritte ausführen: Erstellen eines automatischen Azure Kubernetes Service (AKS)-Clusters.
Optional: Stellen Sie sicher, dass Azure RBAC für Kubernetes-Autorisierung auf Ihrem Cluster mithilfe des
az aks showBefehls 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
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 $LOCATIONErstellen Sie einen AKS Standardcluster mit verwalteter Microsoft Entra Integration und Microsoft Entra ID Autorisierung mithilfe des
az aks createBefehls.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keysIhre 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
Rufen Sie Ihre AKS-Ressourcen-ID mithilfe des
az aks showBefehls 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)Erstellen Sie eine Rollenzuweisung mithilfe des
az role assignment createBefehls.<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_IDNote
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 createerstellen, 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.
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 unterdeploy-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 createund legen Sie die--role-definitionauf diedeploy-view.json-Datei fest, die Sie im vorherigen Schritt erstellt haben.az role definition create --role-definition @deploy-view.jsonWeisen Sie die Rollendefinition einem Benutzer oder einer anderen Identität mithilfe des
az role assignment createBefehls 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
RoleundRoleBindingauf 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.iound blockierensecurity.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).
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>" ] }Erstellen Sie die Rollendefinition mithilfe des
az role definition createBefehls.az role definition create --role-definition @crd-reader.jsonSpeichern 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' ) )Erstellen Sie die Rollenzuweisung mit der Bedingung mithilfe des
az role assignment createBefehls.# 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.
Rufen Sie die Clusteranmeldeinformationen mithilfe des
az aks get-credentialsBefehls 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_NAMEListe
secretproviderclassesaus der Gruppesecrets-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-namespacesListe
authorizationpoliciesaus der Istio-Gruppesecurity.istio.io, die die Bedingung blockiert. Der Befehl sollte mit einemForbiddenFehler aus dem Microsoft Entra ID Autorisierungswebhook fehlschlagen (vorausgesetzt, dass der Istio CRD auf dem Cluster installiert ist; andernfallskubectlwird 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
Rollenzuweisungen mithilfe des
az role assignment listBefehls 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 tsvLöschen Sie die Rollenzuweisungen mithilfe des
az role assignment deleteBefehls.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
Verwandte Inhalte
Weitere Informationen zu AKS finden Sie in den folgenden Artikeln: