Set-OPS-Public/docs/audit/reference-avant-reconstruction-2026-08-08.md

92 lines
4.5 KiB
Markdown
Raw Normal View History

# État de référence — avant reconstruction from-zero
> Figé le 2026-08-08, écosystème **chezlepro** (index 17, 14 VM), avant destruction et
> rejeu complet du plan. **Ce document existe pour que « identique » soit prouvable
> plutôt que ressenti.** Toute divergence après reconstruction se lit contre lui.
## Les cinq devis, avant
```
identite CONFORME : le réel correspond au déclaré (1 compte(s) dans l'annuaire).
certificats CONFORME : aucun certificat servi n'est en fin de vie.
expositions CONFORME : toute exposition déclarée répond, des deux points de vue.
postgresql CONFORME : chiffrement imposé, et aucun réseau hors du supernet dérivé.
courriel CONFORME : la chaîne tient, de la résolution LDAP à la boîte.
```
## Ce que la flotte porte
```
backup-01 10.27.18.21 1 service(s) metier
collab-01 10.27.21.21 3 service(s) metier
data-sql-01 10.27.18.11 2 service(s) metier
edge-mta-01 10.27.16.21 2 service(s) metier
forge-01 10.27.21.11 1 service(s) metier
idm-01 10.27.17.11 3 service(s) metier
infra-dns-01 10.27.19.11 1 service(s) metier
infra-edge-01 10.27.16.11 2 service(s) metier
infra-mail-01 10.27.19.31 2 service(s) metier
infra-pki-01 10.27.19.21 2 service(s) metier
mon-01 10.27.20.21 6 service(s) metier
obs-01 10.27.20.11 2 service(s) metier
web-dorsal-01 10.27.21.41 2 service(s) metier
web-frontal-01 10.27.21.31 2 service(s) metier
```
## Ce qui sera perdu et devra être refait à la main
| Objet | Conséquence | Geste de reprise |
|---|---|---|
| **Clé racine de l'AC** (`/etc/step-ca/secrets/root_ca_key`) | la racine installée dans le navigateur devient inutile ; tous les certificats changent | `make ca-racine` + réinstaller, en comparant l'empreinte (§6.3) |
| **Mot de passe du compte `sysadmin`** | l'annuaire est recréé vide, puis amorcé | relever le jeton d'amorçage en voûte (§6.1) et le changer |
| **Contenu applicatif** (dépôts Forgejo, fichiers Nextcloud, courriels, tableaux Grafana) | non sauvegardé, non reconstructible par le code | aucun — assumé : c'est un POC |
> Ce qui **survit** : les deux voûtes et `~/.config/setops-vault-pass` vivent hors dépôt
> et hors cluster ; le code est sur `eregion.chezlepro.ca` (192.168.12.201), machine
> distincte du tenant. Rien de ce qui est nécessaire au rejeu n'est dans les 14 VM.
---
## Après reconstruction — 2026-08-09
Écosystème détruit (14 VM, disques compris) puis **rejoué depuis le plan seul**. Aucune
sauvegarde restaurée : ni LDAP, ni base, ni certificat, ni fichier.
```
identite CONFORME
certificats CONFORME
expositions CONFORME
postgresql CONFORME
courriel CONFORME
```
**Cinq sur cinq, identiques à la référence.** C'est la première fois que le dépôt peut dire
que le système reconstruit est celui que le plan décrit — au lieu de dire que le dépôt est
cohérent avec lui-même.
### Les six défauts que seul un rejeu depuis zéro pouvait montrer
| # | Défaut | Pourquoi il dormait |
|---|---|---|
| 1 | `amorcage_acces_courriel` jamais déclaré par le tenant | le compte existait déjà, le garde-fou n'avait jamais eu à se déclencher |
| 2 | rôles de realm créés **après** leur attachement aux groupes | un passage précédent les avait créés |
| 3 | claim de groupes posé **avant** les clients OIDC | les clients existaient déjà |
| 4 | écriture Keycloak annulée par le collecteur de transactions | la synchro LDAP complète ne se rejoue pas en exploitation |
| 5 | `grafana-cli` lancé avant que Grafana ait fini de démarrer | le service tournait depuis toujours |
| 6 | port d'Alloy (12345) en collision avec le SASL de Dovecot | Alloy tenait le port ; c'est **Dovecot** qui échouait, en silence |
Trois défauts d'ordre, deux courses de premier démarrage, un conflit de port. **Aucun
n'était visible à un redéploiement**, et aucun aux 31 preuves statiques — elles lisent le
dépôt, pas la machine.
Le sixième mérite d'être relu : le conflit existait depuis toujours, mais dans l'autre
sens. Alloy tenait `12345` et l'écoute SASL de Dovecot échouait sans que personne ne le
voie. La reconstruction a inversé l'ordre de démarrage et rendu visible un défaut qui
était là depuis le début.
### Ce qui a dû être refait à la main
- **La base de Grafana** : le premier démarrage, interrompu par le défaut nº 5, avait
laissé un schéma à moitié migré (`no such column: with_credentials`). Base mise de côté,
recréée par Grafana — 95 s pour lier son port, ce qui explique la course.
- **Rien d'autre.** Ni certificat, ni compte, ni zone DNS, ni base de données.