Dela via


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

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.

Kommentar

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). Med den här funktionen behöver du inte separat hantera användaridentiteter och autentiseringsuppgifter för Kubernetes. Du måste dock fortfarande konfigurera och hantera Azure RBAC och Kubernetes RBAC separat.

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

  1. Skapa en Azure-resursgrupp med kommandot az group create .

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Skapa ett AKS-kluster med hanterad Microsoft Entra-integrering och Azure RBAC för Kubernetes Authorization med kommandot az aks create .

    export CLUSTER_NAME=<cluster-name>
    
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --enable-aad \
        --enable-azure-rbac \
        --generate-ssh-keys
    

    Dina utdata bör se ut ungefär som 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

  • Aktivera Azure RBAC för Kubernetes-auktorisering i ett befintligt AKS-kluster med kommandot az aks update med --enable-azure-rbac flaggan .

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --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 --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
    

Inbyggda AKS-roller

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.

Skapa rolltilldelningar för klusteråtkomst

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

    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. 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. I följande exempel skapas en rolltilldelning för RBAC-administratörsrollen för Azure Kubernetes Service.

    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>
    

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.

  1. 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>"
        ]
    }
    
  2. 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 
    
  3. 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

  1. 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 --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Du kan nu använda kubectl för att hantera klustret. Du kan till exempel lista noderna i klustret med hjälp av kubectl get nodes.

    kubectl get nodes
    

    Exempel på utdata>

    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 scenarier som 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.

  1. Använd plugin-programmet kubelogin genom att köra följande kommando:

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. Du kan nu använda kubectl för att hantera klustret. Du kan till exempel lista noderna i klustret med hjälp av kubectl get nodes.

    kubectl get nodes
    

    Exempel på utdata>

    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

  1. Visa en lista över rolltilldelningar med kommandot az role assignment list .

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. Ta bort rolltilldelningar med kommandot az role assignment delete .

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

Ta bort rolldefinition

  • Ta bort den anpassade rolldefinitionen az role definition delete med kommandot .

    az role definition delete --name "AKS Deployment Reader"
    

Ta bort resursgrupp och AKS-kluster

  • Ta bort resursgruppen och AKS-klustret med kommandot az group delete .

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

Nästa steg

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