Rotation des secrets
Procédures de rotation pour les secrets critiques de Louis.
Procédures de rotation pour les secrets critiques de Louis.
ENCRYPTION_KEY
Conséquence : toutes les provider_keys et connector_keys chiffrées
en DB deviennent illisibles.
Quand rotater :
- Soupçon de compromission (leak du fichier
.env, accès admin compromis) - Politique périodique (ex. tous les 24 mois)
- Sortie d'un collaborateur ayant eu accès à la clé
Procédure
Louis v0.1 ne dispose pas d'un script de rotation automatique. Procédure manuelle :
- Avant la rotation, prévenir les utilisateurs : ils devront re-saisir leurs clés provider et identifiants connecteur après la rotation.
- Faire un backup chiffré avec une
BACKUP_PASSPHRASE≠ENCRYPTION_KEY(cf.../admin/backups.md). - Générer la nouvelle clé :
openssl rand -base64 32 - Mettre à jour
ENCRYPTION_KEYdans le.env(ou votre gestionnaire de secrets). - Redémarrer Louis (
docker compose restartousystemctl restart louis). - Supprimer toutes les entrées
provider_keysetconnector_keysen DB (elles sont illisibles avec la nouvelle clé) :DELETE FROM provider_keys; DELETE FROM connector_keys; - Informer les utilisateurs qu'ils doivent re-saisir leurs clés via Settings → Providers et Settings → Connecteurs.
Future amélioration v0.2
Script npm run rotate-encryption-key qui :
- Demande l'ancienne et la nouvelle clé
- Décrypte avec l'ancienne, re-chiffre avec la nouvelle, en transaction
- Met à jour
.envautomatiquement - Zéro re-saisie côté users
AUTH_SECRET
Conséquence : toutes les sessions JWT actives sont invalidées immédiatement. Les utilisateurs doivent se reconnecter.
Quand rotater :
- Soupçon de compromission
- Politique périodique (ex. tous les 12 mois)
- Après un incident sécurité
Procédure
- Générer :
openssl rand -base64 32 - Mettre à jour
AUTH_SECRETdans.envou le gestionnaire de secrets - Redémarrer Louis
- Les utilisateurs sont automatiquement déconnectés et redirigés vers
/login
Pas de migration de données nécessaire.
BACKUP_PASSPHRASE
Conséquence : les nouveaux backups utiliseront la nouvelle passphrase. Les anciens backups restent déchiffrables avec l'ancienne — gardez l'ancienne passphrase aussi longtemps que vous voulez pouvoir restaurer ces backups.
Procédure
- Générer :
openssl rand -base64 32 - Mettre à jour la variable d'environnement utilisée par
scripts/backup.sh - Documenter l'ancienne passphrase dans le gestionnaire de secrets, marquée "rétention pour backups antérieurs au YYYY-MM-DD"
- Pas de redémarrage nécessaire
Mots de passe utilisateurs
Conséquence : seul l'utilisateur concerné est impacté.
Pas de "reset password" UI en v0.1. Procédure manuelle (admin) :
- Aller sur Admin → Utilisateurs
- Cliquer "Modifier" sur la ligne du user concerné
- Saisir un nouveau mot de passe initial
- Communiquer le mot de passe à l'utilisateur hors-bande (Signal, en personne, etc.)
- Inviter l'utilisateur à le changer dès la première connexion
À venir v0.2 : flow "mot de passe oublié" avec email de reset.
Audit après rotation
Toutes les rotations admin (création / modification / suppression de
comptes) sont tracées dans audit_log. Une rotation ENCRYPTION_KEY ou
AUTH_SECRET n'est PAS tracée dans audit_log (ces secrets sont
manipulés hors-app, au niveau OS). Logger ces événements dans le journal
système de l'OS et la documentation interne du cabinet.