Styra åtkomst med Microsoft Entra ID och Kubernetes RBAC för Windows Server
Gäller för: AKS på Azure Stack HCI 22H2, AKS på Windows Server
Azure Kubernetes Service (AKS) kan konfigureras 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 åtkomst med Kubernetes RBAC i ett Kubernetes-kluster baserat på Microsoft Entra-gruppmedlemskap i AKS Arc. 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 behöver du följande förutsättningar:
- Ett Kubernetes-kluster som skapats i AKS Arc. Om du behöver konfigurera klustret kan du läsa anvisningarna för att använda Windows Admin Center eller PowerShell för att distribuera AKS.
- Azure Arc-anslutning. Du måste ha en Azure Arc-anslutning till ditt Kubernetes-kluster. Information om hur du aktiverar Azure Arc finns i Ansluta en Azure Kubernetes Service på Azure Stack HCI-kluster till Azure Arc-aktiverade Kubernetes.
- Du behöver åtkomst till följande kommandoradsverktyg:
- Azure CLI och connectedk8s-tillägget. 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 det här kubernetes-kommandoradsverktyget kan du köra kommandon som riktar sig till dina Kubernetes-kluster. Om du vill kontrollera om du har installerat kubectl öppnar du en kommandotolk och skriver:
kubectl version --client
. Kontrollera att kubectl-klientversionen är minst version v1.24.0. Installationsinstruktioner finns i kubectl. - PowerShell och AksHci PowerShell-modulen. PowerShell är en plattformsoberoende lösning för uppgiftsautomatisering som består av ett kommandoradsgränssnitt, ett skriptspråk och ett konfigurationshanteringsramverk. Om du har installerat AKS Arc har du åtkomst till AksHci PowerShell-modulen.
- 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 . Under tiden måste du kontrollera att agenterna och datorn som utför registreringsprocessen uppfyller nätverkskraven i Azure Arc-aktiverade Kubernetes-nätverkskrav.
- Azure CLI och connectedk8s-tillägget. 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:
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.
Hämta autentiseringsuppgifterna för klusteradministratören
Get-AksHciCredential
med kommandot :Get-AksHciCredential -name <name-of-your-cluster>
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 RoleBinding 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>
Arbeta med klusterresurser med hjälp av Microsoft Entra-ID:t
Testa nu de förväntade behörigheterna när du skapar och hanterar resurser i ett Kubernetes-kluster. I de här exemplen schemalägger och visar du poddar i användarens tilldelade namnområde. Sedan försöker du schemalägga och visa poddar utanför det tilldelade namnområdet.
Logga in på Azure med det
$AKSDEV_ID
användarkonto som du angav som indata tillaz ad group member add
kommandot.az connectedk8s proxy
Kör kommandot för att öppna en kanal till klustret:az connectedk8s proxy -n <cluster-name> -g <resource-group>
När proxykanalen har upprättats öppnar du en annan session och schemalägger en NGINX-podd med kommandot
kubectl run
i dev-namnområdet :kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
När NGINX har schemalagts bör du se följande utdata:
pod/nginx-dev created
kubectl get pods
Använd nu kommandot för att visa poddar idev
namnområdet:kubectl get pods --namespace dev
När NGINX körs bör du se följande utdata:
NAME READY STATUS RESTARTS AGE nginx-dev 1/1 Running 0 4m
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