Lab 9.1 - Création de Roles et RoleBindings
Objectifs du Lab
À la fin de ce lab, vous serez capable de:
- Comprendre le concept de RBAC dans Kubernetes.
- Créer un Role avec des permissions spécifiques.
- Créer un RoleBinding pour lier un utilisateur à un Role.
- Tester les permissions avec kubectl auth can-i.
- Comprendre la différence entre Role et ClusterRole.
Durée Estimée
45-60 minutes
Prérequis
- kubectl installé et configuré.
- Cluster Kubernetes local fonctionnel.
- Connaissances sur RBAC (Chapitre 9.1).
Partie 1: Comprendre RBAC
RBAC (Role-Based Access Control) permet de contrôler qui peut faire quoi dans Kubernetes.
Concepts:
- Role: Définit des permissions dans un namespace.
- ClusterRole: Définit des permissions au niveau du cluster.
- RoleBinding: Lie un utilisateur/groupe/ServiceAccount à un Role (dans un namespace).
- ClusterRoleBinding: Lie un utilisateur/groupe/ServiceAccount à un ClusterRole (cluster-wide).
Partie 2: Création d'un Role
Nous allons créer un Role qui permet de lire et créer des Pods dans un namespace.
Étape 2.1: Créer un Namespace de Test
Créez un namespace pour le test:
kubectl create namespace rbac-test
Étape 2.2: Créer un Role
Créez role-pod-manager.yaml:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: rbac-test
name: pod-manager
rules:
- apiGroups: [""] # Groupe API core (v1)
resources: ["pods"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: [""]
resources: ["pods/status"]
verbs: ["get"]
Explication:
apiGroups: [""]: Groupe API core (ressources comme Pods, Services, etc.).resources: ["pods"]: Ressource sur laquelle les permissions s'appliquent.verbs: Actions autorisées (get, list, watch, create, update, patch, delete).
Appliquez le Role:
kubectl apply -f role-pod-manager.yaml
Vérifiez:
kubectl get role -n rbac-test
kubectl describe role pod-manager -n rbac-test
Partie 3: Création d'un RoleBinding
Nous allons créer un RoleBinding qui lie un ServiceAccount au Role.
Étape 3.1: Créer un ServiceAccount
Créez un ServiceAccount:
kubectl create serviceaccount pod-manager-sa -n rbac-test
Étape 3.2: Créer le RoleBinding
Créez rolebinding-pod-manager.yaml:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: pod-manager-binding
namespace: rbac-test
subjects:
- kind: ServiceAccount
name: pod-manager-sa
namespace: rbac-test
roleRef:
kind: Role
name: pod-manager
apiGroup: rbac.authorization.k8s.io
Explication:
subjects: À qui les permissions sont accordées (ServiceAccount, User, Group).roleRef: Référence au Role (ou ClusterRole) à utiliser.
Appliquez le RoleBinding:
kubectl apply -f rolebinding-pod-manager.yaml
Vérifiez:
kubectl get rolebinding -n rbac-test
kubectl describe rolebinding pod-manager-binding -n rbac-test
Partie 4: Test des Permissions
Étape 4.1: Obtenir le Token du ServiceAccount
Pour tester les permissions, nous devons utiliser le token du ServiceAccount:
# Obtenir le nom du Secret du ServiceAccount
SECRET_NAME=$(kubectl get serviceaccount pod-manager-sa -n rbac-test -o jsonpath='{.secrets[0].name}')
# Extraire le token
TOKEN=$(kubectl get secret $SECRET_NAME -n rbac-test -o jsonpath='{.data.token}' | base64 -d)
# Obtenir le certificat CA
CA_CERT=$(kubectl get secret $SECRET_NAME -n rbac-test -o jsonpath='{.data.ca\.crt}')
Étape 4.2: Tester avec kubectl auth can-i
Testez les permissions avec votre contexte actuel (admin):
# Vérifier si vous pouvez créer des Pods
kubectl auth can-i create pods --namespace=rbac-test
# Vérifier si vous pouvez supprimer des Pods
kubectl auth can-i delete pods --namespace=rbac-test
# Vérifier si vous pouvez lister les Services (devrait être non)
kubectl auth can-i list services --namespace=rbac-test
Étape 4.3: Tester avec le ServiceAccount
Créez un Pod qui utilise le ServiceAccount:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: rbac-test
spec:
serviceAccountName: pod-manager-sa
containers:
- name: test
image: bitnami/kubectl:latest
command: ["sleep", "3600"]
Appliquez le Pod:
kubectl apply -f test-pod.yaml
Exécutez des commandes dans le Pod pour tester les permissions:
# Tester la création d'un Pod (devrait fonctionner)
kubectl exec -n rbac-test test-pod -- kubectl create pod test-pod-2 --image=busybox --dry-run=client -o yaml
# Tester la liste des Pods (devrait fonctionner)
kubectl exec -n rbac-test test-pod -- kubectl get pods
# Tester la liste des Services (devrait échouer)
kubectl exec -n rbac-test test-pod -- kubectl get services
Partie 5: Création d'un ClusterRole
Un ClusterRole s'applique au niveau du cluster entier.
Étape 5.1: Créer un ClusterRole
Créez clusterrole-node-viewer.yaml:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: node-viewer
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "watch"]
Appliquez le ClusterRole:
kubectl apply -f clusterrole-node-viewer.yaml
Partie 6: Nettoyage
Supprimez les ressources créées:
kubectl delete pod test-pod -n rbac-test
kubectl delete rolebinding pod-manager-binding -n rbac-test
kubectl delete role pod-manager -n rbac-test
kubectl delete serviceaccount pod-manager-sa -n rbac-test
kubectl delete clusterrole node-viewer
kubectl delete namespace rbac-test
Résumé du Lab
Dans ce lab, vous avez créé des Roles et RoleBindings pour implémenter RBAC. Vous avez appris à définir des permissions avec des Roles, à lier des utilisateurs/ServiceAccounts avec des RoleBindings, et à tester les permissions.
Prochaines Étapes
Le prochain lab vous montrera comment utiliser les Service Accounts et leurs permissions dans les Pods.
Lab 9.2: Service Accounts et Permissions
Lab créé le: Décembre 2024