E-NO
Kubernetes 8 min de lecture

Maîtriser la liaison de rôle de cluster Kubernetes : guide pratique de commandes

calendar_today Publié : 2026-10-12
update Dernière mise à jour : 2026-10-12
analytics Efficacité SEO : 100%
Illustration du guide technique pour « Maîtriser la liaison de rôle de cluster Kubernetes : guide pratique de commandes ».

Introduction

Le contrôle d'accès basé sur les rôles (RBAC) de Kubernetes est un mécanisme de sécurité fondamental qui régit ce que les utilisateurs et les comptes de service peuvent faire au sein d'un cluster. Parmi ses ressources, la liaison de rôle de cluster (ClusterRoleBinding) est particulièrement puissante, car elle accorde des autorisations sur l'ensemble du cluster, et non sur un seul espace de noms. Une mauvaise configuration d'une liaison peut entraîner un accès trop permissif ou, au contraire, des opérations bloquées qui perturbent les applications. Ce guide propose une approche pratique pour gérer les liaisons de rôle de cluster à l'aide de kubectl, l'outil de ligne de commande standard de Kubernetes. Que vous soyez développeur, ingénieur DevOps ou membre d'une équipe de démarrage, vous apprendrez à inspecter, créer, modifier et résoudre les problèmes liés à ces liaisons de manière efficace et sûre. Nous mettons l'accent sur la sécurité opérationnelle : toujours observer avant de changer, utiliser des commandes précises et vérifier les résultats.

Prérequis et vérification de version

Avant d'exécuter toute commande, confirmez que votre environnement est prêt. Vous avez besoin d'un cluster Kubernetes en cours d'exécution avec kubectl installé et configuré. Vérifiez les versions du client et du serveur pour éviter les surprises de compatibilité :

kubectl version --short

Sortie attendue (les versions peuvent différer) :

Client Version: v1.26.0
Server Version: v1.26.0

Vérifiez l'accès au cluster :

kubectl cluster-info

Si vous voyez des erreurs de connexion, vérifiez votre fichier kubeconfig (emplacement par défaut ~/.kube/config). Un test rapide consiste à lister les nœuds :

kubectl get nodes

Vous devriez voir au moins un nœud en état Ready. Sinon, résolvez les problèmes de connectivité du cluster ou de nœud avant de continuer.

Comprendre les prérequis RBAC :

  • ClusterRole définit un ensemble d'autorisations (par exemple, obtenir des pods, lister des nœuds) à l'échelle du cluster.
  • ClusterRoleBinding accorde ces autorisations à un sujet (utilisateur, groupe ou compte de service) dans tous les espaces de noms.
  • RoleBinding fait de même, mais uniquement dans un espace de noms spécifique.

Utilisez toujours le principe du moindre privilège : n'attribuez que les autorisations nécessaires à la tâche.

Consulter les liaisons de rôle de cluster

Commencez par des observations en lecture seule pour comprendre l'état actuel. Listez toutes les liaisons de rôle de cluster :

kubectl get clusterrolebindings

Exemple de sortie :

NAME                                                   ROLE                                                 AGE
cluster-admin                                          cluster-admin                                        10d
system:controller:node                                 system:controller:node                              10d
system:kube-scheduler                                  system:kube-scheduler                                10d
system:controller:replicaset-controller                system:controller:replicaset-controller              10d
my-custom-binding                                     my-custom-cluster-role                               2h

Pour voir les détails d'une liaison spécifique :

kubectl get clusterrolebinding my-custom-binding -o yaml

Cela montre la définition YAML complète. Concentrez-vous sur les sections roleRef et subjects :

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: my-custom-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: my-custom-cluster-role
subjects:
- kind: ServiceAccount
  name: my-service-account
  namespace: default

Utilisez -o wide pour des colonnes supplémentaires comme l'âge :

kubectl get clusterrolebindings -o wide

Pour un résumé rapide dans un format spécifique, utilisez -o custom-columns :

kubectl get clusterrolebindings -o custom-columns=NAME:.metadata.name,ROLE:.roleRef.name

Question rapide 1 sur 2

Quelle est la différence entre un Role et un ClusterRole en matière d'espaces de noms ?

Le passage indique qu'un Role définit toujours des autorisations dans un espace de noms particulier, et vous devez spécifier l'espace de noms auquel il appartient. Un ClusterRole, en revanche, est une ressource non liée à un espace de noms.

Créer une liaison de rôle de cluster

La création d'une liaison implique généralement deux étapes : définir un ClusterRole, puis le lier. Cependant, vous pouvez créer directement une ClusterRoleBinding qui référence un ClusterRole existant.

Tout d'abord, créez un ClusterRole si nécessaire. Exemple de fichier YAML clusterrole.yaml :

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]

Appliquez-le :

kubectl apply -f clusterrole.yaml

Ensuite, créez un fichier YAML de ClusterRoleBinding clusterrolebinding.yaml :

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-pods-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: pod-reader
subjects:
- kind: User
  name: jane-doe
  apiGroup: rbac.authorization.k8s.io

Appliquez :

kubectl apply -f clusterrolebinding.yaml

Vérifiez :

kubectl get clusterrolebinding read-pods-binding

Sinon, utilisez la commande impérative pour créer rapidement une liaison :

kubectl create clusterrolebinding read-pods-binding --clusterrole=pod-reader --user=jane-doe

Remarque : la commande impérative nécessite que le ClusterRole existe déjà.

Modifier une liaison de rôle de cluster

Pour modifier une liaison, éditez-la directement :

kubectl edit clusterrolebinding read-pods-binding

Cela ouvre le YAML dans votre éditeur par défaut. Apportez des modifications et enregistrez. Pour une modification non interactive, utilisez kubectl patch. Par exemple, pour ajouter un nouveau sujet (un compte de service) à l'aide d'un patch de fusion JSON :

kubectl patch clusterrolebinding read-pods-binding --type='json' -p='[{"op": "add", "path": "/subjects/-", "value": {"kind": "ServiceAccount", "name": "default", "namespace": "default"}}]'

Vérifiez avec kubectl get clusterrolebinding read-pods-binding -o yaml.

Pour remplacer entièrement la liaison avec une nouvelle spécification, utilisez kubectl apply -f avec le fichier YAML mis à jour.

Pièges courants et comment les éviter

Même les utilisateurs expérimentés de Kubernetes rencontrent des problèmes avec les liaisons de rôle de cluster. Voici les erreurs fréquentes et les méthodes de récupération :

  1. Utiliser un RoleBinding au lieu d'un ClusterRoleBinding pour un accès à l'échelle du cluster : un RoleBinding n'accorde des autorisations que dans un espace de noms. Si un pod doit lister des nœuds, il doit avoir une ClusterRoleBinding. Pour corriger, créez plutôt une ClusterRoleBinding.
  2. Groupe d'API incorrect pour les sujets : le apiGroup pour les utilisateurs et les groupes est rbac.authorization.k8s.io, mais pour les comptes de service, il s'agit de la chaîne vide "". Une erreur à ce niveau empêche la liaison de s'appliquer. Vérifiez vos définitions de sujets.
  3. Autorisations trop larges avec cluster-admin : lier un utilisateur au ClusterRole cluster-admin donne un contrôle total. Évitez cela sauf si absolument nécessaire. Créez plutôt un rôle personnalisé avec des autorisations limitées.
  4. Tenter de lier un ClusterRole inexistant : si roleRef.name référence un ClusterRole inexistant, la création de la liaison échoue. Assurez-vous que le rôle existe d'abord, ou créez-les ensemble.
  5. Ne pas tenir compte des liaisons existantes : avant de modifier une liaison, listez toutes les liaisons et comprenez quels sujets sont déjà mappés. Utilisez kubectl auth reconcile pour gérer le RBAC déclaratif en toute sécurité :
kubectl auth reconcile -f clusterrolebinding.yaml

Cette commande garantit que la liaison correspond au fichier sans supprimer involontairement d'autres liaisons.

Question rapide 2 sur 2

Selon le principe du moindre privilège, quel type de liaison (binding) doit être utilisé pour accorder des autorisations dans un espace de noms spécifique ?

Le passage recommande d'attribuer des autorisations au niveau de l'espace de noms lorsque cela est possible, en utilisant des RoleBindings plutôt que des ClusterRoleBindings pour donner aux utilisateurs des droits uniquement dans un espace de noms spécifique.

Vérification et diagnostic

Après avoir apporté des modifications, vérifiez que l'accès fonctionne comme prévu. Utilisez kubectl auth can-i pour vérifier les autorisations d'un sujet :

kubectl auth can-i list pods --as=jane-doe

Sortie attendue : yes ou no. Vous pouvez également tester des verbes spécifiques :

kubectl auth can-i create deployments --as=jane-doe

Pour tester avec un compte de service, utilisez :

kubectl auth can-i list pods --as=system:serviceaccount:default:default

Pour un diagnostic plus approfondi, décrivez la liaison et examinez les événements :

kubectl describe clusterrolebinding read-pods-binding

Si un utilisateur signale des autorisations insuffisantes, vérifiez quels rôles lui sont liés en utilisant kubectl get clusterrolebindings -o yaml | grep -A5 -B5 jane-doe ou utilisez une requête personnalisée avec jq si disponible :

kubectl get clusterrolebindings -o json | jq '.items[] | select(.subjects[]?.name == "jane-doe") | .metadata.name'

Modes de défaillance et récupération

Les échecs courants incluent des erreurs de permission refusée, des références de rôle invalides et des sujets qui ne correspondent pas. Voici une approche structurée :

  1. Permission refusée malgré la liaison : confirmez que le nom et le type du sujet correspondent exactement à la liaison (sensible à la casse). Vérifiez si l'utilisateur utilise réellement l'identité attendue. Pour les comptes de service, assurez-vous que l'espace de noms est correct.
  2. La liaison ne prend pas effet : les changements RBAC sont éventuellement cohérents, mais généralement immédiats. Si l'accès échoue toujours, redémarrez le serveur API ? Non, le RBAC est évalué à chaque requête, aucun redémarrage n'est nécessaire. Attendez quelques secondes et réessayez.
  3. Le rôle référencé est un Role et non un ClusterRole : roleRef doit référencer un ClusterRole pour une ClusterRoleBinding. Si vous référencez un Role, la liaison sera invalide.
  4. Section subjects manquant apiGroup : pour les comptes de service, apiGroup doit être une chaîne vide, souvent omise. Pour les utilisateurs et les groupes, il doit être rbac.authorization.k8s.io.

Les étapes de récupération consistent généralement à modifier la liaison pour corriger l'erreur, puis à vérifier avec kubectl auth can-i.

Liste de contrôle des opérations

Utilisez cette liste de contrôle pour gérer les liaisons de rôle de cluster en toute sécurité :

ÉlémentResponsableFréquence
Examiner toutes les liaisons de rôle de cluster pour un accès trop permissifResponsable sécurité (par ex., Alex Chen)Mensuel
Auditer les liaisons par rapport au principe du moindre privilègeIngénieur DevOps (par ex., Maria Gonzalez)Trimestriel
Vérifier les liaisons référençant des ClusterRoles inexistantsAdministrateur de cluster (par ex., Priya Shah)Hebdomadaire
Valider que les noms et types de sujets sont correctsDéveloppeur (par ex., John Kim)Avant chaque changement
Sauvegarder la configuration RBAC en utilisant kubectl get clusterrolebindings -o yaml > backup.yamlAdministrateur de clusterAvant les changements majeurs

N'oubliez pas de séparer l'observation de l'intervention. Exécutez toujours kubectl get clusterrolebindings et examinez avant de faire des changements. Gardez les changements limités : modifiez une liaison à la fois. Utilisez le contrôle de version pour les fichiers YAML afin de suivre l'historique et permettre le retour en arrière.

Conclusion

Les liaisons de rôle de cluster sont un élément essentiel du RBAC de Kubernetes, contrôlant l'accès à l'échelle du cluster. Maîtriser les commandes de base vous aide à gérer les autorisations de manière efficace et sécurisée. Adoptez toujours une approche prudente : observez l'état actuel, apportez des modifications minimales, vérifiez avec kubectl auth can-i et documentez les chemins de récupération. Appliquez le moindre privilège, auditez régulièrement et évitez les pièges courants. Avec ce guide, vous disposez d'une base solide pour exploiter les liaisons de rôle de cluster dans vos clusters. Pour en savoir plus, explorez la documentation officielle RBAC de Kubernetes et entraînez-vous dans un environnement de test.

Recherches connexes

Score de qualité de l’article

Utilité pour le lecteur 100%
  • check_circle Guide prêt à lire
  • check_circle Exemples pratiques inclus
  • check_circle URL d’article optimisée pour le SEO