Dela via


Använda rollbaserad åtkomstkontroll i Azure (RBAC) för Kubernetes-auktorisering

Gäller för: AKS på Azure Stack HCI 23H2

Infrastrukturadministratörer kan använda rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att styra vem som har åtkomst till kubeconfig-filen och vilka behörigheter de har. Kubernetes-operatorer kan interagera med Kubernetes-kluster med hjälp av kubectl-verktyget baserat på de angivna behörigheterna. Azure CLI är ett enkelt sätt att hämta åtkomstautentiseringsuppgifterna och kubeconfig-konfigurationsfilen för att ansluta till dina AKS-kluster med kubectl.

När du använder integrerad autentisering mellan Microsoft Entra ID och AKS kan du använda Microsoft Entra-användare, grupper eller tjänstens huvudnamn som ämnen i Kubernetes rollbaserad åtkomstkontroll (Kubernetes RBAC). Den här funktionen gör att du inte behöver hantera användaridentiteter och autentiseringsuppgifter separat för Kubernetes. Du måste dock fortfarande konfigurera och hantera Azure RBAC och Kubernetes RBAC separat.

Den här artikeln beskriver hur du använder Azure RBAC för Kubernetes-klusterauktorisering med Microsoft Entra-ID och Azure-rolltilldelningar.

En konceptuell översikt finns i Azure RBAC for Kubernetes Authorization for AKS enabled by Azure Arc (Azure RBAC for Kubernetes Authorization for AKS enabled by Azure Arc).

Innan du börjar

Kontrollera att du har följande förutsättningar innan du börjar:

  • AKS på Azure Stack HCI 23H2 stöder för närvarande endast aktivering av Azure RBAC när Kubernetes-kluster skapas. Du kan inte aktivera Azure RBAC när Kubernetes-klustret har skapats.

  • Installera den senaste versionen av Azure CLI-tilläggen aksarc och connectedk8s . Observera att du måste köra aksarc-tillägget version 1.1.1 eller senare för att aktivera Azure RBAC. Kör az --version för att hitta den aktuella versionen. Om du behöver installera eller uppgradera Azure CLI kan du läsa Installera Azure CLI.

    az extension add --name aksarc
    az extension add --name connectedk8s
    

    Om du redan har installerat aksarc tillägget uppdaterar du tillägget till den senaste versionen:

    az extension update --name aksarc
    az extension update --name connectedk8s
    
  • Om du vill interagera med Kubernetes-kluster måste du installera kubectl och kubelogin.

  • Du behöver följande behörigheter för att aktivera Azure RBAC när du skapar ett Kubernetes-kluster:

    • Om du vill skapa ett Kubernetes-kluster behöver du rollen Azure Kubernetes Service Arc-deltagare .
    • Om du vill använda parametern --enable-azure-rbac behöver du rollen Administratör för rollbaserad åtkomstkontroll för åtkomst till behörigheten Microsoft.Authorization/roleAssignments/write . Mer information finns i Inbyggda roller i Azure.
    • Nya rolltilldelningar kan ta upp till fem minuter att sprida och uppdateras av auktoriseringsservern.
  • När Azure RBAC har aktiverats kan du komma åt ditt Kubernetes-kluster med de angivna behörigheterna med antingen direktläge eller proxyläge.

    • För att komma åt Kubernetes-klustret direkt med kommandot behöver du microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, som ingår i behörigheten Azure Kubernetes Service Arc-klusteranvändare.az aksarc get-credentials
    • För att komma åt Kubernetes-klustret var som helst med ett proxyläge med kommandot az connectedk8s proxy eller från Azure-portalen behöver du åtgärden 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 de nätverkskrav som anges i Azure Arc-aktiverade Kubernetes-nätverkskrav.
  • Om du vill använda kubectl kan du komma åt det med hjälp av antingen Azure RBAC eller AAD-administratörsgruppen.

    • Om du vill använda kubectl med Azure RBAC behöver du rollen Azure Arc Kubernetes Viewer som är begränsad till den anslutna klusterresursen.
    • Om du vill använda kubectl med AAD-administratörsgruppen behöver du ingen specifik roll, men du måste se till att du finns i en av grupperna i listan med tilläggsadministratörer för den anslutna klusterresursen.

Steg 1: Skapa ett Azure RBAC-aktiverat Kubernetes-kluster

Du kan skapa ett Azure RBAC-aktiverat Kubernetes-kluster för auktorisering och ett Microsoft Entra-ID för autentisering.

az aksarc create -n $aks_cluster_name -g $resource_group_name --custom-location $customlocation_ID --vnet-ids $logicnet_Id --generate-ssh-keys --control-plane-ip $controlplaneIP --enable-azure-rbac

Efter några minuter slutförs kommandot och returnerar JSON-formaterad information om klustret.

Steg 2: Skapa rolltilldelningar för användare att komma åt klustret

AKS som aktiveras av Azure Arc innehåller följande inbyggda roller:

Roll beskrivning
Azure Arc Kubernetes Viewer Tillåter skrivskyddad åtkomst för att se de flesta objekt i ett namnområde.
Tillåter inte visning av roller eller rollbindningar.
Tillåter inte visning secretseftersom read behörighet för hemligheter ger åtkomst till ServiceAccount autentiseringsuppgifter i namnområdet, vilket ger API-åtkomst som alla ServiceAccount i namnområdet (en form av behörighetseskalering).
Azure Arc Kubernetes Writer Tillåter läs-/skrivåtkomst till de flesta objekt i ett namnområde.
Tillåter inte visning eller ändring av roller eller rollbindningar.
Tillåter åtkomst till secrets och körning av poddar som alla ServiceAccount i namnområdet, så det kan användas för att få API-åtkomstnivåerna för alla ServiceAccount i namnområdet.
Azure Arc Kubernetes-administratör Tillåter administratörsåtkomst, avsedd att beviljas inom ett namnområde.
Tillåter läs-/skrivåtkomst till de flesta resurser i ett namnområde (eller klusteromfång), inklusive möjligheten att skapa roller och rollbindningar i namnområdet.
Tillåter inte skrivåtkomst till resurskvoten eller till själva namnområdet.
Azure Arc Kubernetes-klusteradministratör Tillåter "superanvändare" åtkomst för att utföra alla åtgärder på alla resurser.
Ger fullständig kontroll över varje resurs i klustret och i alla namnområden.

Du kan använda az role assignment create kommandot för att skapa rolltilldelningar.

$ARM-ID Hämta först för det målkluster som du vill tilldela en roll till.

$ARM_ID = (az connectedk8s show -g "$resource_group_name" -n $aks_cluster_name --query id -o tsv)

az role assignment create Använd sedan kommandot för att tilldela roller till ditt Kubernetes-kluster. Du måste ange $ARM_ID från det första steget och assignee-object-id för det här steget. assignee-object-id Kan vara ett Microsoft Entra-ID eller ett klient-ID för tjänstens huvudnamn.

I följande exempel tilldelas Rollen Azure Arc Kubernetes Viewer till Kubernetes-klustret:

az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <assignee-object-id> --scope $ARM_ID

I det här exemplet är omfånget Azure Resource Manager-ID för klustret. Det kan också vara resursgruppen som innehåller Kubernetes-klustret.

Skapa anpassade rolldefinitioner

Du kan välja att skapa en egen rolldefinition för användning i rolltilldelningar.

I följande exempel visas en rolldefinition som gör att en användare endast kan läsa distributioner. Mer information finns i den fullständiga listan över dataåtgärder som du kan använda för att konstruera en rolldefinition. Mer information om hur du skapar en anpassad roll finns i Steg för att skapa en anpassad roll

Om du vill skapa egna anpassade rolldefinitioner 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. 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": "AKS Arc Deployment Reader",
    "Description": "Lets you view all deployments in cluster/namespace.",
    "Actions": [],
    "NotActions": [],
    "DataActions": [
        "Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
    ],
    "NotDataActions": [],
    "assignableScopes": [
        "/subscriptions/<YOUR SUBSCRIPTION ID>"
    ]
}

Information om anpassade roller och hur du skapar dem finns i Anpassade Azure-roller.

Skapa rolldefinitionen az role definition create med kommandot och ange parametern --role-definition till den deploy-view.json fil som du skapade i föregående steg:

az role definition create --role-definition @deploy-view.json 

Tilldela rolldefinitionen till en användare eller annan identitet med kommandot az role assignment create :

az role assignment create --role "AKS Arc Deployment Reader" --assignee <assignee-object-id> --scope $ARM_ID

Steg 3: Åtkomst till Kubernetes-kluster

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 behörigheten 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-hantering av 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 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 .

Kör följande steg på en annan klientenhet:

  1. Logga in med Microsoft Entra-autentisering

  2. Få klustret att ansluta 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 $CLUSTER_NAME -g $RESOURCE_GROUP
    

    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.

Rensa resurser

Ta bort rolltilldelning

# List role assignments
az role assignment list --scope $ARM_ID --query [].id -o tsv

# Delete role assignments
az role assignment delete --ids <LIST OF ASSIGNMENT IDS>

Ta bort rolldefinition

az role definition delete -n "AKS Arc Deployment Reader"

Nästa steg