Utiliser le contrôle d’accès en fonction du rôle Azure pour définir l’accès au fichier config Kubernetes dans Azure Kubernetes Service (AKS)

Vous pouvez interagir avec les clusters Kubernetes à l’aide de l’outil kubectl. L’interface Azure CLI permet d’obtenir facilement les informations d’identification d’accès et le fichier de configuration kubeconfig pour vous connecter à vos clusters AKS à l’aide de kubectl. Vous pouvez utiliser un contrôle d’accès en fonction du rôle Azure (RBAC Azure) pour limiter les utilisateurs qui peuvent accéder au fichier kubeconfig et les autorisations dont ils disposent.

Cet article vous montre comment attribuer des rôles Azure qui limitent les utilisateurs pouvant récupérer les informations de configuration d’un cluster AKS.

Avant de commencer

  • Cet article suppose que vous avez un cluster AKS existant. Si vous avez besoin d’un cluster AKS, créez-en un à l'aide d’Azure CLI, d’Azure PowerShell ou du portail Azure.
  • Pour les besoins de cet article, vous devez également exécuter Azure CLI version 2.0.65 ou ultérieure. Exécutez az --version pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.

Autorisations disponibles pour les rôles de cluster

Lorsque vous interagissez avec un cluster AKS à l’aide de l’outil kubectl, un fichier de configuration, nommékubeconfig, définit les informations de connexion au cluster. Ce fichier de configuration est généralement stocké dans ~/.kube/config. Plusieurs clusters peuvent être définis dans ce fichier kubeconfig. Vous pouvez basculer entre les clusters à l’aide de la commande kubectl config use-context.

La commande az aks get-credentials vous permet d’obtenir les informations d’identification d’accès à un cluster AKS et les fusionne dans le fichier kubeconfig. Vous pouvez utiliser RBAC Azure pour contrôler l’accès à ces informations d’identification. Ces rôles Azure vous permettent de définir les utilisateurs qui peuvent récupérer le fichier kubeconfig et les autorisations dont ils disposent dans le cluster.

Il existe deux rôles Azure que vous pouvez appliquer à un utilisateur ou un groupe Microsoft Entra :

Remarque

Sur des clusters qui utilisent Microsoft Entra ID, les utilisateurs ayant le rôle clusterUser disposent d’un fichier kubeconfig vide qui les invite à se connecter. Une fois connectés, les utilisateurs ont un accès en fonction de leurs paramètres utilisateur ou de groupe Microsoft Entra. Les utilisateurs disposant du rôle clusterAdmin ont un accès administrateur.

Sur des clusters qui n’utilisent pas Microsoft Entra ID, le rôle clusterUser a le même effet que le rôle clusterAdmin.

Affecter des autorisations de rôle à un utilisateur ou groupe

Pour attribuer un des rôles disponibles, vous devez obtenir l’ID de la ressource du cluster AKS et l’ID du compte d’utilisateur ou du groupe Microsoft Entra en procédant comme suit :

  1. Obtenez l’ID de la ressource du cluster à l’aide de la commande az aks show du cluster nommé myAKSCluster dans le groupe de ressources myResourceGroup. Fournissez votre propre nom de groupe de ressources et de cluster, au besoin.
  2. Utilisez les commandes az account show et az ad user show pour obtenir votre ID d’utilisateur.
  3. Attribuez un rôle à l’aide de la commande az role assignment create.

L’exemple suivant affecte le Rôle d’administrateur de cluster Azure Kubernetes Service à un compte d’utilisateur individuel :

# Get the resource ID of your AKS cluster
AKS_CLUSTER=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query id -o tsv)

# Get the account credentials for the logged in user
ACCOUNT_UPN=$(az account show --query user.name -o tsv)
ACCOUNT_ID=$(az ad user show --id $ACCOUNT_UPN --query objectId -o tsv)

# Assign the 'Cluster Admin' role to the user
az role assignment create \
    --assignee $ACCOUNT_ID \
    --scope $AKS_CLUSTER \
    --role "Azure Kubernetes Service Cluster Admin Role"

Si vous voulez attribuer des autorisations à un groupe Microsoft Entra, mettez à jour le paramètre --assignee présenté dans l’exemple précédent avec l’ID d’objet du groupe plutôt que celui de l’utilisateur.

Pour obtenir l’ID d’objet d’un groupe, utilisez la commande az ad group show. La commande suivante permet d’obtenir l’ID d’objet du groupe Microsoft Entra nommé appdev :

az ad group show --group appdev --query objectId -o tsv

Important

Dans certains cas, tels que des utilisateurs invités Microsoft Entra, le user.name du compte est différent du userPrincipalName.

$ az account show --query user.name -o tsv
user@contoso.com

$ az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv
user_contoso.com#EXT#@contoso.onmicrosoft.com

Dans ce cas, définissez la valeur de ACCOUNT_UPN sur userPrincipalName à partir de l’utilisateur Microsoft Entra. Par exemple, si votre compte user.name est user@contoso.com, cette action ressemblerait à l’exemple suivant :

ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)

Obtenir et vérifier les informations de configuration

Une fois les rôles attribués, utilisez la commande az aks get-credentials pour obtenir la définition kubeconfig de votre cluster AKS. L’exemple suivant permet d’obtenir les informations d’identification --admin, ce qui fonctionne correctement si l’utilisateur a reçu le rôle d’administrateur de cluster :

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin

Vous pouvez ensuite utiliser la commande kubectl config view pour vérifier que le contexte du cluster indique que les informations de configuration de l’administrateur ont été appliquées.

$ kubectl config view

Vous devez obtenir un résultat semblable à l’exemple de sortie qui suit :

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://myaksclust-myresourcegroup-19da35-4839be06.hcp.eastus.azmk8s.io:443
  name: myAKSCluster
contexts:
- context:
    cluster: myAKSCluster
    user: clusterAdmin_myResourceGroup_myAKSCluster
  name: myAKSCluster-admin
current-context: myAKSCluster-admin
kind: Config
preferences: {}
users:
- name: clusterAdmin_myResourceGroup_myAKSCluster
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: e9f2f819a4496538b02cefff94e61d35

Supprimer des autorisations de rôle

Pour supprimer des attributions de rôles, utilisez la commande az role assignment delete. Spécifiez l’ID du compte et l’ID de la ressource de cluster, tels vous les avez obtenus dans les étapes précédentes. Si vous avez attribué le rôle à un groupe et non à un utilisateur, spécifiez l’ID d’objet du groupe approprié et non l’ID d’objet du compte pour le paramètre --assignee.

az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER

Étapes suivantes

Pour mieux sécuriser l’accès aux clusters AKS, intégrez l’authentification Microsoft Entra.