Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: ✔️ AKS Automatic ✔️ AKS Standard
Den här artikeln visar hur du auktoriserar anrop till Kubernetes API i Azure Kubernetes Service (AKS) med hjälp av Microsoft Entra ID identiteter. Microsoft Entra ID auktorisering för Kubernetes API använder Azure RBAC-rolltilldelningar för att bevilja åtkomst till Kubernetes-resurser. För inbyggda Kubernetes-resurser tilldelar du en av de inbyggda AKS-rollerna (till exempel Azure Kubernetes Service RBAC Reader) på kluster- eller namnområdesnivå. För anpassade resurser (CRD) tilldelar du en anpassad roll med Azure ABAC-villkor som anger vilka CRD-grupper eller typer som tilldelningsmottagaren kan komma åt. De två rolltilldelningarna består: en ger åtkomst till Kubernetes-standardresurser och den andra beviljar villkorlig åtkomst till specifika anpassade resurser.
För de flesta produktionsarbetsbelastningar är AKS Automatic den rekommenderade produktionsklara standardinställningen för AKS. AKS Automatic-kluster är förkonfigurerade med Azure RBAC för Kubernetes-behörighetshantering, så att du kan fokusera på att tilldela rätt Microsoft Entra-rolltilldelningar till användare, grupper och tjänsthuvudnamn.
En konceptuell översikt över tillgängliga Alternativ för Kubernetes API-auktorisering i AKS finns i Begrepp för klusterauktorisering.
Note
När du använder integrerad autentisering mellan Microsoft Entra ID och AKS kan du använda Microsoft Entra-användare, grupper eller tjänstens huvudnamn som ämnen i Kubernetes rollbaserad åtkomstkontroll (Kubernetes RBAC). Genom att använda Microsoft Entra ID auktorisering behöver du inte separat hantera användaridentiteter och autentiseringsuppgifter för Kubernetes. Du måste dock fortfarande konfigurera och hantera Microsoft Entra ID rolltilldelningar och alla Kubernetes RBAC-bindningar separat.
Note
AKS Automatiska kluster är förkonfigurerade för att använda Azure RBAC för Kubernetes-auktorisering. Du behöver inte aktivera --enable-azure-rbac på AKS-automatiska kluster. I AKS Standard kan du aktivera eller inaktivera Azure RBAC baserat på klusterkonfigurationen.
Prerequisites
- Du behöver Azure CLI version 2.24.0 eller senare installerad och konfigurerad. Kör
az --versionför att hitta versionen. Om du behöver installera eller uppgradera, se Installera Azure CLI. - Du behöver
kubectl, med en lägsta version av 1.18.3. - Du behöver hanterad Microsoft Entra integrering aktiverat i klustret innan du kan lägga till Microsoft Entra ID auktorisering för Kubernetes-API:et. Om du behöver aktivera hanterad Microsoft Entra-integrering kan du läsa Använda Microsoft Entra-ID i AKS.
- Nya rolltilldelningar kan ta upp till fem minuter att sprida och uppdateras av auktoriseringsservern.
- Microsoft Entra ID auktorisering för Kubernetes-API:et kräver att den Microsoft Entra klientorganisation som konfigurerats för autentisering är samma som klientorganisationen för prenumerationen som innehåller AKS-klustret.
Beteende för AKS-klusterläge
| Klusterläge | Azure RBAC för Kubernetes-auktorisering |
|---|---|
| AKS Automatisk | Förkonfigurerad (aktiverad som standard) |
| AKS Standard | Valfritt (aktivera med --enable-azure-rbac) |
Skapa ett nytt AKS-kluster med hanterad Microsoft Entra integrering och Microsoft Entra ID auktorisering
AKS Automatic (rekommenderas för produktionsarbetsbelastningar)
För nya produktionsarbetsbelastningar använder du AKS Automatic. Azure RBAC för Kubernetes-auktorisering är förkonfigurerat i AKS Automatiska kluster.
Skapa ett AKS-automatiskt kluster genom att följa Skapa ett Azure Kubernetes Service (AKS) automatiskt kluster.
Valfritt: kontrollera att Azure RBAC för Kubernetes-auktorisering är aktiverat i klustret med hjälp av
az aks showkommandot .# 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
Skapa en Azure resursgrupp med kommandot
az group create.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATIONSkapa ett AKS Standard-kluster med hanterad Microsoft Entra integrering och Microsoft Entra ID auktorisering med kommandot
az aks create.export CLUSTER_NAME=<cluster-name> az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-aad \ --enable-azure-rbac \ --generate-ssh-keysDitt resultat ska likna följande exempelresultat:
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
Aktivera Microsoft Entra ID auktorisering i ett befintligt AKS-kluster
För befintliga AKS Standard-kluster aktiverar du Microsoft Entra ID-auktorisering för Kubernetes-API:et med kommandot az aks update och flaggan --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 Automatiska kluster har redan Azure RBAC för Kubernetes-auktorisering förkonfigurerad. Du behöver inte köra --enable-azure-rbac för AKS Automatic.
Inbyggda AKS-roller
AKS tillhandahåller följande inbyggda roller:
| Befattning | Description |
|---|---|
| RBAC-läsare för Azure Kubernetes Service | Tillåter läsåtkomst för att se de flesta objekt i en namnrymd. Det tillåter inte visning av roller eller rollbindningar. Den här rollen tillåter inte visning Secretseftersom läsning av innehållet i Hemligheter ger åtkomst till ServiceAccount-autentiseringsuppgifter i namnområdet, vilket skulle tillåta API-åtkomst som alla ServiceAccount i namnområdet (en form av eskalering av privilegier). |
| Azure Kubernetes Service RBAC-skribent | Tillåter läs-/skrivåtkomst till de flesta objekt i ett namnområde. Den här rollen tillåter inte visning eller ändring av roller eller rollbindningar. Den här rollen tillåter dock åtkomst till Secrets och körning av poddar som alla ServiceAccount i namnområdet, så att den kan användas för att få API-åtkomstnivåerna för alla ServiceAccount i namnområdet. |
| RBAC-administratör för Azure Kubernetes Service | Tillåter administratörsåtkomst, avsedd att beviljas inom ett namnområde. Tillåter läs-/skrivåtkomst till de flesta resurser i ett namnområde (eller klusteromfång), inklusive möjligheten att skapa roller och rollbindningar i namnområdet. Den här rollen tillåter inte skrivåtkomst till resurskvoten eller till själva namnområdet. |
| RBAC-klusteradministratör för Azure Kubernetes Service | Tillåter superanvändaråtkomst för att utföra alla åtgärder på alla resurser. Den ger fullständig kontroll över varje resurs i klustret och i alla namnområden. |
Skapa rolltilldelningar för klusteråtkomst
Hämta ditt AKS-resurs-ID med hjälp av
az aks showkommandot .# 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)Skapa en rolltilldelning med kommandot
az role assignment create.<AAD-ENTITY-ID>kan vara ett användarnamn eller klient-ID för en tjänstprincipal. I följande exempel skapas en rolltilldelning för rollen Azure Kubernetes Service RBAC-administratör.# 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
Du kan skapa rolltilldelningarna Azure Kubernetes Service RBAC Reader och Azure Kubernetes Service RBAC Writer som är begränsade till ett specifikt namnområde i klustret med hjälp av
az role assignment createkommandot och ange omfånget till önskat namnområde.az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
Skapa definitioner för anpassade roller
För inbyggda Kubernetes-resurser refererar anpassade rolldefinitioner till motsvarande API-gruppåtgärd under Microsoft.ContainerService/managedClusters/. I följande exempel kan en användare bara läsa distributioner och inget annat. En fullständig lista över möjliga åtgärder finns i Microsoft.ContainerService-åtgärder.
För anpassade resurser måste den anpassade rollen bevilja den tillämpliga anpassade resursdataåtgärden, till exempel Microsoft.ContainerService/managedClusters/customresources/read. Enbart en anpassad roll filtrerar inte åtkomsten efter en crd-grupp (anpassad resursdefinition) eller typ. Om du vill tillämpa filtreringen lägger du till ett Azure ABAC-villkor i rolltilldelningen. Den fullständiga proceduren finns i Begränsa åtkomst till anpassade resurser med hjälp av ABAC-villkor.
Om du vill skapa egna anpassade rolldefinitioner kopierar du följande fil, ersätter
<YOUR-SUBSCRIPTION-ID>med ditt eget prenumerations-ID och sparar den sedan somdeploy-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>" ] }Skapa rolldefinitionen
az role definition createmed kommandot och ange--role-definitiontill dendeploy-view.jsonfil som du skapade i föregående steg.az role definition create --role-definition @deploy-view.jsonTilldela rolldefinitionen till en användare eller annan identitet med kommandot
az role assignment create.# 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
Begränsa anpassad resursåtkomst med hjälp av ABAC-villkor (förhandsversion)
Viktigt!
AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och frivillig registrering. Förhandsversioner tillhandahålls "i befintligt skick" och "i mån av tillgång," och de är undantagna från servicenivåavtal och begränsad garanti. AKS-förhandsversioner stöds delvis av kundsupport efter bästa förmåga. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:
Med ABAC-villkor kan du filtrera Microsoft Entra ID rolltilldelningar till specifika grupper och typer av anpassade resurser (CRD) – centralt, från Microsoft Entra ID, utan att skriva RBAC Role och RoleBinding manifest per kluster. Bakgrund om Azure ABAC finns i Vad är Azure rolltilldelningsvillkor?
När ABAC-villkor ska användas
Använd den här funktionen när du vill:
- Begränsa vilka CRD-grupper eller typer som en tilldelare kan lista eller hämta.
- Tillämpa åtkomstgränser för anpassade resurser centralt från Microsoft Entra-ID utan att hantera Kubernetes RBAC
RoleochRoleBindingobjekt i varje kluster. - Skilja mellan CRD:erna som publicerats av olika operatörer (till exempel tillåt
secrets-store.csi.x-k8s.iomedan du blockerarsecurity.istio.io).
Tillgängliga villkorsattribut
Följande begärandeattribut är tillgängliga när du skapar villkor för Kubernetes API i ett AKS-kluster:
| Attribute | Description |
|---|---|
Microsoft.ContainerService/managedClusters/customResources:group |
API-gruppen för den anpassade resurs som används (till exempel secrets-store.csi.x-k8s.io). |
Microsoft.ContainerService/managedClusters/customResources:kind |
Den typ av anpassad resurs som används (till exempel secretproviderclasses). |
Lägga till ett ABAC-villkor i en rolltilldelning
I följande exempel skapas en anpassad roll för AKS CRD-läsare som ger läsbehörighet till anpassade resurser. Sedan tilldelas rollen med ett villkor som endast tillåter åtkomst till secretproviderclasses i gruppen secrets-store.csi.x-k8s.io (den CRD som används av Azure Key Vault-providern för Secrets Store CSI Driver).
Spara följande rolldefinition i en fil med namnet
crd-reader.jsonoch ersätt<YOUR-SUBSCRIPTION-ID>med ditt eget prenumerations-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>" ] }Skapa rolldefinitionen
az role definition createmed kommandot .az role definition create --role-definition @crd-reader.jsonSpara följande villkor i en fil med namnet
abac-condition.txt. Villkoret tillåter icke-anpassade resursläsningar att passera oförändrade och begränsar anpassade resursläsningar till en viss grupp och typ.( ( !(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' ) )Skapa rolltilldelningen med villkoret
az role assignment createmed kommandot .# 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"
Du kan också lägga till ett villkor via Azure-portalen. På sidan Lägg till rolltilldelning väljer du fliken Villkor , sedan Lägg till villkor och använder den visuella redigeraren för att skapa uttrycket.
Verifiera villkoret
När rolltilldelningen har spridits (upp till fem minuter) loggar du in som den tilldelade och bekräftar att de kan läsa den tillåtna CRD:n men inte andra CRD:er.
Hämta autentiseringsuppgifterna för
az aks get-credentialsklustret med kommandot .# 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_NAMELista
secretproviderclassesfrån gruppensecrets-store.csi.x-k8s.io, vilket villkoret tillåter. Kommandot ska lyckas och returnera antingen befintliga resurser eller en tom lista (eller ett fel som inte hittades om CRD inte är installerat i klustret).kubectl get secretproviderclasses.secrets-store.csi.x-k8s.io --all-namespacesLista
authorizationpoliciesfrån Istio-gruppensecurity.istio.io, som blockeras av villkoret. Kommandot bör misslyckas med feletForbiddenfrån Microsoft Entra ID:s webhook för auktorisering (förutsatt att Istio CRD är installerat i klustret; annars returnerarkubectlett fel om att resursen inte hittades innan API-servern når webhooken för auktorisering).kubectl get authorizationpolicies.security.istio.io --all-namespaces
Rensa resurser
Inaktivera Microsoft Entra ID auktorisering
Ta bort Microsoft Entra ID-auktoriseringen med kommandot az aks update och flaggan --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
Ta bort rolltilldelning
Visa en lista över rolltilldelningar med kommandot
az role assignment list.# 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 tsvTa bort rolltilldelningarna med kommandot
az role assignment delete.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Ta bort rolldefinition
Ta bort en anpassad rolldefinition med kommandot az role definition delete .
az role definition delete --name "AKS Deployment Reader"
Ta bort resursgrupp och AKS-kluster
Ta bort resursgruppen (och aks-klustret som den innehåller) med kommandot az group delete .
# 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
Relaterat innehåll
Mer information om AKS finns i följande artiklar: