AGENT SKILL

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
所属仓库
Volontariapp/meta
最近更新
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

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é

  1. Zéro secret en clair dans Git : Aucun fichier contenant un kind: Secret standard avec des clés en clair (en texte brut ou en base64) ne doit être commité. Seuls les kind: SealedSecret chiffrés asymétriquement sont autorisés^datadog-sealed.
  2. É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.
  3. Scellement contextuel strict (Strict Scope) : Par défaut, un SealedSecret est scellé cryptographiquement pour un name et un namespace pré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 add ou de commit à cette étape. secret-temp.yaml contient 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

  1. 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>/ ou deploy/apps/overlays/prod/^kustomize-prod.
  2. Référencer le fichier scellé dans le kustomization.yaml correspondant :
    # 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

  1. Vérifier la validité de l'assemblage Kustomize :
    kubectl kustomize deploy/apps/overlays/prod
    
  2. Committer et pousser la Pull Request sur le dépôt deploy.
  3. Une fois mergé, ArgoCD synchronise le SealedSecret.
  4. Le contrôleur Sealed Secrets dans kube-system intercepte la ressource et génère automatiquement le Secret Kubernetes standard déchiffré dans le namespace cible.
  5. 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 status et gitleaks vérifiés).
  • [ ] Le fichier temporaire secret-temp.yaml a été supprimé immédiatement^datadog-doc.
  • [ ] Le manifest scellé est bien de type kind: SealedSecret (API bitnami.com/v1alpha1)^datadog-sealed.
  • [ ] Le name et le namespace du SealedSecret correspondent exactement à ceux requis par le consommateur.
  • [ ] Le fichier est déclaré dans la liste resources du kustomization.yaml approprié^kustomize-prod.
  • [ ] kubectl kustomize s'exécute sans erreur sur l'overlay.

Références

04 同仓库更多 Skills

Volontariapp
Volontariapp/meta

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.

★ 0
Volontariapp
Volontariapp/meta

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.

律师与法务
★ 0
Volontariapp
Volontariapp/meta

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.

Skill与智能体开发
★ 0
Volontariapp
Volontariapp/meta

volontariapp-implement-async-event-flow

Guide pas-à-pas pour concevoir et implémenter un flux asynchrone complet (messaging -> outbox -> post-processors -> ws-service -> client).

前端开发
★ 0
Volontariapp
Volontariapp/meta

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.

资料检索与研究
★ 0
Volontariapp
Volontariapp/meta

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.

设计师
★ 0