Dela via


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.

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.

  1. Hämta autentiseringsuppgifterna för klusteradministratören Get-AksHciCredential med kommandot :

    Get-AksHciCredential -name <name-of-your-cluster>
    
  2. Skapa ett namnområde i Kubernetes-klustret med kommandot kubectl create namespace . I följande exempel skapas ett namnområde med namnet dev:

    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.

  3. 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: ["*"]
    
  4. Skapa rollen med kommandot kubectl apply och ange filnamnet för YAML-manifestet:

    kubectl apply -f role-dev-namespace.yaml
    
  5. 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 som groupObjectId:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  6. 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 du groupObjectId med gruppobjekt-ID:t som skapades av az 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ätter groupObjectId du med användarens huvudnamn (UPN) i exemplet.

  7. 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:

  1. 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>
    
  2. 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.

  1. Logga in på Azure med det $AKSDEV_ID användarkonto som du angav som indata till az 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>
    
  2. 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
    
  3. kubectl get pods Använd nu kommandot för att visa poddar i dev 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

Nästa steg