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

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-auktorisering, vilket möjliggör enhetlig hantering och åtkomstkontroll för Azure-resurser, AKS- och Kubernetes-resurser. Mer information finns i Azure RBAC för Kubernetes-auktorisering.

Innan du börjar

  • Du behöver Azure CLI version 2.24.0 eller senare installerad och konfigurerad. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
  • Du behöver kubectl, med en lägsta version av 1.18.3.
  • Du behöver hanterad Microsoft Entra-integrering aktiverat i klustret innan du kan lägga till Azure RBAC för Kubernetes-auktorisering. Om du behöver aktivera hanterad Microsoft Entra-integrering kan du läsa Använda Microsoft Entra-ID i AKS.
  • Om du har CRD:er och skapar anpassade rolldefinitioner är det enda sättet att täcka CRD:er i dag att använda Microsoft.ContainerService/managedClusters/*/read. För de återstående objekten kan du använda specifika API-grupper, till exempel Microsoft.ContainerService/apps/deployments/read.
  • Nya rolltilldelningar kan ta upp till fem minuter att sprida och uppdateras av auktoriseringsservern.
  • Azure RBAC för Kubernetes-auktorisering kräver att Den Microsoft Entra-klient som konfigurerats för autentisering är samma som klientorganisationen för den prenumeration som innehåller ditt AKS-kluster.

Skapa ett nytt AKS-kluster med hanterad Microsoft Entra-integrering och Azure RBAC för Kubernetes-auktorisering

Skapa en Azure-resursgrupp med kommandot az group create .

az group create --name myResourceGroup --location westus2

Skapa ett AKS-kluster med hanterad Microsoft Entra-integrering och Azure RBAC för Kubernetes Authorization med kommandot az aks create .

az aks create -g myResourceGroup -n myManagedCluster --enable-aad --enable-azure-rbac

Utdata ser ut ungefär som i följande exempelutdata:

"AADProfile": {
    "adminGroupObjectIds": null,
    "clientAppId": null,
    "enableAzureRbac": true,
    "managed": true,
    "serverAppId": null,
    "serverAppSecret": null,
    "tenantId": "****-****-****-****-****"
}

Aktivera Azure RBAC i ett befintligt AKS-kluster

Lägg till Azure RBAC för Kubernetes-auktorisering i ett befintligt AKS-kluster med kommandot az aks update med enable-azure-rbac flaggan .

az aks update -g myResourceGroup -n myAKSCluster --enable-azure-rbac

Inaktivera Azure RBAC för Kubernetes-auktorisering från ett AKS-kluster

Ta bort Azure RBAC för Kubernetes-auktorisering från ett befintligt AKS-kluster med kommandot az aks update med disable-azure-rbac flaggan .

az aks update -g myResourceGroup -n myAKSCluster --disable-azure-rbac

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

AKS tillhandahåller följande inbyggda roller:

Roll beskrivning
RBAC-läsare för Azure Kubernetes Service 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 Secretseftersom 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).
Azure Kubernetes Service RBAC 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 Secrets och körning av poddar som alla ServiceAccount i namnområdet, så att den kan användas för att få API-åtkomstnivåerna för alla ServiceAccount i namnområdet.
RBAC-administratör för Azure Kubernetes Service 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. Den här rollen tillåter inte skrivåtkomst till resurskvoten eller till själva namnområdet.
RBAC-klusteradministratör för Azure Kubernetes Service Tillåter superanvändaråtkomst för att utföra alla åtgärder på alla resurser. Den ger fullständig kontroll över varje resurs i klustret och i alla namnområden.

Rolltilldelningar som är begränsade till hela AKS-klustret kan göras antingen på bladet Åtkomstkontroll (IAM) för klusterresursen på Azure-portalen eller med hjälp av följande Azure CLI-kommandon:

Hämta ditt AKS-resurs-ID med hjälp av az aks show kommandot .

AKS_ID=$(az aks show -g myResourceGroup -n myManagedCluster --query id -o tsv)

Skapa en rolltilldelning med kommandot az role assignment create . <AAD-ENTITY-ID> kan vara ett användarnamn eller klient-ID för ett huvudnamn för tjänsten.

az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID

Kommentar

Du kan skapa rolltilldelningarna Azure Kubernetes Service RBAC Reader och Azure Kubernetes Service RBAC Writer som är begränsade till ett specifikt namnområde i klustret med hjälp av az role assignment create kommandot och ange omfånget till önskat namnområde.

az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>

Kommentar

När du har skapat rolltilldelningar som är begränsade till ett önskat namnområde i Azure-portalen kan du inte se "rolltilldelningar" för namnområdet i ett omfång. Du hittar den med hjälp az role assignment list av kommandot eller listrolltilldelningar för en användare eller grupp, som du har tilldelat rollen till.

az role assignment list --scope $AKS_ID/namespaces/<namespace-name>

Skapa definitioner för anpassade roller

Följande exempel på en anpassad rolldefinition gör att en användare bara kan läsa distributioner och inget annat. En fullständig lista över möjliga åtgärder finns i Microsoft.ContainerService-åtgärder.

Om du vill skapa egna anpassade rolldefinitioner kopierar du följande fil, ersätter <YOUR SUBSCRIPTION ID> med ditt eget prenumerations-ID och sparar den sedan som deploy-view.json.

{
    "Name": "AKS Deployment Reader",
    "Description": "Lets you view all deployments in cluster/namespace.",
    "Actions": [],
    "NotActions": [],
    "DataActions": [
        "Microsoft.ContainerService/managedClusters/apps/deployments/read"
    ],
    "NotDataActions": [],
    "assignableScopes": [
        "/subscriptions/<YOUR SUBSCRIPTION ID>"
    ]
}

Skapa rolldefinitionen az role definition create med kommandot och ange --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 Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID

Använda Azure RBAC för Kubernetes-auktorisering med kubectl

Kontrollera att du har den inbyggda rollen Azure Kubernetes Service Cluster User och hämta sedan kubeconfig för ditt AKS-kluster med hjälp av az aks get-credentials kommandot .

az aks get-credentials -g myResourceGroup -n myManagedCluster

Nu kan du använda kubectl 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
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
aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11

Använda Azure RBAC för Kubernetes-auktorisering med kubelogin

AKS skapade kubelogin plugin-programmet för att avblockera ytterligare scenarier, till exempel icke-interaktiva inloggningar, äldre kubectl versioner eller användning av enkel inloggning i flera kluster utan att behöva logga in på ett nytt kluster.

Du kan använda plugin-programmet kubelogin genom att köra följande kommando:

export KUBECONFIG=/path/to/kubeconfig
kubelogin convert-kubeconfig

kubectlPå samma sätt måste du logga in första gången du kör den, som du ser i följande exempel:

kubectl get nodes
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
aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11

Rensa resurser

Ta bort rolltilldelning

# List role assignments
az role assignment list --scope $AKS_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 Deployment Reader"

Ta bort resursgrupp och AKS-kluster

az group delete -n myResourceGroup

Nästa steg

Mer information om AKS-autentisering, auktorisering, Kubernetes RBAC och Azure RBAC finns i: