#!/bin/bash # Partie 1 - Génération d'un kubeconfig restreint pour l'équipe externe # À exécuter sur le nœud MASTER # # Ce kubeconfig permet à l'équipe externe de : # ✓ Déployer une application dans le namespace "external-app" # ✓ Gérer Deployments, Services, Pods, ConfigMaps dans ce namespace # ✗ Accéder aux autres namespaces # ✗ Créer des ClusterRoles ou ClusterRoleBindings # ✗ Exécuter kubectl exec (pods/exec interdit) # ✗ Lire les secrets existants (create/update seulement) set -e NAMESPACE="external-app" SA_NAME="external-deployer" TOKEN_DURATION="24h" OUTPUT_FILE="./external-team-kubeconfig.yaml" echo "=== Génération du kubeconfig restreint pour l'équipe externe ===" echo "" echo "Namespace : $NAMESPACE" echo "Compte : $SA_NAME" echo "Expiration : $TOKEN_DURATION" echo "Fichier : $OUTPUT_FILE" echo "" # --- Namespace --- echo "1. Création du namespace ${NAMESPACE}..." kubectl create namespace "$NAMESPACE" --dry-run=client -o yaml | kubectl apply -f - # Labeliser le namespace pour PodSecurity (enforce: restricted pour l'équipe externe) kubectl label namespace "$NAMESPACE" \ pod-security.kubernetes.io/enforce=restricted \ pod-security.kubernetes.io/enforce-version=latest \ pod-security.kubernetes.io/audit=restricted \ pod-security.kubernetes.io/warn=restricted \ --overwrite echo " ✓ Namespace créé avec PodSecurity=restricted" # --- ResourceQuota : empêche le DoS par création massive de ressources --- # POURQUOI: Sans quota, l'équipe externe peut créer 10 000 pods, des centaines de PVC, # ou allouer des dizaines de Go de RAM. Cela peut saturer le scheduler, # remplir le disque etcd ou faire OOM le nœud. echo "" echo "1bis. ResourceQuota anti-DoS dans ${NAMESPACE}..." kubectl apply -f - < "$OUTPUT_FILE" <