Dela via


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 minst v1.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.

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

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

    kubectl apply -f role-dev-namespace.yaml
    
  3. 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
    
  4. 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 Rollbindning för en enskild användare anger kind: User och ersätter groupObjectId du med användarens huvudnamn (UPN) i exemplet.

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

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:

  1. Logga in med Microsoft Entra-autentisering.

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

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

Nästa steg