Partage via


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

  1. 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
    
  2. 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

  1. 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)
    
  2. 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.

  1. 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>"
        ]
    }
    
  2. 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 
    
  3. 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

  1. 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
    
  2. 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.

    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.

  1. Utilisez le plug-in kubelogin en exécutant la commande suivante :

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. 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.

    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

  1. 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
    
  2. 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 :