Aller au contenu

Vault Consolidation — 2026-05-20

Actions effectuees

1. Consolidation kv/api/ -> kv/app/ (canonical)

kv/api/ etait le legacy d'Ansible, kv/app/ est lu par VaultService au runtime. Les valeurs divergeaient (passwords differents pour DB, JWT, encryption).

  • Ansible defaults/main.yml : lookups migres de kv/data/api/* vers kv/data/app/*
  • Ansible api-secrets.yml : provisioning migre vers kv/app/*
  • Ansible blockchain.yml : lookups migres vers kv/data/app/blockchain
  • kv/api/* (4 chemins) supprimes dans Vault

2. CloudHSM — reference morte corrigee

kv/cloudhsm/credentials n'existait pas (404). Ansible defaults pointait dessus. Migre vers kv/ci/cloudhsm:pin (format username:password). Variable Ansible simplifiee : cloudhsm_pin au lieu de cloudhsm_cu_username + cloudhsm_cu_password.

3. BLOCKCHAIN_KMS_KEY_ID

Manquait dans kv/app/blockchain (present seulement dans le legacy kv/api/blockchain). Ajoute dans kv/app/blockchain.

4. kv/smtp/infomaniak provisionne

Structure creee avec placeholder (pass=CHANGE_ME). VaultService.getSmtpCredentials() ne retournera plus 404. ACTION REQUISE : mettre le vrai password SMTP Infomaniak.

5. Doublons env.j2 supprimes

  • REDIS_URL : supprime (pas lu par le code backend)
  • BULLMQ_REDIS_HOST/PORT : supprime (pas lu par le code backend)
  • CLOUDHSM_USER : supprime (redondant avec CLOUDHSM_PIN)
  • Section SMTP commentee : remplacee par note "lu depuis Vault"

6. Consolidation HSM — NON FAITE (a evaluer)

kv/hsm/cloudhsm et kv/ci/cloudhsm ont des AWS credentials differentes. - kv/hsm/cloudhsm : lu par VaultService.getCloudHsmCredentials() (runtime) - kv/ci/cloudhsm : lu par le pipeline CI (tests integration) - Les AWS keys divergent (comptes/roles IAM differents ?)

Decision : garder les deux pour l'instant. A consolider quand on clarifie pourquoi les credentials AWS sont differentes.

Dette restante — secrets encore dans .env

Ces services lisent les secrets directement depuis process.env / configService.get() au lieu de passer par VaultService/ports hexagonaux. Tant qu'ils ne sont pas migres, les secrets doivent rester dans le .env :

Service Variable(s) Raison
data-source.ts DATABASE_URL, DB_* Migrations CLI TypeORM
parse-database-url.ts DATABASE_URL, DATABASE_URL_APP, DB_* Utilitaire utilise partout
backup-orchestrator.service.ts DATABASE_URL pg_dump direct
backup-restoration.service.ts STAGING_DATABASE_URL pg_restore
backup-s3.service.ts BACKUP_AWS_ACCESS_KEY_ID/SECRET IAM backup dedied
bulk-export.processor.ts S3_ACCESS_KEY_ID/SECRET S3 multipart
s3-multipart.adapter.ts S3_ACCESS_KEY_ID/SECRET S3 upload
security.config.ts JWT_SECRET Config loader
email.config.ts SMTP_USER/PASS Config loader
storage.config.ts S3_ACCESS_KEY_ID/SECRET Config loader
hsm.config.ts CLOUDHSM_PIN, CLOUDHSM_AWS_* Config loader

Migration cible : chaque service ci-dessus devrait injecter un port hexagonal au lieu de lire process.env. Les config loaders (security.config.ts, email.config.ts, etc.) devraient deleguer au VaultService.

Policies Vault mises a jour

probatiovault-app-dev (token VPS /root/.vault-token)

Ajoute : - kv/data/ci/gitlab-api (read) — role gitlab_runner lit le token API pour MAJ tags - kv/data/ci/cloudhsm (read) — Ansible lit le PIN depuis ce chemin

gitlab-ci-cloudhsm (JWT CI pipeline)

Corrige : - kv/data/api/blockchainkv/data/app/blockchain (chemin canonical)

kv/hsm/cloudhsm — nettoyage dead data

Supprime cluster_id et hsm_ip (jamais lus par le code, devenaient obsoletes a chaque recreation HSM).

Backup

Backup complet de tous les chemins Vault avant modifications : .vault-backup-2026-05-20.json (gitignore)