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

S’applique à : AKS sur Azure Stack HCI 23H2

Les administrateurs d’infrastructure peuvent utiliser le contrôle d’accès en fonction du rôle Azure (Azure RBAC) pour contrôler qui peut accéder au fichier kubeconfig et aux autorisations dont ils disposent. Les opérateurs Kubernetes peuvent interagir avec des clusters Kubernetes à l’aide de l’outil kubectl en fonction des autorisations données. Azure CLI offre un moyen simple d’obtenir les informations d’identification d’accès et le fichier de configuration kubeconfig pour vous connecter à vos clusters AKS à l’aide de kubectl.

Lorsque vous utilisez l’authentification intégrée entre l’ID Microsoft Entra et AKS, vous pouvez utiliser 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 azure RBAC et Kubernetes RBAC séparément.

Cet article explique comment utiliser Azure RBAC pour l’autorisation de cluster Kubernetes avec l’ID Microsoft Entra et les attributions de rôles Azure.

Pour obtenir une vue d’ensemble conceptuelle, consultez Azure RBAC pour l’autorisation Kubernetes pour AKS activée par Azure Arc.

Avant de commencer

Avant de commencer, vérifiez que les conditions préalables suivantes sont remplies :

  • AKS sur Azure Stack HCI 23H2 prend actuellement en charge l’activation du RBAC Azure uniquement lors de la création du cluster Kubernetes. Vous ne pouvez pas activer Azure RBAC une fois le cluster Kubernetes créé.

  • Installez la dernière version des extensions Azure CLI aksarc et connectedk8s . Notez que vous devez exécuter l’extension aksarc version 1.1.1 ou ultérieure pour activer Azure RBAC. Exécutez az --version pour rechercher votre version actuelle. Si vous devez installer ou mettre à niveau Azure CLI, consultez Installer Azure CLI.

    az extension add --name aksarc
    az extension add --name connectedk8s
    

    Si vous avez déjà installé l’extension aksarc , mettez à jour l’extension vers la dernière version :

    az extension update --name aksarc
    az extension update --name connectedk8s
    
  • Pour interagir avec les clusters Kubernetes, vous devez installer kubectl et kubelogin.

  • Vous avez besoin des autorisations suivantes pour activer Azure RBAC lors de la création d’un cluster Kubernetes :

    • Pour créer un cluster Kubernetes, vous avez besoin du rôle Contributeur Azure Kubernetes Service Arc.
    • Pour utiliser le --enable-azure-rbac paramètre, vous avez besoin du rôle Administrateur de contrôle d’accès en fonction du rôle pour accéder à l’autorisation Microsoft.Authorization/roleAssignments/write . Pour plus d’informations, voir Rôles intégrés Azure.
    • Les nouvelles attributions de rôles peuvent prendre jusqu’à cinq minutes pour se propager et être mises à jour par le serveur d’autorisation.
  • Une fois le RBAC Azure activé, vous pouvez accéder à votre cluster Kubernetes avec les autorisations données à l’aide du mode direct ou du mode proxy.

    • Pour accéder au cluster Kubernetes directement à l’aide de la az aksarc get-credentials commande, vous avez besoin de l’autorisation de rôle utilisateur du cluster Azure Kubernetes Service Arc/provisionedClusterInstances/listUserKubeconfig/action, qui est incluse dans l’autorisation de rôle d’utilisateur du cluster Azure Kubernetes Service Arc.
    • Pour accéder au cluster Kubernetes depuis n’importe où avec un mode proxy à l’aide de la az connectedk8s proxy commande ou à partir de l’Portail Azure, vous avez besoin de l’action Microsoft.Kubernetes/connectedClusterUserCredential/action, qui est incluse dans l’autorisation de rôle utilisateur du cluster Kubernetes avec Azure Arc. Pendant ce temps, vous devez vérifier que les agents et la machine effectuant le processus d’intégration répondent aux exigences réseau spécifiées dans les exigences réseau Kubernetes compatibles avec Azure Arc.
  • Pour utiliser kubectl, vous pouvez y accéder à l’aide d’Azure RBAC ou du groupe d’administration AAD.

    • Pour utiliser kubectl avec Azure RBAC, vous avez besoin du rôle Visionneuse Kubernetes Azure Arc délimité à la ressource de cluster connectée.
    • Pour utiliser kubectl avec le groupe d’administration AAD, vous n’avez pas besoin d’un rôle spécifique, mais vous devez vous assurer que vous êtes dans l’un des groupes dans la liste des groupes de compléments-administrateurs de la ressource de cluster connectée.

Étape 1 : Créer un cluster Kubernetes avec Azure RBAC

Vous pouvez créer un cluster Kubernetes avec Azure RBAC pour l’autorisation et un ID Microsoft Entra pour l’authentification.

az aksarc create -n $aks_cluster_name -g $resource_group_name --custom-location $customlocation_ID --vnet-ids $logicnet_Id --generate-ssh-keys --control-plane-ip $controlplaneIP --enable-azure-rbac

Au bout de quelques minutes, la commande se termine et retourne des informations au format JSON sur le cluster.

Étape 2 : Créer des attributions de rôles pour que les utilisateurs accèdent au cluster

AKS activé par Arc fournit les cinq rôles intégrés suivants. Ils sont similaires aux rôles intégrés Kubernetes avec quelques différences, telles que la prise en charge des CRD. Consultez la liste complète des actions autorisées par chaque rôle intégré Azure.

Role Description
Utilisateur de cluster Kubernetes avec Azure Arc Vous permet de récupérer le fichier kubeconfig basé sur Cluster Connect pour gérer les clusters n’importe où.
Visionneuse Kubernetes Azure Arc Autorise l’accès en lecture seule pour voir la plupart des objets dans un espace de noms.
N’autorise pas l’affichage des secrets, car l’autorisation de lecture sur les secrets permet d’accéder aux informations d’identification ServiceAccount dans l’espace de noms. Ces informations d’identification autorisent à leur tour l’accès à l’API via cette valeur ServiceAccount (forme d’escalade de privilèges).
Enregistreur Kubernetes Azure Arc Autorise l’accès en lecture/écriture pour la plupart des objets dans un espace de noms.
N’autorise pas l’affichage ou la modification des rôles ou des liaisons de rôle. Toutefois, ce rôle permet d’accéder aux secrets et aux pods en cours d’exécution en tant que valeur ServiceAccount dans l’espace de noms. Il peut donc être utilisé pour obtenir les niveaux d’accès d’API de n’importe quelle valeur ServiceAccount dans l’espace de noms.
Administrateur Kubernetes Azure Arc Autorise l’accès administrateur. Elle est destinée à être accordée dans un espace de noms via RoleBinding. Si vous l’utilisez dans RoleBinding, il autorise l’accès en lecture/écriture à la plupart des ressources d’un espace de noms, notamment 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.
Administrateur de cluster Kubernetes Azure Arc Autorise l’accès « superutilisateur » à exécuter n’importe quelle action sur n’importe quelle ressource. Lorsque vous l’utilisez dans ClusterRoleBinding, il offre un contrôle total sur chaque ressource du cluster et dans tous les espaces de noms. Lorsque vous l’utilisez dans RoleBinding, il donne un contrôle total sur chaque ressource de l’espace de noms de liaison de rôle, y compris l’espace de noms lui-même.

Vous pouvez utiliser la az role assignment create commande pour créer des attributions de rôles.

Tout d’abord, obtenez le $ARM-ID cluster cible auquel vous souhaitez attribuer un rôle.

$ARM_ID = (az connectedk8s show -g "$resource_group_name" -n $aks_cluster_name --query id -o tsv)

Utilisez ensuite la az role assignment create commande pour attribuer des rôles à votre cluster Kubernetes. Vous devez fournir la $ARM_ID première étape et la assignee-object-id procédure de cette étape. Il assignee-object-id peut s’agir d’un ID Microsoft Entra ou d’un ID client de principal de service.

L’exemple suivant affecte le rôle Visionneuse Kubernetes Azure Arc au cluster Kubernetes :

az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <assignee-object-id> --scope $ARM_ID

Dans cet exemple, l’étendue est l’ID Azure Resource Manager du cluster. Il peut également s’agir du groupe de ressources contenant le cluster Kubernetes.

Créer des définitions de rôle personnalisé

Vous pouvez choisir de créer votre propre définition de rôle pour utilisation dans les attributions de rôles.

L’exemple suivant montre une définition de rôle qui permet à un utilisateur de lire uniquement les déploiements. Pour plus d’informations, consultez la liste complète des actions de données que vous pouvez utiliser pour créer une définition de rôle. Pour plus d’informations sur la création d’un rôle personnalisé, consultez Étapes de création d’un rôle personnalisé

Pour créer vos propres définitions de rôle personnalisées, copiez l’objet JSON suivant dans un fichier appelé custom-role.json. Remplacez l’espace réservé <subscription-id> par l’ID réel de l’abonnement. Le rôle personnalisé utilise l’une des actions de données et vous permet de voir tous les déploiements dans l’étendue (cluster ou espace de noms) où l’attribution de rôle est créée.

{
    "Name": "AKS Arc Deployment Reader",
    "Description": "Lets you view all deployments in cluster/namespace.",
    "Actions": [],
    "NotActions": [],
    "DataActions": [
        "Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
    ],
    "NotDataActions": [],
    "assignableScopes": [
        "/subscriptions/<YOUR SUBSCRIPTION ID>"
    ]
}

Pour plus d’informations sur les rôles personnalisés et sur la façon de les créer, consultez les rôles personnalisés Azure.

Créez la définition de rôle à l’aide de la az role definition create commande, en définissant le --role-definition paramètre sur le fichier deploy-view.json que vous avez créé à l’étape précédente :

az role definition create --role-definition @deploy-view.json 

Affectez la définition de rôle à un utilisateur ou à une autre identité à l’aide de la az role assignment create commande :

az role assignment create --role "AKS Arc Deployment Reader" --assignee <assignee-object-id> --scope $ARM_ID

Étape 3 : Accéder au cluster Kubernetes

Vous pouvez désormais accéder à votre cluster Kubernetes avec les autorisations données, en utilisant le mode direct ou le mode proxy.

Accéder à votre cluster avec kubectl (mode direct)

Pour accéder au cluster Kubernetes avec les autorisations données, l’opérateur Kubernetes a besoin de Microsoft Entra kubeconfig, que vous pouvez obtenir à l’aide de la az aksarc get-credentials commande. Cette commande permet d’accéder au kubeconfig basé sur l’administrateur, ainsi qu’à un kubeconfig basé sur l’utilisateur. Le fichier kubeconfig basé sur l’administrateur contient des secrets et doit être stocké en toute sécurité et pivoté régulièrement. En revanche, l’ID Microsoft Entra basé sur l’utilisateur kubeconfig ne contient pas de secrets et peut être distribué aux utilisateurs qui se connectent à partir de leurs ordinateurs clients.

Pour exécuter cette commande Azure CLI, vous avez besoin de l’option Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action, qui est incluse dans l’autorisation de rôle d’utilisateur du cluster Azure Kubernetes Service Arc :

az aksarc get-credentials -g "$resource_group_name" -n $aks_cluster_name --file <file-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 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

Accéder à votre cluster à partir d’un appareil client (mode proxy)

Pour accéder au cluster Kubernetes depuis n’importe où avec un mode proxy à l’aide az connectedk8s proxy de la commande, vous avez besoin de l’autorisation de rôle utilisateur du cluster Kubernetes avec Microsoft.Kubernetes/connectedClusterUserCredential/action, qui est incluse dans l’autorisation de rôle d’utilisateur du cluster Kubernetes avec Azure Arc.

Exécutez les étapes suivantes sur un autre appareil client :

  1. Se connecter à l’aide de l’authentification Microsoft Entra

  2. Obtenir le cluster connectez kubeconfig nécessaire pour communiquer avec le cluster n’importe où (même en dehors du pare-feu entourant le cluster) :

    az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
    

    Remarque

    Cette commande ouvre le proxy et bloque l’interpréteur de commandes actuel.

  3. Dans une autre session d’interpréteur de commandes, utilisez kubectl pour envoyer des requêtes au cluster :

    kubectl get pods -A
    

Vous devez voir une réponse du cluster contenant la liste de tous les pods présents dans l’espace de noms default.

Pour plus d’informations, consultez Accéder à votre cluster à partir d’un appareil client.

Nettoyer les ressources

Supprimer une attribution de rôle

# List role assignments
az role assignment list --scope $ARM_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 Arc Deployment Reader"

Étapes suivantes