Utiliser le contrôle d’accès en fonction du rôle Azure pour l’autorisation Kubernetes

Lorsque vous tirez parti de 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) . Grâce à cette fonctionnalité, vous n’avez plus à gérer séparément les identités et les informations d’identification des utilisateurs pour Kubernetes. Toutefois, vous devez toujours configurer et gérer séparément Azure RBAC et Kubernetes RBAC.

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.

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 exemple Microsoft.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.

az group create --name myResourceGroup --location westus2

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.

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

La sortie ressemble à l'exemple suivant :

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

Activer Azure RBAC sur un cluster AKS existant

Ajoutez Azure RBAC pour autorisation Kubernetes dans un cluster AKS existant en utilisant la commande az aks update avec l’indicateur enable-azure-rbac.

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

Créer des attributions de rôles pour permettre aux utilisateurs d’accéder au cluster

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.

Les attributions de rôles étendues au cluster AKS entier peuvent être effectuées à partir du panneau Contrôle d’accès (IAM) de la ressource de cluster sur le portail Azure ou en utilisant les commandes Azure CLI suivantes :

Obtenez votre ID de ressource AKS à l’aide de la commande az aks show.

AKS_ID=$(az aks show -g myResourceGroup -n myManagedCluster --query id -o 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.

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

Notes

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>

Remarque

Dans le portail Azure, après avoir créé des attributions de rôles délimitées à un espace de noms souhaité, vous ne pourrez pas voir « attributions de rôles » pour l’espace de noms à une étendue. Vous pouvez les trouver à l’aide de la commande az role assignment list ou répertorier les attributions de rôles pour un utilisateur ou un groupe, auquel vous avez attribué le rôle.

az role assignment list --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 que 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>"
    ]
}

Créez la définition de rôle à l’aide de la commande az role definition create, en définissant --role-definition sur le fichier deploy-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 -g myResourceGroup -n myManagedCluster

Vous pouvez maintenant utiliser kubectl pour gérer votre cluster. Par exemple, vous pouvez répertorier les nœuds de votre cluster à l’aide de kubectl get nodes. La première fois que vous l’exécutez, vous devez vous connecter, comme illustré dans l’exemple suivant :

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

Utiliser Azure RBAC pour l’autorisation Kubernetes avec kubelogin

AKS a créé le plugin 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.

Vous pouvez utiliser le plugin kubelogin en exécutant la commande suivante :

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

Comme pour kubectl, vous devez vous connecter la première fois que vous l’exécutez, comme illustré dans l’exemple suivant :

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

Nettoyer les ressources

Supprimer une attribution de rôle

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

Supprimer une définition de rôle

az role definition delete -n "AKS Deployment Reader"

Supprimer un groupe de ressources et un cluster AKS

az group delete -n myResourceGroup

Étapes suivantes

Pour en savoir plus sur l’authentification AKS, l’autorisation, le RBAC Kubernetes et le RBAC Azure, consultez :