Styra åtkomst med Microsoft Entra ID och Kubernetes RBAC
Gäller för: AKS på Azure Stack HCI 23H2
Du kan konfigurera Azure Kubernetes Service (AKS) för att använda Microsoft Entra-ID för användarautentisering. I den här konfigurationen loggar du in på ett Kubernetes-kluster med en Microsoft Entra-autentiseringstoken. När du har autentiserats kan du använda den inbyggda rollbaserade Åtkomstkontrollen för Kubernetes (Kubernetes RBAC) för att hantera åtkomst till namnområden och klusterresurser baserat på en användares identitets- eller gruppmedlemskap.
Den här artikeln beskriver hur du styr åtkomsten med Kubernetes RBAC i ett Kubernetes-kluster baserat på Microsoft Entra-gruppmedlemskap i AKS. Du skapar en demogrupp och användare i Microsoft Entra-ID. Sedan skapar du roller och rollbindningar i klustret för att ge lämpliga behörigheter för att skapa och visa resurser.
Förutsättningar
Innan du konfigurerar Kubernetes RBAC med Microsoft Entra-ID måste du ha följande förutsättningar:
- Ett AKS aktiverat av Azure Arc-kluster. Om du behöver konfigurera klustret kan du läsa anvisningarna för att använda Azure-portalen eller Azure CLI.
- Azure CLI har installerats och konfigurerats. Om du behöver installera CLI eller uppgradera kan du läsa Installera Azure CLI.
- Azure CLI och connectedk8s-tillägget. Kommandoradsgränssnitt för Azure (CLI) är en uppsättning kommandon som används för att skapa och hantera Azure-resurser. Om du vill kontrollera om du har Azure CLI öppnar du ett kommandoradsverktyg och skriver:
az -v
. Installera även tillägget connectedk8s för att öppna en kanal till ditt Kubernetes-kluster. Installationsinstruktioner finns i Installera Azure CLI. - Kubectl. Med kubernetes-kommandoradsverktyget kubectl kan du köra kommandon som riktar sig mot dina Kubernetes-kluster. Om du vill kontrollera om du har installerat kubectl öppnar du ett kommandoradsverktyg och skriver:
kubectl version --client
. Kontrollera att kubectl-klientversionen är minstv1.24.0
. Installationsinstruktioner finns i kubectl. - Du kan komma åt kubernetes-klustret med de angivna behörigheterna antingen med direktläge eller proxyläge.
- För att få åtkomst till Kubernetes-klustret direkt med kommandot
az aksarc get-credentials
behöver du Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, som ingår i behörigheterna för Azure Kubernetes Service Arc-klusteranvändare - För att komma åt Kubernetes-klustret var som helst med ett proxyläge med hjälp av
az connectedk8s proxy
kommandot behöver du behörigheten Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, som ingår i behörigheten Azure Arc-aktiverad Kubernetes-klusteranvändare . Under tiden måste du kontrollera att agenterna och datorn som utför registreringsprocessen uppfyller nätverkskraven i Azure Arc-aktiverade Kubernetes-nätverkskrav.
- För att få åtkomst till Kubernetes-klustret direkt med kommandot
Valfria första steg
Om du inte redan har en Microsoft Entra-grupp som innehåller medlemmar kanske du vill skapa en grupp och lägga till några medlemmar, så att du kan följa anvisningarna i den här artikeln.
För att demonstrera arbetet med Microsoft Entra ID och Kubernetes RBAC kan du skapa en Microsoft Entra-grupp för programutvecklare som kan användas för att visa hur Kubernetes RBAC och Microsoft Entra ID styr åtkomsten till klusterresurser. I produktionsmiljöer kan du använda befintliga användare och grupper i en Microsoft Entra-klientorganisation.
Skapa en demogrupp i Microsoft Entra-ID
Skapa först gruppen i Microsoft Entra-ID i din klientorganisation för programutvecklare med hjälp av az ad group create
kommandot . I följande exempel uppmanas du att logga in på din Azure-klientorganisation och sedan skapa en grupp med namnet appdev:
az login
az ad group create --display-name appdev --mail-nickname appdev
Lägga till användare i din grupp
När exempelgruppen har skapats i Microsoft Entra-ID för programutvecklare lägger du till en användare i appdev
gruppen. Du använder det här användarkontot för att logga in på AKS-klustret och testa Kubernetes RBAC-integreringen.
Lägg till en användare i appdev-gruppen som skapades i föregående avsnitt med kommandot az ad group member add
. Om du avslutar sessionen återansluter du till Azure med hjälp av az login
.
$AKSDEV_ID = az ad user create --display-name <name> --password <strongpassword> --user-principal-name <name>@contoso.onmicrosoft.com
az ad group member add --group appdev --member-id $AKSDEV_ID
Skapa en anpassad Kubernetes RBAC-rollbindning på AKS-klusterresursen för Microsoft Entra-gruppen
Konfigurera AKS-klustret så att din Microsoft Entra-grupp kan komma åt klustret. Om du vill lägga till en grupp och användare kan du läsa Skapa demogrupper i Microsoft Entra-ID.
az aksarc get-credentials
Använd kommandot för att hämta autentiseringsuppgifterna för klusteradministratören:az aksarc get-credentials --name "$aks_cluster_name" --resource-group "$resource_group_name" --admin
Skapa ett namnområde i Kubernetes-klustret med kommandot
kubectl create namespace
. I följande exempel skapas ett namnområde med namnetdev
:kubectl create namespace dev
I Kubernetes definierar Roller de behörigheter som ska beviljas och Rollbindningar tillämpar behörigheterna för önskade användare eller grupper. Dessa tilldelningar kan tillämpas på ett givet namnområde eller i ett helt kluster. Mer information finns i Använda Kubernetes RBAC-auktorisering.
Skapa en roll för dev-namnområdet . Den här rollen ger fullständig behörighet till namnområdet. I produktionsmiljöer kanske du vill ange mer detaljerade behörigheter för olika användare eller grupper.
Skapa en fil med namnet role-dev-namespace.yaml och kopiera/klistra in följande YAML-manifest:
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-full-access namespace: dev rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"] - apiGroups: ["batch"] resources: - jobs - cronjobs verbs: ["*"]
Skapa rollen med kommandot
kubectl apply
och ange filnamnet för YAML-manifestet:kubectl apply -f role-dev-namespace.yaml
Hämta resurs-ID:t för appdev-gruppen med kommandot
az ad group show
. Den här gruppen anges som ämne för ett RoleBinding i nästa steg:az ad group show --group appdev --query objectId -o tsv
Kommandot
az ad group show
returnerar det värde som du använder somgroupObjectId
:38E5FA30-XXXX-4895-9A00-050712E3673A
Skapa en fil med namnet rolebinding-dev-namespace.yaml och kopiera/klistra in följande YAML-manifest. Du upprättar rollbindningen som gör det möjligt för appdev-gruppen att använda
role-dev-namespace
rollen för namnområdesåtkomst. På den sista raden ersätter dugroupObjectId
med gruppobjekt-ID:t som skapades avaz ad group show
kommandot:kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-access namespace: dev roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: dev-user-full-access subjects: - kind: Group namespace: dev name: groupObjectId
Dricks
Om du vill skapa Rollbindning för en enskild användare anger
kind: User
och ersättergroupObjectId
du med användarens huvudnamn (UPN) i exemplet.Skapa RoleBinding med kommandot
kubectl apply
och ange filnamnet för DITT YAML-manifest:kubectl apply -f rolebinding-dev-namespace.yaml
rolebinding.rbac.authorization.k8s.io/dev-user-access created
Använda inbyggda Kubernetes RBAC-roller för din AKS-klusterresurs
Kubernetes tillhandahåller också inbyggda användarinriktade roller. Dessa inbyggda roller omfattar:
- Superanvändarroller (klusteradministratör)
- Roller som är avsedda att beviljas klusteromfattande med hjälp av ClusterRoleBindings
- Roller som är avsedda att beviljas inom vissa namnområden med hjälp av RoleBindings (administratör, redigera, visa)
Mer information om inbyggda Kubernetes RBAC-roller finns i Användarinriktade Kubernetes RBAC-roller.
Användarriktade roller
Standardklusterroll | StandardklusterRoleBinding | beskrivning |
---|---|---|
cluster-admin | system:masters group | Tillåter superanvändaråtkomst för att utföra alla åtgärder på alla resurser. När den används i en ClusterRoleBinding ger den här rollen fullständig kontroll över varje resurs i klustret och i alla namnområden. När det används i ett RoleBinding ger det fullständig kontroll över varje resurs i rollbindningens namnområde, inklusive själva namnområdet. |
administratör | Ingen | Tillåter administratörsåtkomst, avsedd att beviljas inom ett namnområde med hjälp av en rollbindning. Om det används i en rollbindning tillåter du läs-/skrivåtkomst till de flesta resurser i ett namnområde, 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. Den här rollen tillåter inte heller skrivåtkomst till slutpunkter i kluster som skapats med Kubernetes v1.22+. Mer information finns i Skriva åtkomst för slutpunkter. |
Redigera… | Ingen | 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 hemligheter och poddar som alla ServiceAccount i namnområdet, så den kan användas för att få API-åtkomstnivåerna för alla ServiceAccount i namnområdet. Den här rollen tillåter inte heller skrivåtkomst till slutpunkter i kluster som skapats med Kubernetes v1.22+. Mer information finns i Skriva åtkomst för slutpunkter. |
vy | Ingen | 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 av hemligheter 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). |
Använda en inbyggd Kubernetes RBAC-roll med Microsoft Entra-ID
Följ dessa steg om du vill använda en inbyggd Kubernetes RBAC-roll med Microsoft Entra-ID:
Använd den inbyggda
view
Kubernetes RBAC-rollen i din Microsoft Entra-grupp:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
Använd den inbyggda
view
Kubernetes RBAC-rollen för var och en av dina Microsoft Entra-användare:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
Få åtkomst till Kubernetes-klustret
Nu kan du komma åt kubernetes-klustret med de angivna behörigheterna med direktläge eller proxyläge.
Få åtkomst till klustret med kubectl (direktläge)
För att få åtkomst till Kubernetes-klustret med de angivna behörigheterna behöver Kubernetes-operatorn Microsoft Entra kubeconfig, som du kan få med kommandot az aksarc get-credentials
. Det här kommandot ger åtkomst till den administratörsbaserade kubeconfig samt en användarbaserad kubeconfig. Den administratörsbaserade kubeconfig-filen innehåller hemligheter och bör lagras och roteras regelbundet på ett säkert sätt. Å andra sidan innehåller det användarbaserade Microsoft Entra ID kubeconfig inte hemligheter och kan distribueras till användare som ansluter från sina klientdatorer.
Om du vill köra det här Azure CLI-kommandot behöver du microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, som ingår i rollbehörigheterna för Azure Kubernetes Service Arc-klusteranvändare :
az aksarc get-credentials -g $resource_group_name -n $aks_cluster_name --file <file-name>
Nu kan du använda kubectl för att hantera klustret. Du kan till exempel lista noderna i klustret med hjälp av kubectl get nodes
. Första gången du kör den måste du logga in, som du ser i följande exempel:
kubectl get nodes
Få åtkomst till klustret från en klientenhet (proxyläge)
För att komma åt Kubernetes-klustret var som helst med ett proxyläge med kommandot az connectedk8s proxy
behöver du behörigheten Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action, som ingår i behörigheten Azure Arc-aktiverade Kubernetes-klusteranvändare .
Kör följande steg på en annan klientenhet:
Logga in med Microsoft Entra-autentisering.
Hämta den klusteranslutning
kubeconfig
som behövs för att kommunicera med klustret var som helst (även utanför brandväggen som omger klustret):az connectedk8s proxy -n $aks_cluster_name -g $resource_group_name
Kommentar
Det här kommandot öppnar proxyn och blockerar det aktuella gränssnittet.
I en annan shell-session använder du
kubectl
för att skicka begäranden till klustret:kubectl get pods -A
Nu bör du se ett svar från klustret som innehåller listan över alla poddar under default
namnområdet.
Mer information finns i Komma åt klustret från en klientenhet
Skapa och visa klusterresurser utanför det tilldelade namnområdet
Om du vill försöka visa poddar utanför dev-namnområdet använder du kubectl get pods
kommandot med --all-namespaces
flaggan:
kubectl get pods --all-namespaces
Användarens gruppmedlemskap har ingen Kubernetes-roll som tillåter den här åtgärden. Utan behörighet genererar kommandot ett fel:
Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope