feat: VaultService pour chiffrement Transit Hashicorp Vault

VaultService — chiffrement/déchiffrement via Vault Transit engine :

Gestion des clés :
- createKey(keyName, type) : crée une clé Transit (défaut aes256-gcm96)
- deleteKey(keyName) : marque deletable + supprime
- updateKey(keyName, config) : met à jour la config (rotation, export...)
- listKeys() : liste toutes les clés Transit
- keyExists(keyName) : vérifie l'existence d'une clé
- checkOrCreateKey(keyName) : crée la clé si elle n'existe pas

Chiffrement :
- encrypt(keyName, plaintext) : chiffre avec Transit, retourne vault:v1:...
  Auto-crée la clé si inexistante
- decrypt(keyName, ciphertext) : déchiffre le ciphertext Transit

Communication HTTP avec X-Vault-Token, gestion erreurs 4xx/5xx.

Configuration :
- .env : VAULT_URL, VAULT_TOKEN (vides par défaut)
- .env.local : VAULT_URL=http://vault:8200, VAULT_TOKEN=crm_siteconseil
- ansible/vault.yml : vault_url=https://kms.esy-web.dev pour la prod
- Transit engine activé sur le container Vault dev

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-04-04 21:45:27 +02:00
parent e03233d922
commit 3870713412
3 changed files with 233 additions and 0 deletions

View File

@@ -21,6 +21,8 @@ docuseal_api: pgAU116mCFmeF7WQSezHqxtZW8V1fgo31u5d2FXoaKe
docuseal_webhooks_secret: CRM_COSLAY
discord_webhook: https://discord.com/api/webhooks/1419573620602044518/ikAdxWxsrrTqMTb5Gh_8ylcoJHlOnq7aJZvR5udoS_fCK56Jk3qpEnJHVKdD8fwuNJF3
esymail_hostname: mail.esy-web.dev
vault_url: https://kms.esy-web.dev
vault_token: CHANGE_ME_IN_PROD
ovh_key: 34bc2c2eb416b67d
ovh_secret: 12239d273975b5ab53318907fb66d355
ovh_customer: 56c387eb9ca4b9a2de4d4d97fd3d7f22