Dela via


Använda Azure RBAC i Azure Arc-aktiverade Kubernetes-kluster

Du kan använda Microsoft Entra-ID och rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att kontrollera auktoriseringskontroller i ditt Azure Arc-aktiverade Kubernetes-kluster. Med Azure-rolltilldelningar kan du detaljstyra vilka användare som kan läsa, skriva och ta bort Kubernetes-objekt som distribution, podd och tjänst. Kubernetes ClusterRoleBinding- och RoleBinding-objekttyper hjälper till att definiera auktorisering i Kubernetes internt.

En konceptuell översikt över den här funktionen finns i Azure RBAC på Azure Arc-aktiverade Kubernetes.

Förutsättningar

  • Installera eller uppgradera Azure CLI till den senaste versionen.

  • Installera den senaste versionen av connectedk8s Azure CLI-tillägget:

    az extension add --name connectedk8s
    

    connectedk8s Om tillägget redan är installerat kan du uppdatera det till den senaste versionen med hjälp av följande kommando:

    az extension update --name connectedk8s
    
  • Anslut ett befintligt Azure Arc-:aktiverat Kubernetes-kluster:

Kommentar

Azure RBAC stöds inte för Red Hat OpenShift eller hanterade Kubernetes-erbjudanden där användaråtkomsten till API-servern är begränsad (till exempel Amazon Elastic Kubernetes Service (EKS) eller Google Kubernetes Engine (GKE)).

Azure RBAC stöder för närvarande inte Kubernetes-kluster som arbetar med Arm64-arkitektur. För dessa kluster använder du Kubernetes RBAC för att hantera åtkomstkontroll.

För AKS-kluster (Azure Kubernetes Service) är den här funktionen tillgänglig internt och kräver inte att AKS-klustret är anslutet till Azure Arc.

För Azure Kubernetes Service-kluster (AKS) som aktiveras av Azure Arc på Azure Local, version 23H2, stöds Azure RBAC för närvarande endast om det är aktiverat när klustren skapas. Information om hur du skapar ett AKS-kluster som har aktiverats av Azure Arc med Azure RBAC aktiverat finns i Använda Azure RBAC för Kubernetes-auktorisering. Azure RBAC stöds inte för Azure Local version 22H2.

Aktivera Azure RBAC i klustret

  1. Hämta klustrets MSI-identitet genom att köra följande kommando:

    az connectedk8s show -g <resource-group> -n <connected-cluster-name>
    
  2. Hämta ID (identity.principalId) från utdata och kör följande kommando för att tilldela rollen CheckAccess Reader för ansluten klusterhanterad identitet till klustrets MSI.

    az role assignment create --role "Connected Cluster Managed Identity CheckAccess Reader" --assignee "<Cluster MSI ID>" --scope <cluster ARM ID>
    
  3. Aktivera rollbaserad åtkomstkontroll i Azure (RBAC) i ditt Azure Arc-aktiverade Kubernetes-kluster genom att köra följande kommando:

    az connectedk8s enable-features -n <clusterName> -g <resourceGroupName> --features azure-rbac
    

    Kommentar

    Innan du kör enable-features kommandot kontrollerar du att kubeconfig filen på datorn pekar på klustret där du vill aktivera Azure RBAC.

    Använd --skip-azure-rbac-list med det här kommandot för en kommaavgränsad lista över användarnamn, e-postmeddelanden och OpenID-anslutningar som genomgår auktoriseringskontroller med kubernetes native ClusterRoleBinding och RoleBinding objekt i stället för Azure RBAC.

Följ sedan stegen i lämpligt avsnitt, beroende på om du använder ett generiskt kluster där ingen samordnare körs på specifikationen apiserver eller ett kluster som skapats med hjälp av Cluster API:t.

Generiskt kluster där ingen avstämning körs på specifikationen apiserver

  1. SSH till varje huvudnod i klustret och slutför sedan följande steg:

    Om din kube-apiserver är en statisk podd:

    1. Hemligheten azure-arc-guard-manifestskube-system i namnområdet innehåller två filer: guard-authn-webhook.yaml och guard-authz-webhook.yaml. Kopiera dessa filer till /etc/guard nodens katalog.

      sudo mkdir -p /etc/guard
      kubectl get secrets azure-arc-guard-manifests -n kube-system -o json | jq -r '.data."guard-authn-webhook.yaml"' | base64 -d > /etc/guard/guard-authn-webhook.yaml
      kubectl get secrets azure-arc-guard-manifests -n kube-system -o json | jq -r '.data."guard-authz-webhook.yaml"' | base64 -d > /etc/guard/guard-authz-webhook.yaml
      
    2. Öppna manifestet apiserver i redigeringsläge:

      sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
      
    3. Lägg till följande specifikation under volumes:

      - hostPath:
          path: /etc/guard
          type: Directory
        name: azure-rbac
      
    4. Lägg till följande specifikation under volumeMounts:

      - mountPath: /etc/guard
        name: azure-rbac
        readOnly: true
      

    Om din kube-apiserver inte är en statisk podd:

    1. Öppna manifestet apiserver i redigeringsläge:

      sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
      
    2. Lägg till följande specifikation under volumes:

      - name: azure-rbac
        secret:
          secretName: azure-arc-guard-manifests
      
    3. Lägg till följande specifikation under volumeMounts:

      - mountPath: /etc/guard
        name: azure-rbac
        readOnly: true
      
  2. Lägg till följande apiserver argument:

    - --authentication-token-webhook-config-file=/etc/guard/guard-authn-webhook.yaml
    - --authentication-token-webhook-cache-ttl=5m0s
    - --authorization-webhook-cache-authorized-ttl=5m0s
    - --authorization-webhook-config-file=/etc/guard/guard-authz-webhook.yaml
    - --authorization-webhook-version=v1
    - --authorization-mode=Node,RBAC,Webhook
    

    Ange följande apiserver argument:

    - --authentication-token-webhook-version=v1
    
  3. Spara och stäng redigeraren för att uppdatera apiserver podden.

Kluster som skapats med hjälp av kluster-API

  1. Kopiera skyddshemligheten som innehåller webhookskonfigurationsfiler för autentisering och auktorisering från arbetsbelastningsklustret till datorn:

    kubectl get secret azure-arc-guard-manifests -n kube-system -o yaml > azure-arc-guard-manifests.yaml
    
  2. Ändra fältet namespace i filen azure-arc-guard-manifests.yaml till namnområdet i hanteringsklustret där du använder de anpassade resurserna för att skapa arbetsbelastningskluster.

  3. Använd det här manifestet:

    kubectl apply -f azure-arc-guard-manifests.yaml
    
  4. Redigera objektet KubeadmControlPlane genom att köra kubectl edit kcp <clustername>-control-plane:

    1. Lägg till följande specifikation under files:

      - contentFrom:
          secret:
            key: guard-authn-webhook.yaml
            name: azure-arc-guard-manifests
        owner: root:root
        path: /etc/kubernetes/guard-authn-webhook.yaml
        permissions: "0644"
      - contentFrom:
          secret:
            key: guard-authz-webhook.yaml
            name: azure-arc-guard-manifests
        owner: root:root
        path: /etc/kubernetes/guard-authz-webhook.yaml
        permissions: "0644"
      
    2. Lägg till följande specifikation under apiServer>extraVolumes:

      - hostPath: /etc/kubernetes/guard-authn-webhook.yaml
        mountPath: /etc/guard/guard-authn-webhook.yaml
        name: guard-authn
        readOnly: true
      - hostPath: /etc/kubernetes/guard-authz-webhook.yaml
        mountPath: /etc/guard/guard-authz-webhook.yaml
        name: guard-authz
        readOnly: true
      
    3. Lägg till följande specifikation under apiServer>extraArgs:

      authentication-token-webhook-cache-ttl: 5m0s
      authentication-token-webhook-config-file: /etc/guard/guard-authn-webhook.yaml
      authentication-token-webhook-version: v1
      authorization-mode: Node,RBAC,Webhook
      authorization-webhook-cache-authorized-ttl: 5m0s
      authorization-webhook-config-file: /etc/guard/guard-authz-webhook.yaml
      authorization-webhook-version: v1
      
    4. Spara och stäng för att uppdatera objektet KubeadmControlPlane . Vänta tills ändringarna visas i arbetsbelastningsklustret.

Skapa rolltilldelningar för användare för åtkomst till klustret

Ägare av Den Azure Arc-aktiverade Kubernetes-resursen kan använda antingen inbyggda roller eller anpassade roller för att ge andra användare åtkomst till Kubernetes-klustret.

Inbyggda roller

Följande inbyggda roller ger åtkomst till att utföra vanliga uppgifter i Kubernetes-kluster. Dessa roller kan beviljas Microsoft Entra ID-användare, grupper eller tjänsthuvudnamn.

Roll beskrivning
Azure Arc Kubernetes Viewer Tillåter skrivskyddad åtkomst för att se de flesta objekt i ett namnområde. Den här rollen tillåter inte visning av hemligheter eftersom read behörighet för hemligheter skulle ge åtkomst till ServiceAccount autentiseringsuppgifter i namnområdet. Dessa autentiseringsuppgifter skulle i sin tur tillåta API-åtkomst via det ServiceAccount värdet (en form av behörighetseskalering).
Azure Arc Kubernetes 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 hemligheter och poddar som valfritt ServiceAccount värde i namnområdet, så den kan användas för att få API-åtkomstnivåerna för valfritt ServiceAccount värde i namnområdet.
Azure Arc Kubernetes-administratör Tillåter administratörsåtkomst. Den här rollen beviljas ofta inom ett namnområde via objektetRoleBinding. Om du använder den i RoleBindingtillåter den 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 dock inte skrivåtkomst till resurskvoten eller till själva namnområdet.
Azure Arc Kubernetes-klusteradministratör Tillåter möjligheten att utföra alla åtgärder på alla resurser inom det beviljade omfånget. När du använder den i ClusterRoleBindingger den fullständig kontroll över varje resurs i klustret och i alla namnområden. När du använder den i RoleBindingger den fullständig kontroll över varje resurs i rollbindningens namnområde, inklusive själva namnområdet.

Du kan skapa inbyggda rolltilldelningar som är begränsade till klustret med hjälp av antingen Azure-portalen eller Azure CLI. Endast Azure CLI kan dock användas för att skapa rolltilldelningar som är begränsade till namnområden.

Om du vill skapa rolltilldelningar som är begränsade till Det Azure Arc-aktiverade Kubernetes-klustret i Azure-portalen går du till klustret och väljer sedan Åtkomstkontroll (IAM) på tjänstmenyn.

Om du vill skapa rolltilldelningar med hjälp av Azure CLI använder du följande kommando:

az role assignment create --role "Azure Arc Kubernetes Cluster Admin" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID

AZURE-AD-ENTITY-ID kan vara ett användarnamn (till exempel testuser@mytenant.onmicrosoft.com) eller värdet för appId ett huvudnamn för tjänsten.

Om du vill skapa en rolltilldelning som är begränsad till ett specifikt namnområde i klustret ändrar du omfånget:

az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID/namespaces/<namespace-name>

Anpassade roller

Du kan välja att skapa en egen rolldefinition för användning i rolltilldelningar. Mer information finns i den fullständiga listan över dataåtgärder som du kan använda för att konstruera en rolldefinition.

I följande exempel visas en anpassad rolldefinition som gör att en användare kan läsa distributioner, men som inte ger någon annan åtkomst. Den anpassade rollen använder en av dataåtgärderna och låter dig visa alla distributioner i omfånget (kluster eller namnområde) där rolltilldelningen skapas.

{
    "Name": "Arc Deployment Viewer",
    "Description": "Lets you view all deployments in cluster/namespace.",
    "Actions": [],
    "NotActions": [],
    "DataActions": [
        "Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
    ],
    "NotDataActions": [],
    "assignableScopes": [
        "/subscriptions/<subscription-id>"
    ]
}

Om du vill använda den här rolldefinitionen kopierar du följande JSON-objekt till en fil med namnet custom-role.json. <subscription-id> Ersätt platshållaren med det faktiska prenumerations-ID:t. Slutför sedan följande steg:

  1. Skapa rolldefinitionen genom att köra följande kommando från mappen där du sparade custom-role.json:

    az role definition create --role-definition @custom-role.json
    
  2. Skapa en rolltilldelning för att tilldela den här anpassade rolldefinitionen:

    az role assignment create --role "Arc Deployment Viewer" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID/namespaces/<namespace-name>
    

Konfigurera kubectl med användarautentiseringsuppgifter

Det finns två sätt att hämta kubeconfig-filen som du behöver för att komma åt klustret:

  • Använd funktionen för klusteranslutning (az connectedk8s proxy) i Det Azure Arc-aktiverade Kubernetes-klustret.
  • Klusteradministratören kan dela kubeconfig-filen med varje användare.

Använda klusteranslutning

Kör följande kommando för att starta proxyprocessen:

az connectedk8s proxy -n <clusterName> -g <resourceGroupName>

När proxyprocessen har körts kan du öppna en annan flik i konsolen för att börja skicka dina begäranden till klustret.

Använda en delad kubeconfig-fil

  1. Kör följande kommando för att ange användarens autentiseringsuppgifter. Ange serverApplicationId som 6256c85f-0aad-4d50-b960-e6e9b21efe35 och clientApplicationId som 3f4439ff-e698-4d6d-84fe-09c9d574f06b:

    kubectl config set-credentials <testuser>@<mytenant.onmicrosoft.com> \
    --auth-provider=azure \
    --auth-provider-arg=environment=AzurePublicCloud \
    --auth-provider-arg=client-id=<clientApplicationId> \
    --auth-provider-arg=tenant-id=<tenantId> \
    --auth-provider-arg=apiserver-id=<serverApplicationId>
    
  2. Öppna kubeconfig-filen som du skapade tidigare. Under contextskontrollerar du att kontexten som är associerad med klustret pekar på de användarautentiseringsuppgifter som du skapade i föregående steg. Om du vill ange den aktuella kontexten till dessa användarautentiseringsuppgifter kör du följande kommando:

    kubectl config set-context --current=true --user=<testuser>@<mytenant.onmicrosoft.com>
    
  3. Lägg till konfigurationslägesinställningen under user>config:

    name: testuser@mytenant.onmicrosoft.com
    user:
        auth-provider:
        config:
            apiserver-id: $SERVER_APP_ID
            client-id: $CLIENT_APP_ID
            environment: AzurePublicCloud
            tenant-id: $TENANT_ID
            config-mode: "1"
        name: azure
    
  4. Exec-plugin-programmet är en Kubernetes-autentiseringsstrategi som gör det möjligt kubectl att köra ett externt kommando för att ta emot användarautentiseringsuppgifter som ska skickas till apiserver. Från och med Kubernetes version 1.26 måste du använda Azure kubelogin, ett client-go plugin-program för autentiseringsuppgifter (exec) som implementerar Azure-autentisering för att kunna använda exec-plugin-programmet för att ta emot autentiseringsuppgifter. Så här installerar du Azure kubelogin:

    • För Windows eller Mac följer du installationsanvisningarna för Azure kubelogin.

    • För Linux eller Ubuntu laddar du ned den senaste versionen av kubelogin och kör sedan följande kommandon:

      curl -LO https://github.com/Azure/kubelogin/releases/download/"$KUBELOGIN_VERSION"/kubelogin-linux-amd64.zip 
      
      unzip kubelogin-linux-amd64.zip 
      
      sudo mv bin/linux_amd64/kubelogin /usr/local/bin/ 
      
      sudo chmod +x /usr/local/bin/kubelogin 
      
  5. Kubelogin kan användas för att autentisera med Azure Arc-aktiverade kluster genom att begära en poP-token (proof-of-possession). Konvertera kubeconfig med kubelogin för att använda lämpligt inloggningsläge. För inloggning med enhetskod med en Microsoft Entra-användare skulle kommandona till exempel vara följande:

    export KUBECONFIG=/path/to/kubeconfig
    
    kubelogin convert-kubeconfig --pop-enabled --pop-claims 'u=<ARM ID of cluster>"
    

Skicka begäranden till klustret

  1. Kör valfritt kubectl kommando. Till exempel:

    • kubectl get nodes
    • kubectl get pods
  2. När du har tillfrågats om webbläsarbaserad autentisering kopierar du url:en för enhetsinloggning (https://microsoft.com/devicelogin) och öppnar den i webbläsaren.

  3. Ange koden som skrivs ut på konsolen. Kopiera och klistra in koden i terminalen i kommandotolken för indata för enhetsautentisering.

  4. Ange användarnamnet (testuser@mytenant.onmicrosoft.com) och det associerade lösenordet.

  5. Om du ser ett felmeddelande om att användarna inte har åtkomst till resursen i Azure innebär det att du inte har åtkomst till den begärda resursen. I det här fallet måste en administratör i din Azure-klientorganisation skapa en ny rolltilldelning som ger användaren åtkomst till resursen.

Använda villkorlig åtkomst med Microsoft Entra-ID

När du integrerar Microsoft Entra-ID med ditt Azure Arc-aktiverade Kubernetes-kluster kan du också använda villkorsstyrd åtkomst för att styra åtkomsten till klustret.

Kommentar

Villkorsstyrd åtkomst för Microsoft Entra är en Microsoft Entra ID P2-funktion. Mer information om SKU:er för Microsoft Entra-ID finns i prisguiden.

Så här skapar du ett exempel på en princip för villkorsstyrd åtkomst som ska användas med klustret:

  1. Överst i Azure-portalen söker du efter och väljer Microsoft Entra-ID.
  2. På tjänstmenyn under Hantera väljer du Företagsprogram.
  3. På tjänstmenyn går du till Säkerhet och väljer Villkorlig åtkomst.
  4. I tjänstmenyn väljer du Principer. Välj sedan Skapa ny princip.
  5. Ange ett namn för principen, till exempel arc-k8s-policy.
  6. Under Tilldelningar väljer du det aktuella värdet under Användare eller arbetsbelastningsidentiteter. Under Vad gäller den här principen för?kontrollerar du sedan att Användare och grupper har valts.
  7. Under Inkludera väljer du Välj användare och grupper. Välj sedan de användare och grupper där du vill tillämpa principen. I det här exemplet väljer du samma Microsoft Entra-grupp som har administrativ åtkomst till klustret.
  8. Välj det nuvarande värdet under Molnappar eller åtgärder. Sedan, under Välj vad den här policyn gäller för, kontrollerar du att Molnappar är valda.
  9. Under Inkludera väljer du Välj resurser. Sök sedan efter och välj det serverprogram som du skapade tidigare.
  10. Under Åtkomstkontroller väljer du det aktuella värdet under Bevilja. Välj sedan Bevilja åtkomst.
  11. Markera kryssrutan kräv att enheten är markerad som kompatibel och välj sedan Välj.
  12. Under Aktivera princip väljer du .
  13. Om du vill tillämpa principen för villkorsstyrd åtkomst väljer du Skapa.

Få åtkomst till klustret igen. Kör till exempel kubectl get nodes kommandot för att visa noder i klustret:

kubectl get nodes

Om du vill bekräfta att principen tillämpas korrekt följer du anvisningarna för att logga in igen. Ett felmeddelande anger att du har loggat in, men administratören kräver att enheten som begär åtkomst hanteras av Microsoft Entra-ID för att få åtkomst till resursen. Följ de här stegen om du vill visa mer information:

  1. Gå till Microsoft Entra-ID i Azure-portalen.
  2. På tjänstmenyn under Hantera väljer du Företagsprogram.
  3. På tjänstmenyn går du till Aktivitet och väljer Inloggningsloggar.
  4. Välj den post högst upp som visar Misslyckades för Status och Lyckades för villkorsstyrd åtkomst. Välj sedan Villkorsstyrd åtkomst under Information. Du ser principen för villkorsstyrd åtkomst som du skapade, vilket kräver att enheten måste vara kompatibel.

Konfigurera just-in-time-klusteråtkomst med Microsoft Entra-ID

Ett annat alternativ för åtkomstkontroll för kluster är Privileged Identity Management (PIM) som möjliggör en högre åtkomstnivå för användare för just-in-time-begäranden.

Kommentar

Microsoft Entra PIM är en Microsoft Entra ID P2-funktion. Mer information om SKU:er för Microsoft Entra-ID finns i prisguiden.

Utför följande steg för att konfigurera just-in-time-åtkomstbegäranden för en grupp användare:

  1. Överst i Azure-portalen söker du efter och väljer Microsoft Entra-ID.

  2. I tjänstmenyn går du till Hantera och väljer Grupper. Välj sedan Ny grupp.

  3. Kontrollera att Säkerhet är markerat för Grupptyp. Ange ett gruppnamn, till exempel myJITGroup. Gör ytterligare val och välj sedan Skapa.

    Skärmbild som visar information om den nya gruppen i Azure-portalen.

  4. Du kommer tillbaka till sidan Grupper . Sök efter och välj den nyligen skapade gruppen.

  5. Välj Privileged Identity Management (Privilegierad identitetshantering) under Aktivitet på tjänstmenyn. Välj sedan Aktivera PIM för den här gruppen.

  6. Välj Lägg till tilldelningar för att börja bevilja åtkomst.

  7. Under Välj roll väljer du Medlem. Välj sedan de användare och grupper som du vill bevilja klusteråtkomst till. En gruppadministratör kan när som helst ändra dessa tilldelningar. När du är redo att gå vidare väljer du Nästa.

    Skärmbild som visar hur du lägger till tilldelningar i Azure-portalen.

  8. Välj en tilldelningstyp av Aktiv, välj önskad varaktighet och ange en motivering. När du är redo att fortsätta väljer du Tilldela.

    Skärmbild som visar tilldelningsegenskaper i Azure-portalen.

Mer information om de här stegen och alternativen finns i Tilldela berättigande för en grupp i Privileged Identity Management.

När du har gjort tilldelningarna kontrollerar du att just-in-time-åtkomst fungerar genom att komma åt klustret. Använd kubectl get nodes till exempel kommandot för att visa noder i klustret:

kubectl get nodes

Observera autentiseringskravet och följ stegen för att autentisera. Om autentiseringen lyckas bör du se utdata som liknar följande:

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

NAME      STATUS   ROLES    AGE      VERSION
node-1    Ready    agent    6m36s    v1.18.14
node-2    Ready    agent    6m42s    v1.18.14
node-3    Ready    agent    6m33s    v1.18.14

Nästa steg