Vault — stratégie secrets, CI (Maven/Gradle) & feuille de route¶
Cette page fixe ce que DYNORS retient pour HashiCorp Vault, l’alimentation des secrets en CI (registry Maven GitLab, etc.), et l’état des chantiers (fait / en cours / à faire). Elle complète la doc Maven : Maven — settings.xml & registry GitLab.
Sources de vérité détaillées (workspace dynors/, hors MkDocs obligatoire pour les runbooks) :
docs/VAULT_SECRETS_STRATEGIE.md— ESO, chemins KV, exemple TAKKUdocs/adr/ADR-2026-04-26-vault-strategie-completion.md— 5 chantiers adoptésdocs/architecture/reference-resilience/JOURNAL_REVUE_ARCHI.md— entrée AR-20260426-009- Règle ingénierie :
.cursor/rules/vault-secrets-dynors.mdc
1. Stratégie adoptée (résumé)¶
| Pilier | Décision |
|---|---|
| Coffre unique | HashiCorp Vault = source de vérité des secrets techniques (JDBC, JWT signing hors flux navigateur, SLY_FORWARD_SECRET, tokens outils, clés API, etc.). |
| Ce que Vault ne remplace pas | Le tenant métier (tenant dans le JWT, TenantContext) — modèle applicatif multi-tenant, pas clé Vault. |
| Kubernetes | External Secrets Operator (ESO) : Vault KV v2 → Secret K8s → Deployment (env.valueFrom.secretKeyRef). Alternative ponctuelle : Vault Agent Injector. |
| Convention de chemins | secret/data/dynors/{env}/{app}/... avec policies au moindre privilège (une app ne lit que son préfixe). Exemples : .../takku/database, .../takku/gitlab, .../platform/sly. |
| CI GitLab | Cible : OIDC JWT GitLab → Vault ou AppRole TTL court pour les jobs ; éviter la duplication durable « coffre + variable GitLab » sans processus. Transition : variables masquées alimentées manuellement ou par script de rotation jusqu’à branchement OIDC/AppRole stable. |
| Scan de fuites | Gitleaks (pre-commit + CI) — ne pas versionner PAT/clés ; si fuite : révocation immédiate. Voir Gitleaks — usage, précautions & dépannage. |
2. Registre Maven GitLab (com.dynors) et Vault¶
2.1 Aujourd’hui (pragmatique)¶
- Poste dev :
export GITLAB_TOKEN=…ougitlab.tokendans ungradle.propertiesnon commité — le PAT reste hors dépôt ; idéalement durée courte + scope minimal. - CI :
CI_JOB_TOKEN+ en-têteJob-Token(Gradle/Maven) quand l’accès inbound aux projets dynors-core / dynors-extensions est configuré (voir doc Maven §4.1).- Sinon : variable
GITLAB_TOKEN(masquée) = PAT technique ou jeton projet.
2.2 Cible (alignement Vault)¶
- Stocker le secret dans Vault, ex. :
secret/data/dynors/{env}/gitlab/registry-read→ clétoken(PAT lecture registry + API minimale) ou modèle AppRole dédié sans PAT longue durée. - Runtime K8s : ESO synchronise vers
Secret(ex. clégitlab-token→ envGITLAB_TOKENpour un outil interne qui build dans le cluster — cas rare pour runners GitLab SaaS). - GitLab CI (runners managés) :
- Option A — Job initiale « vault-auth » : JWT OIDC → Vault, récupération temporaire du secret, export
GITLAB_TOKENpour la durée du job (nécessite config JWT auth sur Vault + rôle limité). - Option B — Rotation périodique : un processus (humain ou automation) met à jour la variable masquée GitLab depuis Vault pour les projets qui ne peuvent pas encore utiliser OIDC.
Pour un mapping type « Vault → Secret K8s » déjà documenté avec gitlab / GITLAB_TOKEN, voir la table TAKKU dans docs/VAULT_SECRETS_STRATEGIE.md (workspace).
3. Feuille de route — 5 chantiers Vault & équivalent (ADR 2026-04-26)¶
Statut ci-dessous = indicateur de documentation / direction ; l’équipe infra / sécu ajuste après revue des déploiements réels.
| # | Chantier | Objectif | Statut indicatif | Runbook / trace (workspace dynors) |
|---|---|---|---|---|
| 1 | Transit Engine — Mediconnect | Clé maître santé : chiffrement/déchiffrement sans export de clé fichier / heap durable | À finaliser côté prod (runbook + alignement app) | docs/runbooks/vault-transit-engine-mediconnect.md |
| 2 | Gitleaks CI + pre-commit | Bloquer secrets dans Git avant merge | En déploiement (ex. dynors-core + template ; étendre aux autres dépôts) |
docs/runbooks/gitleaks-secret-scanning.md |
| 3 | HA Vault — Raft 3 nœuds + autounseal KMS | Supprimer le SPOF Vault | À faire (priorité prod K8s) | docs/runbooks/vault-ha-raft-autounseal.md |
| 4 | Database Secrets Engine | Credentials Postgres courte durée (blast radius) | À faire (FISCAL, BOOKS, paiement, Mediconnect, etc.) | docs/runbooks/vault-database-secrets-engine.md |
| 5 | Snapshots Raft → S3 chiffré | Restauration coffre | À faire (cron + test DR trimestriel) | docs/runbooks/vault-snapshots-raft.md |
Transverse ADR : vault-dev + bootstrap dans docker-compose.infra.yml racine workspace ; onboarding §Vault / Gitleaks dans ONBOARDING_DEVELOPPEUR.md — fait (voir ADR §standardisation dev local).
4. Suivi « Vault + dynors-media » (état humain)¶
Un fichier d’état — mis à jour lors d’actions concrètes (chemins Vault, buckets, routes SLY, smoke tests) — alimente le suivi interne :
dynors-ops/reports/media-vault/PROGRESS_STATE.yml(workspace racinedynors)
Champs utiles : status (in_progress | blocked | done), last_user_action_at, next_priority, blocked_reason.
Tant que last_user_action_at reste vide ou dépasse stale_threshold_days, les rapports planifiés rappellent qu’une action est attendue (spec agent : docs/agents/MEDIA_VAULT_PROGRESS_AGENT.md).
À compléter par l’équipe
Renseigner last_user_action_at et next_priority après chaque itération réelle (pas seulement specs) pour que la feuille de route reflète le terrain.
5. À faire — liste opérationnelle (backlog transverse)¶
À répartir entre infra, SRE et owners d’apps ; ordre indicatif :
- Généraliser Gitleaks : inclure le template
.gitlab/ci/gitleaks.template.ymlsur tous les dépôtsdynors/*etdynors-projects/*qui versionnent du code. - OIDC GitLab → Vault : design rôle + policy + TTL pour jobs CI qui ont besoin de secrets (registry, déploiement) ; réduire les PAT « techniques » multi-mois.
- Compléter ESO : pour chaque app critique en prod,
ExternalSecret+ runbook rollback aligné surdocs/VAULT_SECRETS_STRATEGIE.md. - DR Vault : rehearsal trimestriel (restauration snapshot sur cluster staging) — ADR §9.
- Média / stockage : fermer les écarts AR-20260426-007 (signed URLs, Transit/SSE, alignement backend) en synchronisation avec
PROGRESS_STATE.yml.
6. Liens rapides internes¶
| Sujet | Emplacement |
|---|---|
| Stratégie Vault & ESO (détail) | Workspace → docs/VAULT_SECRETS_STRATEGIE.md |
| ADR complément Vault | Workspace → docs/adr/ADR-2026-04-26-vault-strategie-completion.md |
| Journal d’architecture | Workspace → docs/architecture/reference-resilience/JOURNAL_REVUE_ARCHI.md |
| Maven + CI GitLab | Maven — settings.xml & registry GitLab |
| Gitleaks | Gitleaks — usage, précautions & dépannage |
Cette page MkDocs est une porte d’entrée : les runbooks techniques restent dans le workspace ; mettre à jour le tableau §3 lors des revues d’avancement trimestrielles ou après chaque chantier livré.