RBAC et Service Accounts¶
Table des Matières¶
- RBAC (Role-Based Access Control)
- RĂ´les et ClusterRoles
- RoleBindings et ClusterRoleBindings
- Service Accounts
- Création et Utilisation
- 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é :
Ou directement sur un Pod :
apiVersion: v1 kind: ServiceAccount metadata: name: build-robot automountServiceAccountToken: false # Désactive le montage automatiqueapiVersion: 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 |