Création et Utilisation SealedSecret
Introduction
La gestion des secrets est primoridiale pour protéger les données sensibles.
Toutefois, les Secrets kubernets natifs présentent une limite : ils sont simplement encodés en base64 dans les manifests, ce qui les expose à des risques d'attaques.
Une solution efficace pour palier à ce manque de sécurité consiste à utiliser kukeseal pour transformer les secrets classiques en Sealed Secrets.
Cette technologie chiffre les secrets avant leur stockage dans un dépôt Git à l'aide d'une clé privée du cluster
Pré-requis
Accéder au cluster Kubernetes
SealedSecrets Controller doit être installé et configuré sur le cluster Kubernetes
Politique de sécurité
Accès restreint
Restreindre l’accès au namespace uniquement aux administrateurs.
Limiter l’accès à la clé privée du controller : elle ne doit jamais être exposée ou exportée
Limiter les commandes en fonction de l’utilisateur
Gestion des fichiers
Ne jamais versionner les fichiers Secret non chiffrés dans un dépôt Git.
Versionner uniquement les fichiers SealedSecret chiffrés.
Installation de Kubeseal
Pour installer kubeseal, veuillez consulter la documentation officielle disponible sur le dépôt GitHub :
https://github.com/bitnami-labs/sealed-secrets/releases/
Création d’un SealedSecret
1. Créer un Secret Kubernetes
Commencez par créer un fichier YAML contenant un secret Kubernetes standard :
apiVersion: v1
kind: Secret
metadata:
creationTimestamp: null
name: NomDuSecret
namespace: NomNamespace
data:
username: <valeur encodée en base64>
password: <valeur encodée en base64>
Astuce: Encodage en base64 :
echo -n 'valeur' | base64
2. Chiffre le Secret avec kubeseal
Utilisez la commande suivante pour chiffrer le secret :
kubeseal --format=yaml \
--controller-namespace=sigma-kubeseal \
--controller-name=sealed-secrets \
< "fichier".yaml > sealed-"fichier".yaml
3. Appliquer le SealedSecret dans Openshift
Déployez le SealedSecret avec la commande suivante :
oc apply -f sealed-"fichier".yaml
4. Vérifications
Vérifiez que le SealedSecret a bien été pris en charge :
kubectl get sealedsecrets
Pour confirmer que le secret est accessible aux pods, vous pouvez le décoder :
kubectl get secret NomDuSecret -o jsonpath="{.data.username}" | base64 --decode