Skip to content

RBAC et Service Accounts

Table des Matières

  1. RBAC (Role-Based Access Control)
  2. RĂ´les et ClusterRoles
  3. RoleBindings et ClusterRoleBindings
  4. Service Accounts
  5. Création et Utilisation
  6. Comportement par Défaut

RBAC (Role-Based Access Control)

Quoi ?

Le RBAC (Contrôle d'Accès Basé sur les Rôles) permet de gérer finement les permissions des utilisateurs et des Service Accounts sur un cluster Kubernetes. Il permet par exemple d'autoriser la lecture des logs d'un Pod tout en interdisant sa modification.


RĂ´les et ClusterRoles

Role (Namespace-scopé)

Définit des permissions limitées à un namespace.

Commande :

kubectl create role pod-lecture --verb=get,list,watch --resource=pods,pods/logs

Manifeste YAML :

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-lecture
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log"]
  verbs: ["get", "watch", "list"]

ClusterRole (Cluster-scopé)

Définit des permissions sur tout le cluster.

Commande :

kubectl create clusterrole pod-lecture --verb=watch,list,get --resource=pods,pods/log

Manifeste YAML :

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


RoleBindings et ClusterRoleBindings

RoleBinding

Lie un Role Ă  un utilisateur/Service Account dans un namespace.

Commande :

kubectl create rolebinding pod-lecture --user=dev --role=pod-lecture

Manifeste YAML :

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: default
  name: pod-lecture
subjects:
- kind: User
  name: dev
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-lecture
  apiGroup: rbac.authorization.k8s.io

ClusterRoleBinding

Lie un ClusterRole Ă  un utilisateur/Service Account pour tout le cluster.

Commande :

kubectl create clusterrolebinding pod-lecture --user=dev --clusterrole=pod-lecture

Manifeste YAML :

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: pod-lecture
subjects:
- kind: User
  name: dev
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: pod-lecture
  apiGroup: rbac.authorization.k8s.io


Service Accounts

Quoi ?

Un Service Account est un compte utilisé par les conteneurs pour interagir avec l'API Kubernetes. Il est associé à des permissions via RBAC (RoleBinding/ClusterRoleBinding).


Création et Utilisation

Commande :

kubectl create serviceaccount mon-serviceaccount

Manifeste YAML :

apiVersion: v1
kind: ServiceAccount
metadata:
  name: mon-serviceaccount

Exemple de RoleBinding pour un Service Account :

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: default
  name: pod-lecture
subjects:
- kind: ServiceAccount
  name: mon-serviceaccount
  namespace: default
roleRef:
  kind: Role
  name: pod-lecture
  apiGroup: rbac.authorization.k8s.io


Comportement par Défaut

  • Par dĂ©faut, un Pod utilise le Service Account default.
  • Un token d'accès est automatiquement montĂ© dans :
    /var/run/secrets/kubernetes.io/serviceaccount/token
    
  • DĂ©sactiver cette fonctionnalitĂ© :
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: build-robot
    automountServiceAccountToken: false  # Désactive le montage automatique
    
    Ou directement sur un Pod :
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      serviceAccountName: build-robot
      automountServiceAccountToken: false  # Désactive pour ce Pod
    

Récapitulatif

Objet RBAC Portée Lien avec
Role Namespace Utilisateurs/Service Accounts (via RoleBinding)
ClusterRole Cluster Utilisateurs/Service Accounts (via ClusterRoleBinding)
ServiceAccount Pods Permissions via RBAC