Använda rollbaserad åtkomstkontroll i Azure för Kubernetes-auktorisering
Den här artikeln beskriver hur du använder Azure RBAC för Kubernetes-auktorisering, vilket möjliggör enhetlig hantering och åtkomstkontroll för Azure-resurser, AKS- och Kubernetes-resurser. Mer information finns i Azure RBAC för Kubernetes-auktorisering.
Kommentar
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). Med den här funktionen behöver du inte separat hantera användaridentiteter och autentiseringsuppgifter för Kubernetes. Du måste dock fortfarande konfigurera och hantera Azure RBAC och Kubernetes RBAC separat.
Innan du börjar
- Du behöver Azure CLI version 2.24.0 eller senare installerad och konfigurerad. Kör
az --version
för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa 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 Azure RBAC för Kubernetes-auktorisering. Om du behöver aktivera hanterad Microsoft Entra-integrering kan du läsa Använda Microsoft Entra-ID i AKS.
- Om du har CRD:er och skapar anpassade rolldefinitioner är det enda sättet att täcka CRD:er i dag att använda
Microsoft.ContainerService/managedClusters/*/read
. För de återstående objekten kan du använda specifika API-grupper, till exempelMicrosoft.ContainerService/apps/deployments/read
. - Nya rolltilldelningar kan ta upp till fem minuter att sprida och uppdateras av auktoriseringsservern.
- Azure RBAC för Kubernetes-auktorisering kräver att Den Microsoft Entra-klient som konfigurerats för autentisering är samma som klientorganisationen för den prenumeration som innehåller ditt AKS-kluster.
Skapa ett nytt AKS-kluster med hanterad Microsoft Entra-integrering och Azure RBAC för Kubernetes-auktorisering
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 $LOCATION
Skapa ett AKS-kluster med hanterad Microsoft Entra-integrering och Azure RBAC för Kubernetes Authorization 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-keys
Dina utdata bör se ut ungefär som följande exempelutdata:
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
Aktivera Azure RBAC i ett befintligt AKS-kluster
Aktivera Azure RBAC för Kubernetes-auktorisering i ett befintligt AKS-kluster med kommandot
az aks update
med--enable-azure-rbac
flaggan .az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
Inaktivera Azure RBAC för Kubernetes-auktorisering från ett AKS-kluster
Ta bort Azure RBAC för Kubernetes-auktorisering från ett befintligt AKS-kluster med kommandot
az aks update
med--disable-azure-rbac
flaggan .az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
Inbyggda AKS-roller
AKS tillhandahåller följande inbyggda roller:
Roll | beskrivning |
---|---|
RBAC-läsare för Azure Kubernetes Service | Tillåter skrivskyddad åtkomst för att se de flesta objekt i ett namnområde. Det tillåter inte visning av roller eller rollbindningar. Den här rollen tillåter inte visning Secrets eftersom 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 Writer | 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 show
kommandot .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 ett huvudnamn för tjänsten. I följande exempel skapas en rolltilldelning för RBAC-administratörsrollen för Azure Kubernetes Service.az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Kommentar
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 create
kommandot 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öljande exempel på en anpassad rolldefinition gör att en användare bara kan läsa distributioner och inget annat. En fullständig lista över möjliga åtgärder finns i Microsoft.ContainerService-åtgärder.
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 create
med kommandot och ange--role-definition
till dendeploy-view.json
fil som du skapade i föregående steg.az role definition create --role-definition @deploy-view.json
Tilldela rolldefinitionen till en användare eller annan identitet med kommandot
az role assignment create
.az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Använda Azure RBAC för Kubernetes-auktorisering med kubectl
Kontrollera att du har den inbyggda rollen Azure Kubernetes Service Cluster User och hämta sedan kubeconfig för ditt AKS-kluster med hjälp av
az aks get-credentials
kommandot .az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Du kan nu använda
kubectl
för att hantera klustret. Du kan till exempel lista noderna i klustret med hjälp avkubectl get nodes
.kubectl get nodes
Exempel på utdata>
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
Använda Azure RBAC för Kubernetes-auktorisering med kubelogin
AKS skapade kubelogin
plugin-programmet för att avblockera scenarier som icke-interaktiva inloggningar, äldre kubectl
versioner eller användning av enkel inloggning i flera kluster utan att behöva logga in på ett nytt kluster.
Använd plugin-programmet
kubelogin
genom att köra följande kommando:export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
Du kan nu använda
kubectl
för att hantera klustret. Du kan till exempel lista noderna i klustret med hjälp avkubectl get nodes
.kubectl get nodes
Exempel på utdata>
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
Rensa resurser
Ta bort rolltilldelning
Visa en lista över rolltilldelningar med kommandot
az role assignment list
.az role assignment list --scope $AKS_ID --query [].id --output tsv
Ta bort rolltilldelningar med kommandot
az role assignment delete
.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Ta bort rolldefinition
Ta bort den anpassade rolldefinitionen
az role definition delete
med kommandot .az role definition delete --name "AKS Deployment Reader"
Ta bort resursgrupp och AKS-kluster
Ta bort resursgruppen och AKS-klustret med kommandot
az group delete
.az group delete --name $RESOURCE_GROUP --yes --no-wait
Nästa steg
Mer information om AKS-autentisering, auktorisering, Kubernetes RBAC och Azure RBAC finns i:
Azure Kubernetes Service