#!/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" # --- ServiceAccount --- echo "" echo "2. Création du ServiceAccount ${SA_NAME}..." kubectl create serviceaccount "$SA_NAME" \ --namespace "$NAMESPACE" \ --dry-run=client -o yaml | kubectl apply -f - echo " ✓ ServiceAccount créé" # --- Role namespace-scoped (pas ClusterRole) --- echo "" echo "3. Création du Role (namespace-scoped)..." kubectl apply -f - < "$OUTPUT_FILE" <