Använda rollbaserad åtkomstkontroll i Azure för att definiera åtkomst till Kubernetes-konfigurationsfilen i Azure Kubernetes Service (AKS)

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

Den här artikeln visar hur du tilldelar Azure-roller som begränsar vem som kan hämta konfigurationsinformationen för ett AKS-kluster.

Innan du börjar

  • Den här artikeln förutsätter att du har ett befintligt AKS-kluster. Om du behöver ett AKS-kluster skapar du ett med Hjälp av Azure CLI, Azure PowerShell eller Azure Portal.
  • Den här artikeln kräver också att du kör Azure CLI version 2.0.65 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Tillgängliga behörigheter för klusterroller

När du interagerar med ett AKS-kluster med verktyget kubectl definierar en konfigurationsfil, som kallas kubeconfig, klusteranslutningsinformation. Den här konfigurationsfilen lagras vanligtvis i ~/.kube/config. Flera kluster kan definieras i den här kubeconfig-filen . Du kan växla mellan kluster med hjälp av kubectl config use-context kommandot .

Med az aks get-credentials kommandot kan du hämta autentiseringsuppgifterna för ett AKS-kluster och sammanfoga dessa autentiseringsuppgifter i kubeconfig-filen . Du kan använda Azure RBAC för att styra åtkomsten till dessa autentiseringsuppgifter. Med de här Azure-rollerna kan du definiera vem som kan hämta kubeconfig-filen och vilka behörigheter de har i klustret.

Det finns två Azure-roller som du kan använda för en Microsoft Entra-användare eller -grupp:

  • Administratörsroll för Azure Kubernetes-tjänstkluster

    • Tillåter åtkomst till Microsoft.ContainerService/managedClusters/listClusterAdminCredential/action API-anrop. Det här API-anropet visar autentiseringsuppgifterna för klusteradministratören.
    • Laddar ned kubeconfig för klustretAdmin-rollen.
  • Användarroll för Azure Kubernetes Service-kluster

    • Tillåter åtkomst till Microsoft.ContainerService/managedClusters/listClusterUserCredential/action API-anrop. Det här API-anropet visar autentiseringsuppgifterna för klustrets användare.
    • Laddar ned kubeconfig för clusterUser-rollen.

Kommentar

I kluster som använder Microsoft Entra-ID har användare med rollen clusterUser en tom kubeconfig-fil som uppmanar till en inloggning. När de har loggat in har användarna åtkomst baserat på sina användar- eller gruppinställningar för Microsoft Entra. Användare med klustretAdmin-rollen har administratörsåtkomst.

På kluster som inte använder Microsoft Entra-ID har rollen clusterUser samma effekt av clusterAdmin-rollen .

Tilldela rollbehörigheter till en användare eller grupp

Om du vill tilldela en av de tillgängliga rollerna måste du hämta resurs-ID:t för AKS-klustret och ID:t för Microsoft Entra-användarkontot eller -gruppen med hjälp av följande steg:

  1. Hämta klusterresurs-ID az aks show :t med kommandot för klustret med namnet myAKSCluster i resursgruppen myResourceGroup . Ange ett eget kluster- och resursgruppnamn efter behov.
  2. Använd kommandona az account show och az ad user show för att hämta ditt användar-ID.
  3. Tilldela en roll med kommandot az role assignment create .

I följande exempel tilldelas administratörsrollen för Azure Kubernetes-tjänstkluster till ett enskilt användarkonto:

# Get the resource ID of your AKS cluster
AKS_CLUSTER=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query id -o tsv)

# Get the account credentials for the logged in user
ACCOUNT_UPN=$(az account show --query user.name -o tsv)
ACCOUNT_ID=$(az ad user show --id $ACCOUNT_UPN --query objectId -o tsv)

# Assign the 'Cluster Admin' role to the user
az role assignment create \
    --assignee $ACCOUNT_ID \
    --scope $AKS_CLUSTER \
    --role "Azure Kubernetes Service Cluster Admin Role"

Om du vill tilldela behörigheter till en Microsoft Entra-grupp uppdaterar du parametern --assignee som visas i föregående exempel med objekt-ID:t för gruppen i stället för användaren.

Använd kommandot för att hämta objekt-ID:t för en grupp az ad group show . Följande kommando hämtar objekt-ID:t för Microsoft Entra-gruppen med namnet appdev:

az ad group show --group appdev --query objectId -o tsv

Viktigt!

I vissa fall, till exempel Microsoft Entra-gästanvändare, skiljer sig user.name i kontot från userPrincipalName.

$ az account show --query user.name -o tsv
user@contoso.com

$ az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv
user_contoso.com#EXT#@contoso.onmicrosoft.com

I det här fallet anger du värdet för ACCOUNT_UPN till userPrincipalName från Microsoft Entra-användaren. Om ditt konto till exempel user.name är user@contoso.comser den här åtgärden ut som i följande exempel:

ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)

Hämta och verifiera konfigurationsinformationen

När rollerna har tilldelats använder du az aks get-credentials kommandot för att hämta kubeconfig-definitionen för ditt AKS-kluster. I följande exempel hämtas autentiseringsuppgifterna --admin , som fungerar korrekt om användaren har beviljats rollen Klusteradministratör:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin

Du kan sedan använda kubectl config view kommandot för att kontrollera att kontexten för klustret visar att administratörskonfigurationsinformationen har tillämpats.

$ kubectl config view

Dina utdata bör se ut ungefär som följande exempelutdata:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://myaksclust-myresourcegroup-19da35-4839be06.hcp.eastus.azmk8s.io:443
  name: myAKSCluster
contexts:
- context:
    cluster: myAKSCluster
    user: clusterAdmin_myResourceGroup_myAKSCluster
  name: myAKSCluster-admin
current-context: myAKSCluster-admin
kind: Config
preferences: {}
users:
- name: clusterAdmin_myResourceGroup_myAKSCluster
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: e9f2f819a4496538b02cefff94e61d35

Ta bort rollbehörigheter

Om du vill ta bort rolltilldelningar använder du az role assignment delete kommandot . Ange det konto-ID och klusterresurs-ID som du fick i föregående steg. Om du har tilldelat rollen till en grupp i stället för en användare anger du lämpligt gruppobjekt-ID i stället för kontoobjekt-ID för parametern --assignee .

az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER

Nästa steg

För förbättrad säkerhet vid åtkomst till AKS-kluster, integrera Microsoft Entra-autentisering.