volontariapp-sealed-secrets
Playbook opérationnel pas-à-pas pour générer, sceller et déployer un secret chiffré asymétrique (kubeseal) dans le cluster K3s.
- License 许可
- MIT
- 最近更新
- 2026-11-10
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- volontariapp-sealed-secrets
- tags
- [ "sealed-secrets", "kubeseal", "security", "kubernetes", "k3s", "gitops", "playbook" ]
- type
- Playbook
- paths
- [ "deploy/infrastructure/security/sealed-secrets/**", "deploy/apps/overlays/prod/**" ]
- title
- Gestion des Secrets Scellés GitOps (kubeseal)
- status
- stable
- sources
- [ { "id": "datadog-doc", "kind": "local_file", "title": "Procédure de chiffrement Datadog", "resource": "deploy/infrastructure/security/sealed-secrets/DATADOG_KEYS.md" }, { "id": "datadog-sealed", "kind": "local_file", "title": "SealedSecret exemple (datadog-keys)", "resource": "deploy/infrastructure/security/sealed-secrets/datadog-keys-sealed.yaml" }, { "id": "kustomize-prod", "kind": "local_file", "title": "Overlay prod Kustomize", "resource": "deploy/apps/overlays/prod/kustomization.yaml" } ]
- verified
- [ { "at": "2026-11-07T14:28:09Z", "by": "claude-code/agent", "digest": "f45400d7ad6eba03" }, { "at": "2026-11-07T15:34:34Z", "by": "claude-code/agent", "digest": "1a720d176fbb1d02" }, { "at": "2026-11-07T15:49:20Z", "by": "claude-code/agent", "digest": "1a720d176fbb1d02" }, { "at": "2026-11-07T15:55:38Z", "by": "claude-code/agent", "digest": "1a720d176fbb1d02" }, { "at": "2026-11-08T12:28:01Z", "by": "claude-code/agent", "digest": "c207d1cd393741a6" } ]
- generated
- { "at": "2026-10-12T12:02:00Z", "by": "claude-code/agent" }
- mesh_keys
- [ "sealedsecret", "kubeseal" ]
- description
- Playbook opérationnel pas-à-pas pour générer, sceller et déployer un secret chiffré asymétrique (kubeseal) dans le cluster K3s.
02 资源文件 3
- 参考文档index.md527 B
- 参考文档log.md1.6 KB
- 参考文档references/lessons.md2.7 KB
03 SKILL.md 正文
Gestion des Secrets Scellés GitOps (kubeseal)
Quand utiliser ce playbook
Utiliser ce playbook pour toute création, modification ou rotation d'un secret sensible en environnement Kubernetes déployé par ArgoCD :
- Clés d'API externes (Datadog, services tiers)^datadog-doc.
- Mots de passe et identifiants de bases de données de production.
- Tokens JWT, secrets de signature ou certificats TLS privés.
- Identifiants de registre de conteneurs (
ghcr-sealed-secret.yaml)^kustomize-prod.
Règles d'or de sécurité
- Zéro secret en clair dans Git : Aucun fichier contenant un
kind: Secretstandard avec des clés en clair (en texte brut ou en base64) ne doit être commité. Seuls leskind: SealedSecretchiffrés asymétriquement sont autorisés^datadog-sealed. - Éphémérité stricte du fichier source : Le fichier temporaire généré lors du dry-run local doit être supprimé immédiatement après l'exécution de
kubeseal. - Scellement contextuel strict (Strict Scope) : Par défaut, un
SealedSecretest scellé cryptographiquement pour unnameet unnamespaceprécis. Modifier le nom ou le namespace dans le YAML après chiffrement rend le secret indéchiffrable par le contrôleur.
Procédure pas-à-pas
Étape 1 : Récupération du certificat public du cluster (si nécessaire)
Si l'on opère hors du cluster ou que l'on souhaite chiffrer offline :
kubeseal --fetch-cert \
--controller-name=sealed-secrets \
--controller-namespace=kube-system > pub-cert.pem
Étape 2 : Génération du secret éphémère en local (Dry-Run)
Générer le secret standard en local sans jamais l'appliquer au cluster :
kubectl create secret generic <nom-du-secret> \
--namespace <namespace-cible> \
--from-literal=api-key="<VALEUR_SECRETE>" \
--dry-run=client -o yaml > secret-temp.yaml
[!CAUTION] Ne jamais faire de
git addou de commit à cette étape.secret-temp.yamlcontient la valeur en clair.
Étape 3 : Chiffrement asymétrique avec kubeseal
Utiliser kubeseal pour communiquer avec le contrôleur dans kube-system (ou utiliser le certificat public local)^datadog-doc :
kubeseal --controller-name=sealed-secrets \
--controller-namespace=kube-system \
--format=yaml < secret-temp.yaml > <nom-du-secret>-sealed.yaml
(Ou hors ligne avec le certificat récupéré à l'Étape 1) :
kubeseal --cert pub-cert.pem --format=yaml < secret-temp.yaml > <nom-du-secret>-sealed.yaml
Le fichier <nom-du-secret>-sealed.yaml généré est un manifest kind: SealedSecret dont le champ spec.encryptedData ne peut être déchiffré que par la clé privée du contrôleur résidant dans le cluster^datadog-sealed.
Étape 4 : Destruction immédiate du secret en clair
Supprimer immédiatement le fichier temporaire :
rm -f secret-temp.yaml
Étape 5 : Intégration dans Kustomize
- Déplacer le manifest scellé dans le répertoire cible du dépôt
deploy:- Secrets d'infrastructure globale :
deploy/infrastructure/security/sealed-secrets/^datadog-doc. - Secrets applicatifs ou overlays de production :
deploy/apps/overlays/prod/<service>/oudeploy/apps/overlays/prod/^kustomize-prod.
- Secrets d'infrastructure globale :
- Référencer le fichier scellé dans le
kustomization.yamlcorrespondant :# deploy/apps/overlays/prod/kustomization.yaml resources: - ../../base - ghcr-sealed-secret.yaml - <nom-du-secret>-sealed.yaml
Étape 6 : Validation locale Kustomize et déploiement GitOps
- Vérifier la validité de l'assemblage Kustomize :
kubectl kustomize deploy/apps/overlays/prod - Committer et pousser la Pull Request sur le dépôt
deploy. - Une fois mergé, ArgoCD synchronise le
SealedSecret. - Le contrôleur Sealed Secrets dans
kube-systemintercepte la ressource et génère automatiquement leSecretKubernetes standard déchiffré dans le namespace cible. - Vérifier le déchiffrement réussi dans le cluster :
kubectl get sealedsecret <nom-du-secret> -n <namespace-cible> kubectl get secret <nom-du-secret> -n <namespace-cible>
Checklist de validation
- [ ] Aucun secret en clair n'a été commité dans Git (
git statusetgitleaksvérifiés). - [ ] Le fichier temporaire
secret-temp.yamla été supprimé immédiatement^datadog-doc. - [ ] Le manifest scellé est bien de type
kind: SealedSecret(APIbitnami.com/v1alpha1)^datadog-sealed. - [ ] Le
nameet lenamespaceduSealedSecretcorrespondent exactement à ceux requis par le consommateur. - [ ] Le fichier est déclaré dans la liste
resourcesdukustomization.yamlapproprié^kustomize-prod. - [ ]
kubectl kustomizes'exécute sans erreur sur l'overlay.
Références
04 同仓库更多 Skills
volontariapp-user-account-deletion
Suppression de compte en deux temps (PENDING_DELETION): requestDeletionWithUserDeleted, finalizeDeletion, fan-out de user.deleted vers les domaines et gather ws. A utiliser pour tout changement de domain-user touchant la suppression, le statut ou le cycle de vie d'un user.
volontariapp-proto-contract-evolution
Modifier un contrat Protobuf de proto-registry (champ, message, enum, RPC) sans casser la compatibilité wire, puis suivre la cascade proto-registry, PR automatique dans npm-packages, publication, consommateurs. À utiliser avant toute édition d'un .proto.
volontariapp-meta-scripts
Utiliser et faire evoluer la CLI Node de meta (setup, doctor, migrate, certs, repos, bump) et le manifeste repos.json, source unique des repos et unites du workspace.
volontariapp-implement-async-event-flow
Guide pas-à-pas pour concevoir et implémenter un flux asynchrone complet (messaging -> outbox -> post-processors -> ws-service -> client).
research
Investigate a question against high-trust primary sources and capture the findings as a Markdown file in the repo. Use when the user wants a topic researched, docs or API facts gathered, or reading legwork delegated to a background agent.
prototype
Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.