Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 - connectedk8sAzure CLI-tillägget:- az extension add --name connectedk8s- connectedk8sOm 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: - Om du inte har anslutit ett kluster ännu använder du vår snabbstart.
- Uppgradera dina agenter till den senaste versionen.
 
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
- Hämta klustrets MSI-identitet genom att köra följande kommando: - az connectedk8s show -g <resource-group> -n <connected-cluster-name>
- 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>
- 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-featureskommandot kontrollerar du att- kubeconfigfilen på datorn pekar på klustret där du vill aktivera Azure RBAC.- Använd - --skip-azure-rbac-listmed 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- ClusterRoleBindingoch- RoleBindingobjekt 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
- SSH till varje huvudnod i klustret och slutför sedan följande steg: - Om din - kube-apiserverär en statisk podd:- Hemligheten - azure-arc-guard-manifests- kube-systemi namnområdet innehåller två filer:- guard-authn-webhook.yamloch- guard-authz-webhook.yaml. Kopiera dessa filer till- /etc/guardnodens 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
- Öppna manifestet - apiserveri redigeringsläge:- sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
- Lägg till följande specifikation under - volumes:- - hostPath: path: /etc/guard type: Directory name: azure-rbac
- Lägg till följande specifikation under - volumeMounts:- - mountPath: /etc/guard name: azure-rbac readOnly: true
 - Om din - kube-apiserverinte är en statisk podd:- Öppna manifestet - apiserveri redigeringsläge:- sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
- Lägg till följande specifikation under - volumes:- - name: azure-rbac secret: secretName: azure-arc-guard-manifests
- Lägg till följande specifikation under - volumeMounts:- - mountPath: /etc/guard name: azure-rbac readOnly: true
 
- Lägg till följande - apiserverargument:- - --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 - apiserverargument:- - --authentication-token-webhook-version=v1
- Spara och stäng redigeraren för att uppdatera - apiserverpodden.
Kluster som skapats med hjälp av kluster-API
- 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
- Ändra fältet - namespacei filen azure-arc-guard-manifests.yaml till namnområdet i hanteringsklustret där du använder de anpassade resurserna för att skapa arbetsbelastningskluster.
- Använd det här manifestet: - kubectl apply -f azure-arc-guard-manifests.yaml
- Redigera objektet - KubeadmControlPlanegenom att köra- kubectl edit kcp <clustername>-control-plane:- 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"
- 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
- 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
- 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 readbehörighet för hemligheter skulle ge åtkomst tillServiceAccountautentiseringsuppgifter i namnområdet. Dessa autentiseringsuppgifter skulle i sin tur tillåta API-åtkomst via detServiceAccountvä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 ServiceAccountvärde i namnområdet, så den kan användas för att få API-åtkomstnivåerna för valfrittServiceAccountvä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 objektet RoleBinding. Om du använder den iRoleBindingtillå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 iRoleBindingger 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:
- 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
- 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
- Kör följande kommando för att ange användarens autentiseringsuppgifter. Ange - serverApplicationIdsom- 6256c85f-0aad-4d50-b960-e6e9b21efe35och- clientApplicationIdsom- 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>
- Ö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>
- 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
- Exec-plugin-programmet är en Kubernetes-autentiseringsstrategi som gör det möjligt - kubectlatt 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-goplugin-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
 
- 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
- Kör valfritt - kubectlkommando. Till exempel:- kubectl get nodes
- kubectl get pods
 
- 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.
- Ange koden som skrivs ut på konsolen. Kopiera och klistra in koden i terminalen i kommandotolken för indata för enhetsautentisering. 
- Ange användarnamnet ( - testuser@mytenant.onmicrosoft.com) och det associerade lösenordet.
- 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:
- Överst i Azure-portalen söker du efter och väljer Microsoft Entra-ID.
- På tjänstmenyn under Hantera väljer du Företagsprogram.
- På tjänstmenyn går du till Säkerhet och väljer Villkorlig åtkomst.
- I tjänstmenyn väljer du Principer. Välj sedan Skapa ny princip.
- Ange ett namn för principen, till exempel arc-k8s-policy.
- 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.
- 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.
- 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.
- Under Inkludera väljer du Välj resurser. Sök sedan efter och välj det serverprogram som du skapade tidigare.
- Under Åtkomstkontroller väljer du det aktuella värdet under Bevilja. Välj sedan Bevilja åtkomst.
- Markera kryssrutan kräv att enheten är markerad som kompatibel och välj sedan Välj.
- Under Aktivera princip väljer du På.
- 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:
- Gå till Microsoft Entra-ID i Azure-portalen.
- På tjänstmenyn under Hantera väljer du Företagsprogram.
- På tjänstmenyn går du till Aktivitet och väljer Inloggningsloggar.
- 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:
- Överst i Azure-portalen söker du efter och väljer Microsoft Entra-ID. 
- I tjänstmenyn går du till Hantera och väljer Grupper. Välj sedan Ny grupp. 
- Kontrollera att Säkerhet är markerat för Grupptyp. Ange ett gruppnamn, till exempel - myJITGroup. Gör ytterligare val och välj sedan Skapa.  
- Du kommer tillbaka till sidan Grupper . Sök efter och välj den nyligen skapade gruppen. 
- Välj Privileged Identity Management (Privilegierad identitetshantering) under Aktivitet på tjänstmenyn. Välj sedan Aktivera PIM för den här gruppen. 
- Välj Lägg till tilldelningar för att börja bevilja åtkomst. 
- 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.   
- 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.   
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
- Läs mer om arkitekturen för Azure RBAC på Arc-aktiverade Kubernetes.
- Anslut på ett säkert sätt till ett Arc-aktiverat Kubernetes-kluster med hjälp av klusteranslutning.
- Hjälp med att skydda klustret på andra sätt genom att följa riktlinjerna i säkerhetsboken för Azure Arc-aktiverade Kubernetes.