Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: ✔️ AKS Automatic ✔️ AKS Standard
In dit artikel wordt beschreven hoe u aanroepen naar de Kubernetes-API in Azure Kubernetes Service (AKS) autoriseert met behulp van Microsoft Entra ID identiteiten. Microsoft Entra ID autorisatie voor de Kubernetes-API maakt gebruik van Azure RBAC-roltoewijzingen om toegang te verlenen tot Kubernetes-resources. Wijs voor ingebouwde Kubernetes-resources een van de ingebouwde AKS-rollen (zoals Azure Kubernetes Service RBAC Reader) toe aan het cluster- of naamruimtebereik. Wijs voor aangepaste resources (CRD's) een aangepaste rol toe met Azure ABAC-voorwaarden die bepalen tot welke CRD-groepen of soorten de toegewezen gebruiker toegang kan krijgen. De twee roltoewijzingen bestaan uit: één verleent toegang tot standaard Kubernetes-resources en de andere voorwaardelijke toegang tot specifieke aangepaste resources.
Voor de meeste productieworkloads is AKS Automatic de aanbevolen, productieklare standaardoptie voor AKS. Automatische AKS-clusters zijn vooraf geconfigureerd met Azure RBAC voor Kubernetes-autorisatie, zodat u zich kunt richten op het toewijzen van de juiste Microsoft Entra roltoewijzingen aan gebruikers, groepen en service-principals.
Zie Concepten voor clusterautorisatie voor een conceptueel overzicht van de beschikbare Kubernetes-API-autorisatieopties in AKS.
Note
Wanneer u geïntegreerde verificatie gebruikt tussen Microsoft Entra-id en AKS, kunt u Microsoft Entra-gebruikers, -groepen of -service-principals gebruiken als onderwerp in Kubernetes RBAC (op rollen gebaseerd toegangsbeheer van Kubernetes). Met behulp van Microsoft Entra ID-autorisatie hoeft u geen afzonderlijke gebruikersidentiteiten en referenties voor Kubernetes te beheren. U moet echter nog steeds Microsoft Entra ID roltoewijzingen en eventuele Kubernetes RBAC-bindingen afzonderlijk instellen en beheren.
Note
Automatische AKS-clusters zijn vooraf geconfigureerd voor gebruik van Azure RBAC voor Kubernetes-autorisatie. U hoeft --enable-azure-rbac niet in te schakelen op AKS Automatic-clusters. In AKS Standard kunt u Azure RBAC in- of uitschakelen op basis van de clusterconfiguratie.
Prerequisites
- U moet Azure CLI versie 2.24.0 of hoger hebben geïnstalleerd en geconfigureerd. Voer
az --versionuit om de versie te vinden. Als u Azure CLI wilt installeren of upgraden, raadpleegt u Azure CLI installeren. - U hebt een minimumversie van
kubectlnodig. - U hebt beheerde Microsoft Entra-integratie in uw cluster nodig voordat u Microsoft Entra ID autorisatie voor de Kubernetes-API kunt toevoegen. Zie Microsoft Entra-id gebruiken in AKS als u beheerde Microsoft Entra-integratie wilt inschakelen.
- Het kan vijf minuten duren voordat nieuwe roltoewijzingen zijn doorgegeven en bijgewerkt door de autorisatieserver.
- Microsoft Entra ID autorisatie voor de Kubernetes-API vereist dat de Microsoft Entra tenant die is geconfigureerd voor verificatie hetzelfde is als de tenant voor het abonnement dat uw AKS-cluster bevat.
Gedrag van AKS-clustermodus
| Clustermodus | Azure RBAC voor Kubernetes-autorisatie |
|---|---|
| AKS Automatisch | Vooraf geconfigureerd (standaard ingeschakeld) |
| AKS Standard | Optioneel (inschakelen met --enable-azure-rbac) |
Een nieuw AKS-cluster maken met beheerde Microsoft Entra-integratie en Microsoft Entra ID autorisatie
AKS Automatisch (aanbevolen voor productieworkloads)
Gebruik AKS Automatic voor nieuwe productieworkloads. Azure RBAC voor Kubernetes-autorisatie is vooraf geconfigureerd op AKS Automatische clusters.
Maak een AKS Automatic-cluster door Een Azure Kubernetes Service (AKS) Automatic-cluster maken te volgen.
Optioneel: controleer of Azure RBAC voor Kubernetes-autorisatie is ingeschakeld op uw cluster met behulp van de
az aks showopdracht.# 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
Maak een Azure-resourcegroep met behulp van de
az group createopdracht.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATIONMaak een AKS Standard-cluster met beheerde Microsoft Entra-integratie en Microsoft Entra ID autorisatie met behulp van de
az aks createopdracht.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keysUw output zou eruit moeten zien zoals de volgende voorbeeldoutput.
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
Microsoft Entra ID autorisatie inschakelen voor een bestaand AKS-cluster
Schakel voor bestaande AKS Standard-clusters Microsoft Entra ID autorisatie in voor de Kubernetes-API met behulp van de az aks update opdracht met de --enable-azure-rbac vlag.
# 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
Automatische AKS-clusters hebben al Azure RBAC voor Kubernetes-autorisatie vooraf geconfigureerd. U hoeft --enable-azure-rbac niet uit te voeren voor AKS Automatic.
Ingebouwde AKS-rollen
AKS biedt de volgende ingebouwde rollen:
| Role | Description |
|---|---|
| Azure Kubernetes Service RBAC-lezer | Staat alleen-lezentoegang toe om de meeste objecten in een naamruimte te zien. Het staat niet toe om rollen of rolbindingen te bekijken. Deze rol staat weergave van Secrets niet toe, omdat het lezen van de inhoud van Secrets toegang biedt tot ServiceAccount-referenties in de naamruimte, waardoor API-toegang wordt toegestaan als een willekeurige ServiceAccount in de naamruimte (een vorm van escalatie van bevoegdheden). |
| Azure Kubernetes Service RBAC Writer | Geeft lees-/schrijftoegang tot de meeste objecten in een namespace. Deze rol staat het weergeven of wijzigen van rollen of rolbindingen niet toe. Met deze rol kan men toegang tot Secrets krijgen en Pods uitvoeren als elke ServiceAccount in de naamruimte, zodat het kan worden gebruikt om de API-toegangsniveaus van elke ServiceAccount in de naamruimte te verkrijgen. |
| Azure Kubernetes Service RBAC-beheerder | Staat beheerderstoegang toe, bedoeld om binnen een namespace te worden verleend. Biedt lees-/schrijftoegang tot de meeste resources binnen een namespace (of clusterbereik), inclusief de mogelijkheid om rollen en rolbindings binnen de namespace te creëren. Met deze rol is schrijftoegang tot het resourcequotum of de naamruimte zelf niet toegestaan. |
| Azure Kubernetes Service RBAC-clusterbeheerder | Staat supergebruikertoegang toe om elke actie op elke bron uit te voeren. Het geeft volledige controle over elke resource in het cluster en in alle naamruimten. |
Roltoewijzingen maken voor clustertoegang
Haal uw AKS-resource-id op met behulp van de
az aks showopdracht.# 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)Maak een roltoewijzing met behulp van de
az role assignment createopdracht.<AAD-ENTITY-ID>kan een gebruikersnaam of de client-id van een service-principal zijn. In het volgende voorbeeld wordt een roltoewijzing gemaakt voor de rol Azure Kubernetes Service RBAC-beheerder.# 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
U kunt de Azure Kubernetes Service RBAC Reader en Azure Kubernetes Service RBAC Writer-roltoewijzingen maken die zijn gericht op een specifieke naamruimte binnen het cluster met behulp van de
az role assignment createopdracht en het bereik instellen op de gewenste naamruimte.az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
Aangepaste rollendefinities maken
Voor ingebouwde Kubernetes-resources verwijzen aangepaste roldefinities naar de bijbehorende API-groepsactie onder Microsoft.ContainerService/managedClusters/. In het volgende voorbeeld kan een gebruiker alleen implementaties lezen en niets anders. Zie Microsoft.ContainerService-bewerkingen voor de volledige lijst met mogelijke acties. Als u de toegang tot specifieke aangepaste resourcegroepen (CRD) of typen wilt filteren, zie Aangepaste resourcetoegang beperken met ABAC-voorwaarden verderop in dit artikel.
Als u uw eigen aangepaste roldefinities wilt maken, kopieert u het volgende bestand, vervangt u
<YOUR-SUBSCRIPTION-ID>uw eigen abonnements-id en slaat u deze op alsdeploy-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>" ] }Maak de roldefinitie met behulp van de
az role definition createopdracht en stel het--role-definitionin op hetdeploy-view.jsonbestand dat u in de vorige stap hebt gemaakt.az role definition create --role-definition @deploy-view.jsonWijs de roldefinitie toe aan een gebruiker of een andere identiteit met behulp van de
az role assignment createopdracht.# 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
Toegang tot aangepaste resources beperken met ABAC-voorwaarden (preview)
Important
AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning naar best vermogen. Zodoende zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:
Met ABAC-voorwaarden kunt u Microsoft Entra ID roltoewijzingen filteren op specifieke aangepaste resourcegroepen en -soorten , centraal, vanuit Microsoft Entra ID, zonder kubernetes RBAC Role en RoleBinding manifesten per cluster te schrijven. Zie Wat zijn Azure voorwaarden voor roltoewijzing voor achtergrondinformatie over Azure ABAC?
Wanneer moet u ABAC-voorwaarden gebruiken
Gebruik deze functie als u het volgende wilt doen:
- Beperken welke CRD-groepen of soorten een toegewezen gebruiker kan weergeven of ophalen.
- Dwing aangepaste toegangsgrenzen voor resources centraal af vanuit Microsoft Entra-id zonder Kubernetes RBAC
RoleenRoleBindingobjecten in elk cluster te beheren. - Onderscheid maken tussen CRD's die zijn gepubliceerd door verschillende operators (bijvoorbeeld toestaan
secrets-store.csi.x-k8s.iotijdens blokkerensecurity.istio.io).
Beschikbare voorwaardekenmerken
De volgende aanvraagkenmerken zijn beschikbaar bij het ontwerpen van voorwaarden voor de Kubernetes-API op een AKS-cluster:
| Attribute | Description |
|---|---|
Microsoft.ContainerService/managedClusters/customResources:group |
De API-groep van de aangepaste resource die wordt geopend (bijvoorbeeld secrets-store.csi.x-k8s.io). |
Microsoft.ContainerService/managedClusters/customResources:kind |
Het type aangepaste resource dat wordt geopend (bijvoorbeeld secretproviderclasses). |
Een ABAC-voorwaarde toevoegen aan een roltoewijzing
In het volgende voorbeeld wordt een aangepaste AKS CRD Reader-rol gemaakt die leestoegang verleent tot aangepaste bronnen. Vervolgens wordt de rol toegewezen met een voorwaarde die alleen toegang tot secretproviderclasses toestaat in de groep secrets-store.csi.x-k8s.io (de CRD die wordt gebruikt door de Azure Key Vault-provider voor het Secrets Store CSI-stuurprogramma).
Sla de volgende roldefinitie op in een bestand met de naam
crd-reader.json, waarbij u<YOUR-SUBSCRIPTION-ID>vervangt door uw eigen abonnements-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>" ] }Maak de roldefinitie met behulp van de
az role definition createopdracht.az role definition create --role-definition @crd-reader.jsonSla de volgende voorwaarde op in een bestand met de naam
abac-condition.txt. Met de voorwaarde kunnen niet-aangepaste resourceleesbewerkingen ongewijzigd worden doorgegeven en worden aangepaste resourceleesbewerkingen beperkt tot een specifieke groep en soort.( ( !(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' ) )Maak de roltoewijzing met de voorwaarde met behulp van de
az role assignment createopdracht.# 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"
U kunt ook een voorwaarde toevoegen via Azure Portal. Selecteer op de pagina Roltoewijzing toevoegen het tabblad Voorwaarden en selecteer vervolgens Voorwaarde toevoegen en gebruik de visuele editor om de expressie te maken.
De voorwaarde controleren
Nadat de roltoewijzing is doorgegeven (maximaal vijf minuten), meldt u zich aan als de toegewezen gebruiker en controleert u of ze de toegestane CRD kunnen lezen, maar niet andere CRD's.
Haal de clusterreferenties op met behulp van de
az aks get-credentialsopdracht.# 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_NAMELijst
secretproviderclassesuit desecrets-store.csi.x-k8s.iogroep, waarvoor de voorwaarde is toegestaan. De opdracht moet slagen en een van de twee, namelijk de bestaande hulpbronnen of een lege lijst, retourneren (of een niet-gevonden-foutmelding indien de CRD niet op de cluster is geïnstalleerd).kubectl get secretproviderclasses.secrets-store.csi.x-k8s.io --all-namespacesLijst
authorizationpoliciesuit de groep Istiosecurity.istio.io, die door de voorwaarde wordt geblokkeerd. De opdracht mislukt met eenForbiddenfout van de Microsoft Entra ID autorisatiewebhook (ervan uitgaande dat de Istio CRD is geïnstalleerd op het cluster;kubectlanders wordt een niet-gevonden fout geretourneerd voordat de API-server de autorisatiewebhook bereikt).kubectl get authorizationpolicies.security.istio.io --all-namespaces
De hulpbronnen opschonen
Microsoft Entra ID-autorisatie uitschakelen
Verwijder Microsoft Entra ID autorisatie met behulp van de az aks update opdracht met de --disable-azure-rbac vlag.
# 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
Roltoewijzing verwijderen
Geef roltoewijzingen weer met behulp van de
az role assignment listopdracht.# 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 tsvVerwijder de roltoewijzingen met behulp van de
az role assignment deleteopdracht.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Roldefinitie verwijderen
Verwijder een aangepaste roldefinitie met behulp van de az role definition delete opdracht.
az role definition delete --name "AKS Deployment Reader"
Resourcegroep en AKS-cluster verwijderen
Verwijder de resourcegroep (en het AKS-cluster dat deze bevat) met behulp van de az group delete opdracht.
# 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
Verwante onderwerpen
Zie de volgende artikelen voor meer informatie over AKS: