Sécuriser l'accès au tableau de bord Kubernetes

KubernetesBeginner
Pratiquer maintenant

Introduction

Dans ce défi, vous allez renforcer la sécurité de votre cluster Kubernetes en créant un compte de service (Service Account) disposant de droits en lecture seule pour le tableau de bord (Dashboard). Cet exercice vous permettra de démontrer votre compréhension du contrôle d'accès basé sur les rôles (RBAC). Vous devrez créer un nouveau compte de service, définir un rôle de cluster (ClusterRole) avec des permissions limitées, et lier ce rôle au compte de service. Enfin, vous générerez un jeton d'authentification pour permettre la connexion au tableau de bord.

Sécuriser l'accès au tableau de bord Kubernetes

En tant qu'ingénieur DevOps junior, votre mission consiste à sécuriser votre cluster Kubernetes en mettant en place un accès restreint pour le tableau de bord, prouvant ainsi votre maîtrise des mécanismes RBAC.

Tâches

  • Créer un nouveau compte de service nommé read-only-user dans l'espace de noms kubernetes-dashboard, en utilisant le fichier YAML fourni.
  • Créer un ClusterRole avec des permissions de lecture seule pour l'espace de noms par défaut, autorisant les opérations get, list et watch sur les ressources suivantes : pods, services, nodes, namespaces et deployments.
  • Lier le ClusterRole au nouveau compte de service read-only-user.
  • Générer un jeton (token) pour permettre au compte de service de s'authentifier sur le tableau de bord.

Exigences

  • Travaillez dans le répertoire ~/project.
  • Utilisez l'espace de noms kubernetes-dashboard pour le compte de service.
  • Créez un fichier YAML nommé read-only-dashboard-access.yaml.
  • Le compte de service ne doit posséder que des droits de lecture.
  • Limitez la portée de l'accès à l'espace de noms default.

Contenu attendu du fichier YAML :

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: read-only-user
  namespace: kubernetes-dashboard

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: read-only-dashboard-role
rules:
  - apiGroups: [""]
    resources: ["pods", "services", "nodes", "namespaces", "deployments"]
    verbs: ["get", "list", "watch"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-only-dashboard-access
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: read-only-dashboard-role
subjects:
  - kind: ServiceAccount
    name: read-only-user
    namespace: kubernetes-dashboard

Exemples

Exemple de sortie pour la génération du jeton :

eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9...

Aperçu du tableau de bord après connexion :

  • Visible : Ressources de l'espace de noms, Deployments, Pods.
  • Non visible : Opérations de création, d'édition ou de suppression.

Conseils

  • Démarrez Minikube et appliquez le fichier recommended.yaml du dépôt officiel du Dashboard Kubernetes pour déployer l'interface.
  • Utilisez les commandes kubectl create et kubectl apply.
  • Vérifiez vos configurations de ClusterRole et ClusterRoleBinding.
  • Utilisez la commande kubectl -n kubernetes-dashboard create token read-only-user pour générer le jeton.
✨ Vérifier la solution et pratiquer

Résumé

En résumé, ce défi vous a demandé de renforcer la sécurité de votre cluster Kubernetes en mettant en place un compte de service en lecture seule pour le tableau de bord. Vous avez créé un compte de service, défini un ClusterRole avec des permissions restreintes et lié ces éléments entre eux. Enfin, vous avez généré un jeton d'authentification pour sécuriser l'accès à l'interface utilisateur.