Files
nas-runbooks/common/rotation-secrets-inventaire.md
T

69 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Rotation des secrets — inventaire et plan (établi 18/07/2026, à exécuter au retour)
## FENÊTRE D'EXÉCUTION
NAS en arrêt programmé **16:30 → 01:30** (coupures Sfax). Toute session du soir est impossible.
**Créneau utile : 01:3016:30**, matinée de préférence. Prévoir 4560 min.
---
## A. ROTATIONS OBLIGATOIRES (secrets exposés en clair le 18/07/2026)
### A1. Clé provider OpenCode — PRIORITÉ 1
Exposée dans un traceback de session. **C'est la clé qui porte le budget 10 $/mois.**
Portée réelle (vérifiée par empreinte SHA-256, valeurs jamais affichées) — la MÊME valeur sert à :
| Emplacement | Variable / champ |
|---|---|
| Bifrost config.db | provider `opencode`, clé `opencode-1` |
| `/volume1/docker/hermes-platform/.env` | `BIFROST_OPENCODE_KEY` |
| container `family-help` | `OPENCODE_API_KEY` (appel direct, hors Bifrost) |
Procédure : générer la nouvelle clé sur OpenCode → mettre à jour `.env` → mettre à jour la clé
provider dans Bifrost (UI ou config.json au boot, cf. piège de persistance) → recréer family-help
**révoquer l'ancienne** → tester un appel par Bifrost et un appel family-help.
### A2. Token Cloudflare Workers AI — PRIORITÉ 1
Dans `/volume1/docker/redaction-pro/nginx.conf`, bloc `location /api/cf/` (en-tête Authorization).
Backup existant : `nginx.conf.bak_vk_20260718`**contient l'ancien token, à supprimer après rotation.**
Procédure : nouveau token côté Cloudflare → éditer nginx.conf (via container alpine, cf. piège
permissions) → `docker restart redaction-pro` → tester → révoquer l'ancien → purger le .bak.
---
## B. ANOMALIES DÉCOUVERTES — à corriger pendant la même fenêtre
### B1. Secrets partagés entre sphères (violation de la règle d'étanchéité)
| Container | Variable | Porte en réalité la valeur de |
|---|---|---|
| hermes-agent-perso | `TRILIUM_TOKEN_PERSO` | `TRILIUM_TOKEN_TT` (sphère TT !) |
| hermes-agent-perso | `PAPERLESS_TOKEN_PERSO` | `PAPERLESS_TOKEN_NYORA` |
| gsparc-mezzouna-api | `BASEROW_TOKEN` | `BASEROW_TOKEN_NYORA` |
| gsparc-mezzouna-api | `VISION_API_KEY` | `HERMES_TT_OPENCODE_KEY` |
| family-help | `TELEGRAM_BOT_TOKEN` | `HERMES_PERSO_TELEGRAM_TOKEN` |
Conséquence : la sphère perso détient un accès TT. Générer des tokens distincts par sphère.
### B2. Redondance interne (non bloquant, à assainir)
Dans les 3 Hermes, `OPENAI_API_KEY`, `NVIDIA_API_KEY` et `CUSTOM_API_KEY` pointent tous sur la même
valeur `HERMES_<sphère>_NVIDIA_KEY`. Trois noms, un secret : une rotation manquée en laisse deux vivants.
### B3. Permissions
`/volume1/docker/hermes-platform/.env` est en **777**. Cible 640 root:users — vérifier d'abord
quels containers le lisent et sous quel uid (1026/100) avant de restreindre.
### B4. Token Gitea en clair dans un remote git
Dépôt `nabil-brain` : URL remote de la forme `https://bolbol:<token>@gitea.bolbol.tn`.
Roter le token et réécrire le remote (credential helper ou SSH).
---
## C. À NE PAS TOUCHER
Les 13 clés virtuelles Bifrost `vk-*` créées le 18/07 ne sont pas compromises (jamais affichées,
vérification par empreinte uniquement). Aucune rotation nécessaire.
---
## D. ORDRE D'EXÉCUTION RECOMMANDÉ
1. A1 OpenCode (budget en jeu) — 2. A2 Cloudflare — 3. Vérifier logs Bifrost : plus aucun 401
nouveau lié à la rotation — 4. B1 séparation des sphères — 5. B3 permissions — 6. B4 remote git.
Après chaque rotation : tester AVANT de révoquer l'ancienne clé, et ne jamais afficher une valeur
(vérification par longueur ou empreinte).