Share via


Op rollen gebaseerd toegangsbeheer van Azure gebruiken voor Kubernetes-autorisatie

In dit artikel wordt beschreven hoe u Azure RBAC gebruikt voor Kubernetes-autorisatie, waarmee u geïntegreerd beheer en toegangsbeheer kunt uitvoeren voor Azure-resources, AKS- en Kubernetes-resources. Zie Azure RBAC voor Kubernetes-autorisatie voor meer informatie.

Notitie

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-op rollen gebaseerd toegangsbeheer (Kubernetes RBAC). Met deze functie hoeft u gebruikersidentiteiten en referenties voor Kubernetes niet afzonderlijk te beheren. U moet Echter nog steeds Azure RBAC en Kubernetes RBAC afzonderlijk instellen en beheren.

Voordat u begint

  • U moet Azure CLI versie 2.24.0 of hoger hebben geïnstalleerd en geconfigureerd. Voer az --version uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.
  • U hebt een minimumversie van 1.18.3 nodigkubectl.
  • U hebt beheerde Microsoft Entra-integratie in uw cluster nodig voordat u Azure RBAC voor Kubernetes-autorisatie kunt toevoegen. Zie Microsoft Entra-id gebruiken in AKS als u beheerde Microsoft Entra-integratie wilt inschakelen.
  • Als u CRD's hebt en aangepaste roldefinities maakt, is het gebruik van CRD's de enige manier om crd's te gebruiken Microsoft.ContainerService/managedClusters/*/read. Voor de resterende objecten kunt u de specifieke API-groepen gebruiken, zoals Microsoft.ContainerService/apps/deployments/read.
  • Het kan vijf minuten duren voordat nieuwe roltoewijzingen zijn doorgegeven en bijgewerkt door de autorisatieserver.
  • Azure RBAC voor Kubernetes-autorisatie vereist dat de Microsoft Entra-tenant die is geconfigureerd voor verificatie, hetzelfde is als de tenant voor het abonnement dat uw AKS-cluster bevat.

Een nieuw AKS-cluster maken met beheerde Microsoft Entra-integratie en Azure RBAC voor Kubernetes-autorisatie

  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-cluster met beheerde Microsoft Entra-integratie en Azure RBAC voor Kubernetes-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
    

    De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:

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

Azure RBAC inschakelen op een bestaand AKS-cluster

  • Schakel Azure RBAC in voor Kubernetes-autorisatie op een bestaand AKS-cluster met behulp van de az aks update opdracht met de --enable-azure-rbac vlag.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
    

Azure RBAC uitschakelen voor Kubernetes-autorisatie vanuit een AKS-cluster

  • Verwijder Azure RBAC voor Kubernetes-autorisatie uit een bestaand AKS-cluster met behulp van de az aks update opdracht met de --disable-azure-rbac vlag.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
    

Ingebouwde AKS-rollen

AKS biedt de volgende ingebouwde rollen:

Rol Beschrijving
Azure Kubernetes Service RBAC Reader Staat alleen-lezentoegang toe om de meeste objecten in een naamruimte te zien. Het is niet toegestaan om rollen of rolbindingen weer te geven. Deze rol staat weergave niet toe Secrets, omdat het lezen van de inhoud van Geheimen toegang biedt tot ServiceAccount-referenties in de naamruimte, waardoor API-toegang wordt toegestaan als een ServiceAccount in de naamruimte (een vorm van escalatie van bevoegdheden).
Azure Kubernetes Service RBAC Writer Hiermee staat u lees-/schrijftoegang toe tot de meeste objecten in een naamruimte. Deze rol staat het weergeven of wijzigen van rollen of rolbindingen niet toe. Met deze rol kunnen pods echter worden geopend Secrets en uitgevoerd als een ServiceAccount in de naamruimte, zodat deze kan worden gebruikt om de API-toegangsniveaus van een ServiceAccount in de naamruimte te verkrijgen.
Azure Kubernetes Service RBAC-beheerder Hiermee staat u beheerderstoegang toe, bedoeld om binnen een naamruimte te worden verleend. Hiermee staat u lees-/schrijftoegang toe tot de meeste resources in een naamruimte (of clusterbereik), inclusief de mogelijkheid om rollen en rolbindingen binnen de naamruimte te maken. Met deze rol is schrijftoegang tot het resourcequotum of de naamruimte zelf niet toegestaan.
Azure Kubernetes Service RBAC-clusterbeheerder Hiermee kan supergebruiker elke actie uitvoeren op elke resource. 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.

    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 azure Kubernetes Service RBAC-beheerdersrol .

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

    Notitie

    U kunt de roltoewijzingen azure Kubernetes Service RBAC Reader en Azure Kubernetes Service RBAC Writer 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

Met de volgende aangepaste roldefinitie kan een gebruiker alleen implementaties lezen en niets anders. Zie Microsoft.ContainerService-bewerkingen voor de volledige lijst met mogelijke acties.

  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.

    az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

Azure RBAC gebruiken voor Kubernetes-autorisatie met kubectl

  1. Zorg ervoor dat u de ingebouwde rol Azure Kubernetes Service-clustergebruiker hebt en haal vervolgens de kubeconfig van uw AKS-cluster op met behulp van de az aks get-credentials opdracht.

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. U kunt nu uw kubectl cluster beheren. U kunt bijvoorbeeld de knooppunten in uw cluster vermelden met behulp van kubectl get nodes.

    kubectl get nodes
    

    Voorbeelduitvoer:

    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
    

Azure RBAC gebruiken voor Kubernetes-autorisatie met kubelogin

AKS heeft de kubelogin invoegtoepassing gemaakt om scenario's zoals niet-interactieve aanmeldingen, oudere kubectl versies of het gebruik van eenmalige aanmelding op meerdere clusters op te heffen zonder dat u zich hoeft aan te melden bij een nieuw cluster.

  1. Gebruik de kubelogin invoegtoepassing door de volgende opdracht uit te voeren:

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. U kunt nu uw kubectl cluster beheren. U kunt bijvoorbeeld de knooppunten in uw cluster vermelden met behulp van kubectl get nodes.

    kubectl get nodes
    

    Voorbeelduitvoer:

    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
    

Resources opschonen

Roltoewijzing verwijderen

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

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. Verwijder roltoewijzingen met behulp van de az role assignment delete opdracht.

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

Roldefinitie verwijderen

  • Verwijder de 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 met behulp van de az group delete opdracht.

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

Volgende stappen

Zie voor meer informatie over AKS-verificatie, autorisatie, Kubernetes RBAC en Azure RBAC: