Utiliser le contrôle d’accès en fonction du rôle Azure pour l’autorisation Kubernetes
Cet article explique comment utiliser Azure RBAC pour l’autorisation Kubernetes, permettant une gestion unifiée et un contrôle d’accès aux ressources Azure, AKS et Kubernetes. Pour plus d’informations, consultez Azure RBAC pour l’autorisation Kubernetes.
Remarque
Lorsque vous utilisez l’authentification intégrée entre Microsoft Entra ID et AKS, vous pouvez sélectionner des utilisateurs, des groupes ou des principaux de service Microsoft Entra en tant que sujets dans le contrôle d’accès en fonction du rôle Kubernetes (RBAC Kubernetes). Avec cette fonctionnalité, vous n’avez pas besoin de gérer séparément les identités utilisateur et les informations d’identification pour Kubernetes. Toutefois, vous devez toujours configurer et gérer séparément le RBAC Azure et le RBAC Kubernetes.
Avant de commencer
- La version 2.24.0 ou ultérieure d’Azure CLI doit être installée et configurée. Exécutez
az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI. - Vous avez besoin de
kubectl
, une version minimale de 1.18.3. - Vous devez activer l’intégration Microsoft Entra managée sur votre cluster avant de pouvoir ajouter Azure RBAC pour l’autorisation Kubernetes. Si vous devez activer l’intégration gérée de Microsoft Entra, consultez Utiliser l’ID Microsoft Entra dans AKS.
- Si vous avez des définitions CRD et que vous créez des définitions de rôle personnalisées, le seul moyen actuellement de couvrir les CRD est d’utiliser
Microsoft.ContainerService/managedClusters/*/read
. Pour les autres objets, vous pouvez utiliser les groupes d’API spécifiques, par exempleMicrosoft.ContainerService/apps/deployments/read
. - Les nouvelles attributions de rôles peuvent prendre jusqu’à cinq minutes pour se propager et être mises à jour par le serveur d’autorisation.
- Azure RBAC pour l’autorisation Kubernetes nécessite que le locataire Microsoft Entra configuré pour l’authentification soit identique au locataire de l’abonnement qui contient votre cluster AKS.
Créer un nouveau cluster AKS avec l’intégration managée de Microsoft Entra et Azure RBAC pour l’autorisation Kubernetes
Créez un groupe de ressources Azure à l’aide de la commande
az group create
.export RESOURCE_GROUP=<resource-group-name> export LOCATION=<azure-region> az group create --name $RESOURCE_GROUP --location $LOCATION
Créez un cluster AKS avec l’intégration managée de Microsoft Entra et Azure RBAC pour l’autorisation Kubernetes à l’aide de la commande
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
Vous devez obtenir un résultat semblable à l’exemple de sortie qui suit :
"AADProfile": { "adminGroupObjectIds": null, "clientAppId": null, "enableAzureRbac": true, "managed": true, "serverAppId": null, "serverAppSecret": null, "tenantId": "****-****-****-****-****" }
Activer Azure RBAC sur un cluster AKS existant
Ajoutez le RBAC Azure pour l’autorisation Kubernetes dans un cluster AKS existant en utilisant la commande
az aks update
avec l’indicateur--enable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
Désactiver Azure RBAC pour l’autorisation Kubernetes à partir d’un cluster AKS
Supprimez le RBAC Azure pour l’autorisation Kubernetes d’un cluster AKS existant en utilisant la commande
az aks update
avec l’indicateur--disable-azure-rbac
.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
Rôles intégrés AKS
AKS propose les rôles intégrés suivants :
Rôle | Description |
---|---|
Azure Kubernetes Service RBAC Reader | Autorise l’accès en lecture seule pour voir la plupart des objets dans un espace de noms. Ce rôle n’autorise pas l’affichage des rôles et des liaisons de rôles. Il n’autorise pas l’affichage des Secrets , car la lecture du contenu de Secrets donne accès aux informations d’identification ServiceAccount dans l’espace de noms, ce qui permet l’accès aux API comme n’importe quel ServiceAccount dans l’espace de noms (une forme d’élévation de privilèges). |
Azure Kubernetes Service RBAC Writer | Autorise l’accès en lecture/écriture pour la plupart des objets dans un espace de noms. Ce rôle n’autorise pas l’affichage ni la modification des rôles et des liaisons de rôles. Toutefois, il permet d’accéder à Secrets et d’exécuter des pods comme tout ServiceAccount dans l’espace de noms. Il peut donc être utilisé pour obtenir les niveaux d’accès API de n’importe quel ServiceAccount dans l’espace de noms. |
Azure Kubernetes Service RBAC Admin | Autorise l’accès administrateur, normalement accordé au sein d’un espace de noms. Autorise l’accès en lecture/écriture à la plupart des ressources dans un espace de noms (ou dans l’étendue du cluster), y compris la possibilité de créer des rôles et des liaisons de rôles dans l’espace de noms. Ce rôle n’autorise pas l’accès en écriture au quota de ressources ou à l’espace de noms lui-même. |
Azure Kubernetes Service RBAC Cluster Admin | Autorise l’accès de super utilisateur qui permet d’effectuer n’importe quelle action sur toutes les ressources. Ce rôle donne un contrôle total sur l’ensemble des ressources dans le cluster et dans tous les espaces de noms. |
Créer des attributions de rôles pour l’accès au cluster
Obtenez votre ID de ressource AKS à l’aide de la commande
az aks show
.AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
Créez une affectation de rôle à l’aide de la commande
az role assignment create
.<AAD-ENTITY-ID>
peut être un nom d’utilisateur ou l’ID client d’un principal de service. L’exemple suivant crée une attribution de rôle pour le rôle Administrateur RBAC Azure Kubernetes Service.az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Remarque
Vous pouvez créer les attributions de rôle Azure Kubernetes Service RBAC Reader et Azure Kubernetes Service RBAC Writer étendues à un espace de noms spécifique au sein du cluster à l’aide de la commande
az role assignment create
et en définissant l’étendue sur l’espace de noms souhaité.az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
Créer des définitions de rôles personnalisées
Voici un exemple de définition de rôle personnalisé qui permet à un utilisateur de lire uniquement les déploiements et rien d’autre. Pour obtenir la liste complète des actions possibles, consultez Opérations Microsoft.ContainerService.
Pour créer vos propres définitions de rôle personnalisées, copiez le fichier suivant, en remplaçant
<YOUR SUBSCRIPTION ID>
par votre propre ID d’abonnement, puis enregistrez-le en tant quedeploy-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>" ] }
Créez la définition de rôle à l’aide de la commande
az role definition create
, en définissant--role-definition
sur le fichierdeploy-view.json
que vous avez créé à l’étape précédente.az role definition create --role-definition @deploy-view.json
Attribuez la définition de rôle à un utilisateur ou à une autre identité à l’aide de la commande
az role assignment create
.az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
Utiliser Azure RBAC pour l’autorisation Kubernetes avec kubectl
Vérifiez que vous disposez du rôle intégré Utilisateur de cluster Azure Kubernetes Service, puis obtenez l’attribut kubeconfig de votre cluster AKS à l’aide de la commande
az aks get-credentials
.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Vous pouvez maintenant utiliser
kubectl
pour gérer votre cluster. Par exemple, vous pouvez répertorier les nœuds de votre cluster à l’aide dekubectl get nodes
.kubectl get nodes
Exemple de sortie :
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
Utiliser Azure RBAC pour l’autorisation Kubernetes avec kubelogin
AKS a créé le plug-in kubelogin
pour faciliter le déblocage d’autres scénarios, par exemple des connexions non interactives, des versions antérieures de kubectl
, ou l’exploitation de l’authentification unique sur plusieurs clusters sans avoir à se connecter à un nouveau cluster.
Utilisez le plug-in
kubelogin
en exécutant la commande suivante :export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig
Vous pouvez maintenant utiliser
kubectl
pour gérer votre cluster. Par exemple, vous pouvez répertorier les nœuds de votre cluster à l’aide dekubectl get nodes
.kubectl get nodes
Exemple de sortie :
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
Nettoyer les ressources
Supprimer une attribution de rôle
Répertoriez les attributions de rôles à l’aide de la commande
az role assignment list
.az role assignment list --scope $AKS_ID --query [].id --output tsv
Supprimez des attributions de rôles à l’aide de la commande
az role assignment delete
.az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
Supprimer une définition de rôle
Supprimez la définition de rôle personnalisée à l’aide de la commande
az role definition delete
.az role definition delete --name "AKS Deployment Reader"
Supprimer un groupe de ressources et un cluster AKS
Supprimez le groupe de ressources et le cluster AKS à l’aide de la commande
az group delete
.az group delete --name $RESOURCE_GROUP --yes --no-wait
Étapes suivantes
Pour en savoir plus sur l’authentification AKS, l’autorisation, le RBAC Kubernetes et le RBAC Azure, consultez :
Azure Kubernetes Service