From 3545af35269a48bb366f1c2ca1c9fa6bae655eba Mon Sep 17 00:00:00 2001 From: bolbol Date: Sat, 18 Jul 2026 16:33:37 +0000 Subject: [PATCH] runbook: inventaire rotation secrets 18/07 + anomalies inter-spheres --- common/rotation-secrets-inventaire.md | 68 +++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 common/rotation-secrets-inventaire.md diff --git a/common/rotation-secrets-inventaire.md b/common/rotation-secrets-inventaire.md new file mode 100644 index 0000000..16f93a2 --- /dev/null +++ b/common/rotation-secrets-inventaire.md @@ -0,0 +1,68 @@ +# 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:30–16:30**, matinée de préférence. Prévoir 45–60 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__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:@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).