Op rollen gebaseerd toegangsbeheer van Azure gebruiken voor Kubernetes-autorisatie

Wanneer u gebruikmaakt van geïntegreerde verificatie 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 deze functie hoeft u geen gebruikersidentiteiten en referenties voor Kubernetes afzonderlijk te beheren. U moet Echter nog steeds Azure RBAC en Kubernetes RBAC afzonderlijk instellen en beheren.

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.

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

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

az group create --name myResourceGroup --location westus2

Maak een AKS-cluster met beheerde Microsoft Entra-integratie en Azure RBAC voor Kubernetes-autorisatie met behulp van de az aks create opdracht.

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

De uitvoer ziet er ongeveer als volgt uit:

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

Azure RBAC inschakelen op een bestaand AKS-cluster

Voeg Azure RBAC voor Kubernetes-autorisatie toe aan een bestaand AKS-cluster met behulp van de az aks update opdracht met de enable-azure-rbac vlag.

az aks update -g myResourceGroup -n myAKSCluster --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 -g myResourceGroup -n myAKSCluster --disable-azure-rbac

Roltoewijzingen maken voor gebruikers voor toegang tot het cluster

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-Beheer 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-cluster Beheer Hiermee kan supergebruiker elke actie uitvoeren op elke resource. Het geeft volledige controle over elke resource in het cluster en in alle naamruimten.

Rollentoewijzingen binnen het bereik van het hele AKS-cluster kunnen worden uitgevoerd op de blade Toegangsbeheer (IAM) van de clusterresource in Azure Portal of met behulp van de volgende Azure CLI-opdrachten:

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

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

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.

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>

Notitie

Nadat u in Azure Portal roltoewijzingen hebt gemaakt die zijn gericht op een gewenste naamruimte, kunt u 'roltoewijzingen' niet zien voor naamruimte in een bereik. U kunt deze vinden met behulp van de az role assignment list opdracht of roltoewijzingen weergeven voor een gebruiker of groep waaraan u de rol hebt toegewezen.

az role assignment list --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.

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>"
    ]
}

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 

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

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 -g myResourceGroup -n myManagedCluster

Nu kunt u het cluster beheren kubectl . U kunt bijvoorbeeld de knooppunten in uw cluster vermelden met behulp van kubectl get nodes. De eerste keer dat u het uitvoert, moet u zich aanmelden, zoals wordt weergegeven in het volgende voorbeeld:

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

Azure RBAC gebruiken voor Kubernetes-autorisatie met kubelogin

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

U kunt de kubelogin invoegtoepassing gebruiken door de volgende opdracht uit te voeren:

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

Net als kubectlbij de eerste keer dat u het uitvoert, moet u zich aanmelden, zoals wordt weergegeven in het volgende voorbeeld:

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

Resources opschonen

Roltoewijzing verwijderen

# 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>

Roldefinitie verwijderen

az role definition delete -n "AKS Deployment Reader"

Resourcegroep en AKS-cluster verwijderen

az group delete -n myResourceGroup

Volgende stappen

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