Gestion des secrets
Table des matières
- Le problème des secrets
- Sealed Secrets
- SOPS
- HashiCorp Vault
- External Secrets Operator
- Comparaison et choix
- Exercices pratiques
1 - Le problème des secrets
Ce qu'il ne faut PAS faire
# ❌ JAMAIS dans Git !
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
password: cGFzc3dvcmQxMjM= # base64 n'est PAS du chiffrement !
# Base64 est réversible
echo "cGFzc3dvcmQxMjM=" | base64 -d
# password123
# Git conserve l'historique
# Même après suppression, le secret reste dans l'historique
Le dilemme GitOps
Solutions disponibles
| Solution | Type | Complexité |
|---|---|---|
| Sealed Secrets | Chiffrement asymétrique | Faible |
| SOPS | Chiffrement fichier | Moyenne |
| Vault | Gestion centralisée | Élevée |
| External Secrets | Sync depuis provider | Moyenne |
🔝 Retour à la table des matières
2 - Sealed Secrets
Principe
Installation
# Installer le controller
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.24.0/controller.yaml
# Installer kubeseal CLI
brew install kubeseal # macOS
# ou
wget https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.24.0/kubeseal-0.24.0-linux-amd64.tar.gz
Utilisation
# 1. Créer un secret classique (ne pas commiter !)
kubectl create secret generic my-secret \
--from-literal=password=mysuperpassword \
--dry-run=client -o yaml > secret.yaml
# 2. Chiffrer avec kubeseal
kubeseal --format yaml < secret.yaml > sealed-secret.yaml
# 3. Le SealedSecret peut aller dans Git ✅
cat sealed-secret.yaml
# sealed-secret.yaml (peut être committé)
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: my-secret
namespace: default
spec:
encryptedData:
password: AgBj7...long-encrypted-string...==
Scopes
# Strict (namespace + name)
kubeseal --scope strict
# Namespace-wide (même namespace, tout nom)
kubeseal --scope namespace-wide
# Cluster-wide (tout namespace, tout nom)
kubeseal --scope cluster-wide