le site gagne un edge, et P23 a nomme le geste qui manque
Le site servait trois applications web sans jamais les publier : observatoire, vigie et console ne se joignaient que par adresse:port, en clair, depuis le plan d administration. Zone site-publication (VLAN 37) a elle seule. Les autres zones separent ce qui agit de ce qui est agi ; celle-ci separe ce qui est adresse de l exterieur de ce qui ne doit jamais l etre. Un edge est la machine qu on attaque en premier : elle ne partage pas son voisinage. site-edge-01 : 2 vCPU, 2 Go, 20 Go, sans client_backup — un relais ne porte aucun etat. Elle ne s expose pas elle-meme : les expose des AUTRES applications deviennent ses vhosts et les SAN de son certificat. P23 a refuse une passerelle fantome. appliquer_opnsense pose des regles et des routes, pas des interfaces : declarer la patte 10.37.37.1 rend le geste manuel visible et verifiable, et le harnais le relit a chaque passage. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
This commit is contained in:
parent
627ef00ec7
commit
09a6a49089
2 changed files with 64 additions and 4 deletions
60
CHANGELOG.md
60
CHANGELOG.md
|
|
@ -1,5 +1,65 @@
|
||||||
# CHANGELOG — Set-OPS
|
# CHANGELOG — Set-OPS
|
||||||
|
|
||||||
|
## 2026-09-14 (21) — Le site gagne un edge, et P23 a nomme le geste qui manque
|
||||||
|
|
||||||
|
Le site servait trois applications web sans jamais les PUBLIER. L'observatoire, la vigie
|
||||||
|
et la console d'exploitation ne se joignaient que par `adresse:port`, en clair, depuis le
|
||||||
|
plan d'administration — et `GF_SERVER_ROOT_URL` promettait un `https://` que personne ne
|
||||||
|
terminait.
|
||||||
|
|
||||||
|
### Une zone a elle seule, et pas un coin d'une autre
|
||||||
|
|
||||||
|
`site-publication`, VLAN 37, `10.37.37.0/24`. Toutes les autres zones du site separent ce
|
||||||
|
qui AGIT de ce qui est AGI : le runner seul, l'autorite seule, le temoin a part. Celle-ci
|
||||||
|
separe autre chose — **ce qui est adresse de l'exterieur de ce qui ne doit jamais
|
||||||
|
l'etre**.
|
||||||
|
|
||||||
|
Un edge est par definition la machine qu'on attaque en premier : c'est la seule dont
|
||||||
|
l'adresse est publiee. La loger dans `site-supervision` l'aurait mise dans le meme domaine
|
||||||
|
de diffusion que la base d'Icinga ; dans `site-genome`, a cote de la forge dont tout
|
||||||
|
descend. Une machine exposee ne partage pas son voisinage.
|
||||||
|
|
||||||
|
site-edge-01 10.37.37.11 2 vCPU, 2 Go, 20 Go vmid 9012
|
||||||
|
|
||||||
|
PETITE, ET SANS SAUVEGARDE, parce qu'elle ne porte aucun etat : un edge termine du TLS et
|
||||||
|
relaie. Ce qu'il perdrait en tombant se recompose en le redeployant — sauvegarder un
|
||||||
|
relais, ce serait sauvegarder une copie du plan.
|
||||||
|
|
||||||
|
ELLE NE S'EXPOSE PAS ELLE-MEME. Ce sont les `expose:` des AUTRES applications qui
|
||||||
|
deviennent ses vhosts et les SAN de son certificat. Elle n'est le nom de rien ; elle est
|
||||||
|
la porte de tous.
|
||||||
|
|
||||||
|
### P23 a nomme le geste que l'outillage ne sait pas poser
|
||||||
|
|
||||||
|
reseau 'site-publication': passerelle 10.37.37.1 n'est l'adresse d'aucun hote
|
||||||
|
declare sur ce reseau — passerelle fantome
|
||||||
|
|
||||||
|
`appliquer_opnsense` sait poser des REGLES et des ROUTES ; il ne cree pas d'INTERFACE.
|
||||||
|
Declarer la patte `10.37.37.1` dans les hotes de l'underlay n'est donc pas une formalite :
|
||||||
|
c'est ce qui rend le geste manuel **visible et verifiable**. Tant que `vlan037` n'existe
|
||||||
|
pas sur la frontiere, cette ligne est une promesse que le reel doit tenir — et le harnais
|
||||||
|
la relit a chaque passage.
|
||||||
|
|
||||||
|
C'est le meme principe que partout ici : on ne cache pas ce qu'on ne sait pas faire, on le
|
||||||
|
DECLARE, et la garde se charge de le rappeler.
|
||||||
|
|
||||||
|
### Ce qui est pret, et ce qui attend une main
|
||||||
|
|
||||||
|
Pret et derive : la zone, la machine, l'application, les 28 regles de frontiere (aucun
|
||||||
|
retrait), le trunk du commutateur — `switchport trunk allowed vlan 1,31,32,33,34,35,36,37,40`
|
||||||
|
— et le `vlan 37 / name site-publication` a declarer.
|
||||||
|
|
||||||
|
Attend une main, parce qu'aucune API du depot ne le couvre :
|
||||||
|
|
||||||
|
1. OPNsense — creer le VLAN 37 sur le parent des zones du site, l'assigner,
|
||||||
|
lui donner 10.37.37.1/24, l'activer.
|
||||||
|
2. Le commutateur — les deux lignes ci-dessus.
|
||||||
|
|
||||||
|
Ensuite seulement : `make site-creer`, `make frontiere-appliquer`, et le deploiement.
|
||||||
|
Creer la VM avant la passerelle donnerait une machine sans route — pire qu'aucune machine.
|
||||||
|
|
||||||
|
Harnais : **77 OK, 0 echec**.
|
||||||
|
|
||||||
## 2026-09-14 (20) — La console d'exploitation devient un service, et elle n'avait aucune serrure
|
## 2026-09-14 (20) — La console d'exploitation devient un service, et elle n'avait aucune serrure
|
||||||
|
|
||||||
Decision de l'exploitant : *« j'aimerais que chaque runner expose le GUI de Set-OPS a
|
Decision de l'exploitant : *« j'aimerais que chaque runner expose le GUI de Set-OPS a
|
||||||
|
|
|
||||||
|
|
@ -35,12 +35,12 @@
|
||||||
| P20 | Adressage 100% derive du seed (aucun stocke) | AFF-001, AFF-003 | ✅ OK | 2 nomenclature(s) : adressage 100% derive du seed index. |
|
| P20 | Adressage 100% derive du seed (aucun stocke) | AFF-001, AFF-003 | ✅ OK | 2 nomenclature(s) : adressage 100% derive du seed index. |
|
||||||
| P21 | Federation : aucun index en collision | AFF-102 | ✅ OK | Federation coherente : 6 instance(s) federee(s), aucun index en collision. |
|
| P21 | Federation : aucun index en collision | AFF-102 | ✅ OK | Federation coherente : 6 instance(s) federee(s), aucun index en collision. |
|
||||||
| P22 | Plan de recette a jour (genere du wiki) | AFF-002 | ✅ OK | Plan de recette à jour (22 sections). |
|
| P22 | Plan de recette a jour (genere du wiki) | AFF-002 | ✅ OK | Plan de recette à jour (22 sections). |
|
||||||
| P23 | Underlay sans collision avec la plage tenant | AFF-103 | ✅ OK | Underlay conforme : 13 reseau(x), aucune collision avec la plage tenant. |
|
| P23 | Underlay sans collision avec la plage tenant | AFF-103 | ✅ OK | Underlay conforme : 14 reseau(x), aucune collision avec la plage tenant. |
|
||||||
| P24 | Frontiere nord/sud : acces d'administration declare | AFF-104 | ✅ OK | note : serveur_powerdns declare un port `derive` que le plan du site ne resout pas — aucune regle emise. |
|
| P24 | Frontiere nord/sud : acces d'administration declare | AFF-104 | ✅ OK | note : serveur_powerdns declare un port `derive` que le plan du site ne resout pas — aucune regle emise. |
|
||||||
| P25 | Pare-feu Proxmox : est-ouest intra-tenant derive | AFF-107 | ✅ OK | CONFORME : pare-feu Proxmox, 4 tenant(s), 52 groupe(s), 96 regle(s). |
|
| P25 | Pare-feu Proxmox : est-ouest intra-tenant derive | AFF-107 | ✅ OK | CONFORME : pare-feu Proxmox, 4 tenant(s), 52 groupe(s), 96 regle(s). |
|
||||||
| P26 | Integrations universelles : aucun hote laisse de cote | AFF-108 | ✅ OK | 13 hote(s) x 6 integration(s) universelle(s) : aucune lacune, aucune recopie (0 exemption(s) derivee(s) du service rendu). |
|
| P26 | Integrations universelles : aucun hote laisse de cote | AFF-108 | ✅ OK | 13 hote(s) x 6 integration(s) universelle(s) : aucune lacune, aucune recopie (0 exemption(s) derivee(s) du service rendu). |
|
||||||
| P27 | Propriete des intrants : hebergeur et tenant separes | AFF-109 | ✅ OK | 8 cle(s) de cluster chez l'hebergeur, aucune recopiee dans les group_vars du tenant. |
|
| P27 | Propriete des intrants : hebergeur et tenant separes | AFF-109 | ✅ OK | 8 cle(s) de cluster chez l'hebergeur, aucune recopiee dans les group_vars du tenant. |
|
||||||
| P28 | Pools Proxmox : un par tenant, sans collision | AFF-110 | ✅ OK | CONFORME : 5 pool(s) Proxmox, 42 VM placee(s), aucun nom ni VMID en collision. |
|
| P28 | Pools Proxmox : un par tenant, sans collision | AFF-110 | ✅ OK | CONFORME : 5 pool(s) Proxmox, 43 VM placee(s), aucun nom ni VMID en collision. |
|
||||||
| P29 | Authentification : chaque role declare sa position | AFF-111 | ✅ OK | 33 role(s) serveur declares (interne-sans-auth 2, ldap-direct 2, sans-auth-humaine 22, socle-identite 2, web-sso 5) ; 2 lacune(s) nommee(s) : serveur_loki, serv |
|
| P29 | Authentification : chaque role declare sa position | AFF-111 | ✅ OK | 33 role(s) serveur declares (interne-sans-auth 2, ldap-direct 2, sans-auth-humaine 22, socle-identite 2, web-sso 5) ; 2 lacune(s) nommee(s) : serveur_loki, serv |
|
||||||
| P30 | SDN EVPN : zones, VNets et sous-reseaux derives | AFF-112 | ✅ OK | CONFORME : SDN EVPN, 3 zone(s), 15 VNet(s), 15 sous-reseau(x), aucune collision. |
|
| P30 | SDN EVPN : zones, VNets et sous-reseaux derives | AFF-112 | ✅ OK | CONFORME : SDN EVPN, 3 zone(s), 15 VNet(s), 15 sous-reseau(x), aucune collision. |
|
||||||
| P31 | Documentation : tout ce que le depot FAIT est nomme | — | ✅ OK | 67 scripts expliques et atteignables, 123 cibles make documentees, 68 roles avec README. |
|
| P31 | Documentation : tout ce que le depot FAIT est nomme | — | ✅ OK | 67 scripts expliques et atteignables, 123 cibles make documentees, 68 roles avec README. |
|
||||||
|
|
@ -55,14 +55,14 @@
|
||||||
| P40 | Parente : l'ecosysteme sait de quoi il descend | — | ✅ OK | Parente coherente : 4 depot(s), tous retrouves, tous porteurs d'un remote. |
|
| P40 | Parente : l'ecosysteme sait de quoi il descend | — | ✅ OK | Parente coherente : 4 depot(s), tous retrouves, tous porteurs d'un remote. |
|
||||||
| P41 | Resolution d'instance : une seule, partagee | — | ✅ OK | Resolution unique : 63 script(s) passent par `inventory_rules`, 3 exemption(s) nommee(s). |
|
| P41 | Resolution d'instance : une seule, partagee | — | ✅ OK | Resolution unique : 63 script(s) passent par `inventory_rules`, 3 exemption(s) nommee(s). |
|
||||||
| P42 | L'edge porte les noms qu'il publie | — | ✅ OK | 5 edge(s) emettent un certificat portant les noms publies (instance-ci-1646753/production, OPS-Chezlepro-lab/principal, OPS-Chezlepro/principal, OPS-Technolibre |
|
| P42 | L'edge porte les noms qu'il publie | — | ✅ OK | 5 edge(s) emettent un certificat portant les noms publies (instance-ci-1646753/production, OPS-Chezlepro-lab/principal, OPS-Chezlepro/principal, OPS-Technolibre |
|
||||||
| P43 | Frontiere : le devis voit les machines du site | — | ✅ OK | Devis de la frontiere : 7 machine(s) du plan retrouvees, 154 regle(s) du site. |
|
| P43 | Frontiere : le devis voit les machines du site | — | ✅ OK | Devis de la frontiere : 8 machine(s) du plan retrouvees, 178 regle(s) du site. |
|
||||||
| P44 | Integrations : le serveur avant ses clients | — | ✅ OK | 5 integration(s) appliquent leur serveur avant leurs clients. |
|
| P44 | Integrations : le serveur avant ses clients | — | ✅ OK | 5 integration(s) appliquent leur serveur avant leurs clients. |
|
||||||
| P45 | Pare-feu Proxmox : arme sur les VNet SDN, jamais ailleurs | — | ✅ OK | Le pare-feu Proxmox ne s'arme que sur un VNet SDN (4 cas evalues, dont un qui doit rendre VRAI). |
|
| P45 | Pare-feu Proxmox : arme sur les VNet SDN, jamais ailleurs | — | ✅ OK | Le pare-feu Proxmox ne s'arme que sur un VNet SDN (4 cas evalues, dont un qui doit rendre VRAI). |
|
||||||
| P46 | Plancher /etc/hosts : un seul role en decide | — | ✅ OK | Un seul maitre du plancher — roles/hosts_statiques/tasks/main.yml : manage_etc_hosts: false ; et le gabarit maitre est pose (roles/hosts_statiques/templates/hos |
|
| P46 | Plancher /etc/hosts : un seul role en decide | — | ✅ OK | Un seul maitre du plancher — roles/hosts_statiques/tasks/main.yml : manage_etc_hosts: false ; et le gabarit maitre est pose (roles/hosts_statiques/templates/hos |
|
||||||
| P47 | Zones inverses : couvrir l'occupe, et rien de plus | — | ✅ OK | Les zones inverses couvrent l'occupe et rien de plus (5 cas evalues, dont un site a quatre zones et un tenant a une). |
|
| P47 | Zones inverses : couvrir l'occupe, et rien de plus | — | ✅ OK | Les zones inverses couvrent l'occupe et rien de plus (5 cas evalues, dont un site a quatre zones et un tenant a une). |
|
||||||
| P48 | La carte d'orientation designe ce qui existe, et compte juste | — | ✅ OK | La carte designe 92 chemin(s) qui existent, et ses 7 chiffres correspondent a la mesure. |
|
| P48 | La carte d'orientation designe ce qui existe, et compte juste | — | ✅ OK | La carte designe 92 chemin(s) qui existent, et ses 7 chiffres correspondent a la mesure. |
|
||||||
| P49 | Registre des flux : la matrice d'audit est a jour | — | ✅ OK | Le registre des flux reproduit exactement ce que les `meta/flux.yml` declarent (129 lignes). |
|
| P49 | Registre des flux : la matrice d'audit est a jour | — | ✅ OK | Le registre des flux reproduit exactement ce que les `meta/flux.yml` declarent (129 lignes). |
|
||||||
| P50 | Silences : un refus muet est declare, place en dernier, et motive | — | ✅ OK | 2 silence(s) declare(s), tous en sequence > 1 (la plus haute des 241 regles `pass`), tous non consignes et tous motives. |
|
| P50 | Silences : un refus muet est declare, place en dernier, et motive | — | ✅ OK | 2 silence(s) declare(s), tous en sequence > 1 (la plus haute des 268 regles `pass`), tous non consignes et tous motives. |
|
||||||
| P51 | Collections : toutes declarees, toutes epinglees | — | ✅ OK | 3 collection(s) et 2 bibliotheque(s) Python declarees et epinglees : ansible.posix==1.6.2, community.general==10.3.0, community.postgresql==3.10.2 |
|
| P51 | Collections : toutes declarees, toutes epinglees | — | ✅ OK | 3 collection(s) et 2 bibliotheque(s) Python declarees et epinglees : ansible.posix==1.6.2, community.general==10.3.0, community.postgresql==3.10.2 |
|
||||||
| P52 | Materialiser n'exige pas d'entrer dans le tenant | — | ✅ OK | `creer-vm` confirme par l'agent invite (API des hyperviseurs, deja utilisee pour creer), sans exiger d'entrer dans le tenant. |
|
| P52 | Materialiser n'exige pas d'entrer dans le tenant | — | ✅ OK | `creer-vm` confirme par l'agent invite (API des hyperviseurs, deja utilisee pour creer), sans exiger d'entrer dans le tenant. |
|
||||||
| P53 | L'interne refuse a voix haute, la bordure se tait | — | ✅ OK | L'interne parle, la bordure se tait — 13 ruleset(s) nftables refusent a voix haute ; pare-feu est-ouest en REJECT, source unique ; frontiere muette (actions : b |
|
| P53 | L'interne refuse a voix haute, la bordure se tait | — | ✅ OK | L'interne parle, la bordure se tait — 13 ruleset(s) nftables refusent a voix haute ; pare-feu est-ouest en REJECT, source unique ; frontiere muette (actions : b |
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue