voute du site : dix secrets engendres, quatre a relever, et la porte fermee avant

Le site n avait ni voute ni cle. C etait le seul blocage TOTAL avant la visite — et
le seul qui ne demandait aucun Internet : sans elle, `make site-appliquer` ne passe
aucun secret et chaque role echoue sur son assertion.

Quatorze secrets, comme le site de Chezlepro :
- dix engendres sur le poste (autorite de certification et son provisionneur, cle et
  jeton interne de la forge, ses comptes d administration, base et jeton d API de la
  supervision, phrase du depot de sauvegarde) ;
- une paire ed25519 pour la sauvegarde — la moitie PRIVEE en voute, la PUBLIQUE au
  plan, ou elle est publiable sans risque et ou elle est la seule a pouvoir servir ;
- quatre laisses VIDES, parce qu ils ne s engendrent pas : ce sont des jetons que le
  materiel delivre. Vides plutot qu absents, deliberement — une cle absente donne une
  erreur de variable indefinie, une cle vide donne l assertion du role, qui dit QUOI
  manque et OU le prendre.

.gitignore ALIGNE SUR CHEZLEPRO, ET AVANT DE POSER LA VOUTE. Ce depot n excluait que
`*.vault.yml.bak` : `underlay.vault.yml` aurait ete versionnable. Le defaut etait
dormant parce que le fichier n existait pas encore — il se serait reveille au premier
`git add -A`, c est-a-dire au moment ou l on cesse de regarder. On ferme la porte
avant de poser ce qu elle protege.

Verifie : la voute se relit par le chemin NORMAL (la liste d identites, pas la cle
directe), quatorze secrets, aucun manquant, et la cle privee de sauvegarde est bien
une cle. Le chiffrement a ete fait avec ses deux flux rediriges vers des fichiers —
`ansible-vault` echoue en SILENCE sur une sortie non bloquante, et la voute paraitrait
ecrite en etant identique a l octet.

COLLECTE.md compte desormais dix-sept valeurs a relever, dont les quatre jetons.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
This commit is contained in:
Daniel Allaire 2026-09-13 14:37:37 -04:00
parent 1fc0b44b6d
commit f9d14e6447
3 changed files with 33 additions and 1 deletions

13
.gitignore vendored
View file

@ -1,2 +1,15 @@
# La VOUTE du monde physique ne se versionne jamais en clair.
#
# ALIGNE SUR SITE-Chezlepro LE 2026-09-13. Ce fichier n'excluait que `*.vault.yml.bak` :
# la voute elle-meme, `underlay.vault.yml`, aurait ete versionnable. Elle n'existait pas
# encore, donc le defaut etait DORMANT — il se serait reveille au premier `git add -A`,
# c'est-a-dire exactement au moment ou on cesse de regarder.
#
# L'ordre compte : on ferme la porte AVANT de poser ce qu'elle protege.
*.vault.yml
*.secret
*.pem
*.key
*.vault.yml.bak *.vault.yml.bak
flux-genere/ flux-genere/

View file

@ -10,6 +10,10 @@ choix : ce sont des FAITS que seul le matériel peut dire. Treize valeurs, pas t
| `<<IP_FRONTIERE_ADMIN>>` | OPNsense, interface de gestion | Dépend du plan d'adressage existant sur place | | `<<IP_FRONTIERE_ADMIN>>` | OPNsense, interface de gestion | Dépend du plan d'adressage existant sur place |
| `<<optN>>` ×9 | OPNsense → Interfaces → Assignments | Les noms `optN` sont attribués dans l'ordre de création | | `<<optN>>` ×9 | OPNsense → Interfaces → Assignments | Les noms `optN` sont attribués dans l'ordre de création |
| `<<lan|optN>>` | Idem | Selon que la patte de gestion est la LAN d'origine ou une autre | | `<<lan|optN>>` | Idem | Selon que la patte de gestion est la LAN d'origine ou une autre |
| `proxmox_api_token_id` | Datacenter → Permissions → API Tokens | Délivré par le nœud à la création |
| `proxmox_api_token_secret` | Idem — **affiché une seule fois** | Ne se relit jamais ; le noter tout de suite |
| `vault_opnsense_api_key` | System → Access → Users → api keys | Délivré par la frontière |
| `vault_opnsense_api_secret` | Téléchargé avec la clé, même fichier | Idem |
**Le piège des `optN`.** Le devis raisonne en ARRIVÉE : une règle posée sur la mauvaise **Le piège des `optN`.** Le devis raisonne en ARRIVÉE : une règle posée sur la mauvaise
patte ne correspond jamais, et rien ne le signale. Relever les neuf noms exacts avant de patte ne correspond jamais, et rien ne le signale. Relever les neuf noms exacts avant de
@ -20,6 +24,18 @@ chez Chezlepro et toutes les règles entrantes des locataires tombaient dans le
environ 600 Go. Vérifier `vgs` et `df -h` AVANT de lancer la matérialisation : c'est la environ 600 Go. Vérifier `vgs` et `df -h` AVANT de lancer la matérialisation : c'est la
seule décision de ce document qui peut encore changer, et elle se prend avec un chiffre. seule décision de ce document qui peut encore changer, et elle se prend avec un chiffre.
**Les quatre jetons vont dans la voûte**, pas dans un fichier de plan :
```
cd ../Set-OPS-public
ANSIBLE_VAULT_IDENTITY_LIST="$(python3 scripts/voutes.py identites)" \
ansible-vault edit ../SITE-Technolibre/underlay.vault.yml
```
Ils y sont déjà déclarés, **vides**. C'est volontaire : une clé absente donne une erreur de
variable indéfinie, une clé vide donne l'assertion du rôle — qui dit quoi manque et où le
prendre. Les dix autres secrets du site sont déjà engendrés.
--- ---
## Ce qui a été décidé, et qu'il suffit de confirmer ## Ce qui a été décidé, et qu'il suffit de confirmer

View file

@ -30,7 +30,10 @@ gabarit:
# Clé publique du compte de dépôt des sauvegardes du site lui-même — générée au # Clé publique du compte de dépôt des sauvegardes du site lui-même — générée au
# déploiement de `site-backup-01`, recopiée ensuite. # déploiement de `site-backup-01`, recopiée ensuite.
backup_pubkey: "" # LA MOITIE PUBLIQUE de la paire de sauvegarde du site. Sa jumelle privee vit dans
# `underlay.vault.yml` — jamais versionnee. C'est cette cle-ci que le depot autorise :
# la publier est sans risque, et c'est meme le seul moyen qu'elle serve.
backup_pubkey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINf8O1ASPbRE2J+3uOrdJBRFJZCap8WeHjupdboI1KKF sauvegarde site-technolibre"
nftables_admin_ssh: [] nftables_admin_ssh: []
supervision_courriel: sysadmin@technolibre.ca supervision_courriel: sysadmin@technolibre.ca