Gebruik Microsoft Entra ID autorisatie voor de Kubernetes-API in Azure Kubernetes Service (AKS)

Van toepassing op: ✔️ AKS Automatic ✔️ AKS Standard

In dit artikel wordt beschreven hoe u aanroepen naar de Kubernetes-API in Azure Kubernetes Service (AKS) autoriseert met behulp van Microsoft Entra ID identiteiten. Microsoft Entra ID autorisatie voor de Kubernetes-API maakt gebruik van Azure RBAC-roltoewijzingen om toegang te verlenen tot Kubernetes-resources. Wijs voor ingebouwde Kubernetes-resources een van de ingebouwde AKS-rollen (zoals Azure Kubernetes Service RBAC Reader) toe aan het cluster- of naamruimtebereik. Wijs voor aangepaste resources (CRD's) een aangepaste rol toe met Azure ABAC-voorwaarden die bepalen tot welke CRD-groepen of soorten de toegewezen gebruiker toegang kan krijgen. De twee roltoewijzingen bestaan uit: één verleent toegang tot standaard Kubernetes-resources en de andere voorwaardelijke toegang tot specifieke aangepaste resources.

Voor de meeste productieworkloads is AKS Automatic de aanbevolen, productieklare standaardoptie voor AKS. Automatische AKS-clusters zijn vooraf geconfigureerd met Azure RBAC voor Kubernetes-autorisatie, zodat u zich kunt richten op het toewijzen van de juiste Microsoft Entra roltoewijzingen aan gebruikers, groepen en service-principals.

Zie Concepten voor clusterautorisatie voor een conceptueel overzicht van de beschikbare Kubernetes-API-autorisatieopties in AKS.

Note

Wanneer u geïntegreerde verificatie gebruikt tussen Microsoft Entra-id en AKS, kunt u Microsoft Entra-gebruikers, -groepen of -service-principals gebruiken als onderwerp in Kubernetes RBAC (op rollen gebaseerd toegangsbeheer van Kubernetes). Met behulp van Microsoft Entra ID-autorisatie hoeft u geen afzonderlijke gebruikersidentiteiten en referenties voor Kubernetes te beheren. U moet echter nog steeds Microsoft Entra ID roltoewijzingen en eventuele Kubernetes RBAC-bindingen afzonderlijk instellen en beheren.

Note

Automatische AKS-clusters zijn vooraf geconfigureerd voor gebruik van Azure RBAC voor Kubernetes-autorisatie. U hoeft --enable-azure-rbac niet in te schakelen op AKS Automatic-clusters. In AKS Standard kunt u Azure RBAC in- of uitschakelen op basis van de clusterconfiguratie.

Prerequisites

  • U moet Azure CLI versie 2.24.0 of hoger hebben geïnstalleerd en geconfigureerd. Voer az --version uit om de versie te vinden. Als u Azure CLI wilt installeren of upgraden, raadpleegt u Azure CLI installeren.
  • U hebt een minimumversie van kubectl nodig.
  • U hebt beheerde Microsoft Entra-integratie in uw cluster nodig voordat u Microsoft Entra ID autorisatie voor de Kubernetes-API kunt toevoegen. Zie Microsoft Entra-id gebruiken in AKS als u beheerde Microsoft Entra-integratie wilt inschakelen.
  • Het kan vijf minuten duren voordat nieuwe roltoewijzingen zijn doorgegeven en bijgewerkt door de autorisatieserver.
  • Microsoft Entra ID autorisatie voor de Kubernetes-API vereist dat de Microsoft Entra tenant die is geconfigureerd voor verificatie hetzelfde is als de tenant voor het abonnement dat uw AKS-cluster bevat.

Gedrag van AKS-clustermodus

Clustermodus Azure RBAC voor Kubernetes-autorisatie
AKS Automatisch Vooraf geconfigureerd (standaard ingeschakeld)
AKS Standard Optioneel (inschakelen met --enable-azure-rbac)

Een nieuw AKS-cluster maken met beheerde Microsoft Entra-integratie en Microsoft Entra ID autorisatie

Gebruik AKS Automatic voor nieuwe productieworkloads. Azure RBAC voor Kubernetes-autorisatie is vooraf geconfigureerd op AKS Automatische clusters.

  1. Maak een AKS Automatic-cluster door Een Azure Kubernetes Service (AKS) Automatic-cluster maken te volgen.

  2. Optioneel: controleer of Azure RBAC voor Kubernetes-autorisatie is ingeschakeld op uw cluster met behulp van de az aks show opdracht.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    az aks show \
      --resource-group $RESOURCE_GROUP \
      --name $CLUSTER_NAME \
      --query "aadProfile.enableAzureRbac" \
      --output tsv
    

AKS Standard

  1. Maak een Azure-resourcegroep met behulp van de az group create opdracht.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Maak een AKS Standard-cluster met beheerde Microsoft Entra-integratie en Microsoft Entra ID autorisatie met behulp van de az aks create opdracht.

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

    Uw output zou eruit moeten zien zoals de volgende voorbeeldoutput.

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

Microsoft Entra ID autorisatie inschakelen voor een bestaand AKS-cluster

Schakel voor bestaande AKS Standard-clusters Microsoft Entra ID autorisatie in voor de Kubernetes-API met behulp van de az aks update opdracht met de --enable-azure-rbac vlag.

# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
export CLUSTER_NAME=<cluster-name>

# Enable Microsoft Entra ID authorization for the Kubernetes API
az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac

Automatische AKS-clusters hebben al Azure RBAC voor Kubernetes-autorisatie vooraf geconfigureerd. U hoeft --enable-azure-rbac niet uit te voeren voor AKS Automatic.

Ingebouwde AKS-rollen

AKS biedt de volgende ingebouwde rollen:

Role Description
Azure Kubernetes Service RBAC-lezer Staat alleen-lezentoegang toe om de meeste objecten in een naamruimte te zien. Het staat niet toe om rollen of rolbindingen te bekijken. Deze rol staat weergave van Secrets niet toe, omdat het lezen van de inhoud van Secrets toegang biedt tot ServiceAccount-referenties in de naamruimte, waardoor API-toegang wordt toegestaan als een willekeurige ServiceAccount in de naamruimte (een vorm van escalatie van bevoegdheden).
Azure Kubernetes Service RBAC Writer Geeft lees-/schrijftoegang tot de meeste objecten in een namespace. Deze rol staat het weergeven of wijzigen van rollen of rolbindingen niet toe. Met deze rol kan men toegang tot Secrets krijgen en Pods uitvoeren als elke ServiceAccount in de naamruimte, zodat het kan worden gebruikt om de API-toegangsniveaus van elke ServiceAccount in de naamruimte te verkrijgen.
Azure Kubernetes Service RBAC-beheerder Staat beheerderstoegang toe, bedoeld om binnen een namespace te worden verleend. Biedt lees-/schrijftoegang tot de meeste resources binnen een namespace (of clusterbereik), inclusief de mogelijkheid om rollen en rolbindings binnen de namespace te creëren. Met deze rol is schrijftoegang tot het resourcequotum of de naamruimte zelf niet toegestaan.
Azure Kubernetes Service RBAC-clusterbeheerder Staat supergebruikertoegang toe om elke actie op elke bron uit te voeren. Het geeft volledige controle over elke resource in het cluster en in alle naamruimten.

Roltoewijzingen maken voor clustertoegang

  1. Haal uw AKS-resource-id op met behulp van de az aks show opdracht.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS resource ID
    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. Maak een roltoewijzing met behulp van de az role assignment create opdracht. <AAD-ENTITY-ID> kan een gebruikersnaam of de client-id van een service-principal zijn. In het volgende voorbeeld wordt een roltoewijzing gemaakt voor de rol Azure Kubernetes Service RBAC-beheerder.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS resource ID
    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
    # Create a role assignment for the Azure Kubernetes Service RBAC Admin role
    az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

    Note

    U kunt de Azure Kubernetes Service RBAC Reader en Azure Kubernetes Service RBAC Writer-roltoewijzingen maken die zijn gericht op een specifieke naamruimte binnen het cluster met behulp van de az role assignment create opdracht en het bereik instellen op de gewenste naamruimte.

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

Aangepaste rollendefinities maken

Voor ingebouwde Kubernetes-resources verwijzen aangepaste roldefinities naar de bijbehorende API-groepsactie onder Microsoft.ContainerService/managedClusters/. In het volgende voorbeeld kan een gebruiker alleen implementaties lezen en niets anders. Zie Microsoft.ContainerService-bewerkingen voor de volledige lijst met mogelijke acties. Als u de toegang tot specifieke aangepaste resourcegroepen (CRD) of typen wilt filteren, zie Aangepaste resourcetoegang beperken met ABAC-voorwaarden verderop in dit artikel.

  1. Als u uw eigen aangepaste roldefinities wilt maken, kopieert u het volgende bestand, vervangt u <YOUR-SUBSCRIPTION-ID> uw eigen abonnements-id en slaat u deze op als 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. Maak de roldefinitie met behulp van de az role definition create opdracht en stel het --role-definition in op het deploy-view.json bestand dat u in de vorige stap hebt gemaakt.

    az role definition create --role-definition @deploy-view.json 
    
  3. Wijs de roldefinitie toe aan een gebruiker of een andere identiteit met behulp van de az role assignment create opdracht.

        # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS resource ID
    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
    # Create a role assignment for the AKS Deployment Reader role
    az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

Toegang tot aangepaste resources beperken met ABAC-voorwaarden (preview)

Important

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning naar best vermogen. Zodoende zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

Met ABAC-voorwaarden kunt u Microsoft Entra ID roltoewijzingen filteren op specifieke aangepaste resourcegroepen en -soorten , centraal, vanuit Microsoft Entra ID, zonder kubernetes RBAC Role en RoleBinding manifesten per cluster te schrijven. Zie Wat zijn Azure voorwaarden voor roltoewijzing voor achtergrondinformatie over Azure ABAC?

Wanneer moet u ABAC-voorwaarden gebruiken

Gebruik deze functie als u het volgende wilt doen:

  • Beperken welke CRD-groepen of soorten een toegewezen gebruiker kan weergeven of ophalen.
  • Dwing aangepaste toegangsgrenzen voor resources centraal af vanuit Microsoft Entra-id zonder Kubernetes RBAC Role en RoleBinding objecten in elk cluster te beheren.
  • Onderscheid maken tussen CRD's die zijn gepubliceerd door verschillende operators (bijvoorbeeld toestaan secrets-store.csi.x-k8s.io tijdens blokkeren security.istio.io).

Beschikbare voorwaardekenmerken

De volgende aanvraagkenmerken zijn beschikbaar bij het ontwerpen van voorwaarden voor de Kubernetes-API op een AKS-cluster:

Attribute Description
Microsoft.ContainerService/managedClusters/customResources:group De API-groep van de aangepaste resource die wordt geopend (bijvoorbeeld secrets-store.csi.x-k8s.io).
Microsoft.ContainerService/managedClusters/customResources:kind Het type aangepaste resource dat wordt geopend (bijvoorbeeld secretproviderclasses).

Een ABAC-voorwaarde toevoegen aan een roltoewijzing

In het volgende voorbeeld wordt een aangepaste AKS CRD Reader-rol gemaakt die leestoegang verleent tot aangepaste bronnen. Vervolgens wordt de rol toegewezen met een voorwaarde die alleen toegang tot secretproviderclasses toestaat in de groep secrets-store.csi.x-k8s.io (de CRD die wordt gebruikt door de Azure Key Vault-provider voor het Secrets Store CSI-stuurprogramma).

  1. Sla de volgende roldefinitie op in een bestand met de naam crd-reader.json, waarbij u <YOUR-SUBSCRIPTION-ID> vervangt door uw eigen abonnements-id.

    {
        "Name": "AKS CRD Reader",
        "Description": "Lets you read custom resources in the cluster.",
        "Actions": [],
        "NotActions": [],
        "DataActions": [
            "Microsoft.ContainerService/managedClusters/customresources/read"
        ],
        "NotDataActions": [],
        "assignableScopes": [
            "/subscriptions/<YOUR-SUBSCRIPTION-ID>"
        ]
    }
    
  2. Maak de roldefinitie met behulp van de az role definition create opdracht.

    az role definition create --role-definition @crd-reader.json
    
  3. Sla de volgende voorwaarde op in een bestand met de naam abac-condition.txt. Met de voorwaarde kunnen niet-aangepaste resourceleesbewerkingen ongewijzigd worden doorgegeven en worden aangepaste resourceleesbewerkingen beperkt tot een specifieke groep en soort.

    (
     (
      !(ActionMatches{'Microsoft.ContainerService/managedClusters/customresources/read'})
     )
     OR
     (
      @Request[Microsoft.ContainerService/managedClusters/customResources:group] StringEqualsIgnoreCase 'secrets-store.csi.x-k8s.io'
      AND
      @Request[Microsoft.ContainerService/managedClusters/customResources:kind] StringEqualsIgnoreCase 'secretproviderclasses'
     )
    )
    
  4. Maak de roltoewijzing met de voorwaarde met behulp van de az role assignment create opdracht.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS resource ID
    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
    # Create a role assignment for the AKS CRD Reader role with an ABAC condition
    az role assignment create \
        --role "AKS CRD Reader" \
        --assignee <AAD-ENTITY-ID> \
        --scope $AKS_ID \
        --condition "$(cat abac-condition.txt)" \
        --condition-version "2.0" \
        --description "Allow reads on SecretProviderClass resources only"
    

U kunt ook een voorwaarde toevoegen via Azure Portal. Selecteer op de pagina Roltoewijzing toevoegen het tabblad Voorwaarden en selecteer vervolgens Voorwaarde toevoegen en gebruik de visuele editor om de expressie te maken.

De voorwaarde controleren

Nadat de roltoewijzing is doorgegeven (maximaal vijf minuten), meldt u zich aan als de toegewezen gebruiker en controleert u of ze de toegestane CRD kunnen lezen, maar niet andere CRD's.

  1. Haal de clusterreferenties op met behulp van de az aks get-credentials opdracht.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the cluster credentials
    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Lijst secretproviderclasses uit de secrets-store.csi.x-k8s.io groep, waarvoor de voorwaarde is toegestaan. De opdracht moet slagen en een van de twee, namelijk de bestaande hulpbronnen of een lege lijst, retourneren (of een niet-gevonden-foutmelding indien de CRD niet op de cluster is geïnstalleerd).

    kubectl get secretproviderclasses.secrets-store.csi.x-k8s.io --all-namespaces
    
  3. Lijst authorizationpolicies uit de groep Istio security.istio.io , die door de voorwaarde wordt geblokkeerd. De opdracht mislukt met een Forbidden fout van de Microsoft Entra ID autorisatiewebhook (ervan uitgaande dat de Istio CRD is geïnstalleerd op het cluster; kubectl anders wordt een niet-gevonden fout geretourneerd voordat de API-server de autorisatiewebhook bereikt).

    kubectl get authorizationpolicies.security.istio.io --all-namespaces
    

De hulpbronnen opschonen

Microsoft Entra ID-autorisatie uitschakelen

Verwijder Microsoft Entra ID autorisatie met behulp van de az aks update opdracht met de --disable-azure-rbac vlag.

# Set environment variables
export RESOURCE_GROUP=<resource-group-name>
export CLUSTER_NAME=<cluster-name>

# Disable Microsoft Entra ID authorization for the Kubernetes API
az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac

Roltoewijzing verwijderen

  1. Geef roltoewijzingen weer met behulp van de az role assignment list opdracht.

    # Set environment variables
    export RESOURCE_GROUP=<resource-group-name>
    export CLUSTER_NAME=<cluster-name>
    
    # Get the AKS resource ID
    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
    # List role assignments for the AKS cluster
    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. Verwijder de roltoewijzingen met behulp van de az role assignment delete opdracht.

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

Roldefinitie verwijderen

Verwijder een aangepaste roldefinitie met behulp van de az role definition delete opdracht.

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

Resourcegroep en AKS-cluster verwijderen

Verwijder de resourcegroep (en het AKS-cluster dat deze bevat) met behulp van de az group delete opdracht.

# Set environment variables
export RESOURCE_GROUP=<resource-group-name>

# Delete the resource group and all resources in it
az group delete --name $RESOURCE_GROUP --yes --no-wait

Zie de volgende artikelen voor meer informatie over AKS: