Utiliser le RBAC pour gérer un accès limité à un cluster OVHcloud Managed Kubernetes
Découvrez comment utiliser la puissance du RBAC pour générer un fichier kubeconfig personnalisé avec un accès limité à un cluster OVHcloud Managed Kubernetes
Objectif
Lorsqu'un cluster Kubernetes est créé, via l'espace client OVHcloud, l'API ou le provider Terraform, vous pouvez récupérer son fichier kubeconfig afin d'accéder à votre cluster via la Command Line Interface (CLI) kubectl.
Ce fichier kubeconfig est utilisé pour configurer l'accès à un cluster.
Par défaut, ce fichier kubeconfig vous donne accès à tout ce qui se trouve dans le cluster.
Dans votre entreprise, vous avez peut-être plusieurs équipes, plusieurs types de personnes avec des droits différents. Vous pouvez avoir besoin de contrôler et de limiter l'accès à vos clusters Kubernetes en fonction des utilisateurs et de leurs rôles.
Chez OVHcloud, nous souhaitons vous proposer les meilleurs produits et services. Pour nous, la sécurité est importante. Ce tutoriel vise à vous aider à créer un fichier kubeconfig personnalisé avec des accès différenciés à votre cluster OVHcloud Managed Kubernetes.
Dans ce tutoriel, vous allez :
- découvrir ce qu'est le RBAC
- générer un fichier
kubeconfigpersonnalisé avec un accès limité
RBAC
Le RBAC (Role-Based Access Control) est une méthode permettant de réguler l'accès à des ressources en fonction des rôles de chaque utilisateur.
Cette méthode vous permet de contrôler ce que vos utilisateurs peuvent faire pour quel type de ressources dans votre cluster.
Le RBAC introduit 4 objets Kubernetes :
- Role (définit des permissions au sein d'un namespace donné)
- ClusterRole (identique à Role mais à l'échelle du cluster, pour tous les namespaces)
- RoleBinding (accorde les permissions définies dans un Role à un User, un Group (un ensemble d'utilisateurs) ou un ServiceAccount au sein d'un namespace)
- ClusterRoleBinding (identique à RoleBinding mais pour tous les namespaces)
Lorsque vous créez un Role ou un ClusterRole, plusieurs opérations (verbes) sont autorisées :
- create
- get
- delete
- list
- update
- watch
- ...
Par défaut dans Kubernetes, chaque namespace contient un ServiceAccount lié à un ClusterRole qui vous permet d'effectuer toutes les opérations souhaitées sur toutes les ressources de ce namespace. La création de nouveaux ServiceAccount, Role/ClusterRole et RoleBinding/ClusterRoleBinding vous permettra de contrôler l'accès à un cluster Kubernetes.
Prérequis
Ce tutoriel présuppose que vous disposez déjà d'un cluster OVHcloud Managed Kubernetes opérationnel, ainsi que de connaissances de base sur son fonctionnement.
Suivez également la documentation Déployer une application Hello World afin d'avoir un exemple d'application fonctionnant sur votre cluster.
À ce stade, vous devriez disposer d'un cluster Kubernetes opérationnel avec le déploiement et le pod hello-world, comme ci-dessous :
L'idée est d'avoir un namespace différent du namespace par défaut et plusieurs ressources y étant exécutées.
En pratique
Dans ce tutoriel, nous souhaitons créer un fichier kubeconfig qui permet à quelqu'un d'accéder uniquement au namespace hello-app et de disposer uniquement de droits de lecture sur les ressources Pods de ce namespace.
Alors, que souhaitons-nous obtenir ?
Pour ce cas d'usage donné, nous devons créer plusieurs ressources :
- un
ServiceAcount - un
Role - un
RoleBindingentre leRoleet leServiceAccount
Il est possible de créer les ressources listées ci-dessus en YAML, mais dans ce tutoriel nous allons vous montrer comment les créer directement avec la CLI kubectl.
Créez un ServiceAccount dans le namespace hello-app :
Créez un Role pod-reader qui permet aux utilisateurs d'effectuer les actions get, watch et list (actions en lecture uniquement) sur les Pods :
Créez un RoleBinding qui accorde le Role pod-reader au ServiceAccount sa-pod-reader au sein du namespace hello-app :
Il est maintenant temps de créer le fichier kubeconfig pour le ServiceAccount que vous venez de créer, avec les droits demandés, et d'obtenir un fichier kubeconfig pour ce ServiceAccount :
Vous pouvez désormais utiliser ce fichier kubeconfig restreint pour accéder à votre cluster, et même le tester directement dans la commande kubectl avec l'option --kubeconfig.
Essayez de lister les namespaces de votre cluster :
Vous devriez obtenir un résultat semblable à celui-ci :
Comme vous pouvez le constater, vous avez exécuté la commande kubectl en tant que ServiceAccount que vous avez créé avec un accès limité.
Ce comportement est normal puisqu'avec ce fichier kubeconfig vous n'avez pas les droits nécessaires pour effectuer cette opération.
À la place, listez les pods du namespace hello-app :
Comme vous pouvez le constater, le nouveau fichier kubeconfig dispose d'un accès restreint à votre cluster Kubernetes.
En fonction de vos cas d'usage, vous devrez composer avec les ressources ServiceAcccount, Role, ClusterRole, RoleBinding et ClusterRoleBinding.
Pour plus d'informations, consultez la documentation officielle Using RBAC Authorization. Vous pouvez également utiliser un provider OIDC pour authentifier vos utilisateurs et leur assigner automatiquement des rôles.
Aller plus loin
-
Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.
-
Échangez avec notre communauté d'utilisateurs.