Set-OPS-Public/roles/serveur_ops_site/meta/flux.yml
Daniel Allaire d3ba520500 insemination : declarer le lien, l'emettre d'un seul cote, et un test rouge
L'insemination avait un nom depuis ce matin ; elle n'avait pas de flux. Deux
declarations, aux deux bouts, et rien d'autre :

    serveur_ops_site     egress  22/tcp -> serveur_ops_tenant
    serveur_ops_tenant   ingress 22/tcp <- runner_site         partage: true

ETROIT PAR CONSTRUCTION : il vise le GROUPE `serveur_ops_tenant`, qu'un ecosysteme
ne pose que sur une machine. Au socle, il aurait ouvert le SSH du site vers toute
la flotte du tenant.

L'en-tete disait « ce role n'entre JAMAIS chez un tenant ». Frontiere intenable :
`creer-vm` exige `_instance-requise`, et le runner du site avait deja du basculer
son symlink `instance` sur OPS-Chezlepro pour materialiser ses VM. Declarer ne cree
pas ce pouvoir — ca rend limitable un pouvoir qui s'exercait sans borne. Ce qui
reste interdit n'est pas une regle mais un FAIT : il n'a pas la voute du tenant.

LA REGLE EST EMISE D'UN SEUL COTE, et pas celui qu'on croit. Le paquet penetre le
pare-feu par la patte du SITE, pas par le transit : la regle appartient au cote
site du devis. L'emettre aussi depuis l'`ingress` du tenant aurait produit une
seconde regle sur la mauvaise interface — jamais evaluee, indiscernable d'une regle
utile. La declaration du tenant pose sa regle nftables, et elle seule :

    ip saddr { 10.0.31.11 } tcp dport 22 accept

L'adresse DERIVE du plan du site. Ecrite a la main, elle aurait survecu au prochain
deplacement du runner sans bruit — le site a deja deplace ses machines le 08-25.

Plan de la frontiere : 2 objets a creer, 0 a retirer, 126 inchanges. RIEN D'APPLIQUE.

P41 APPLIQUEE AU PLAN DU SITE : `resoudre_flux` en avait besoin a son tour ; les
trois lecteurs demenagent dans `underlay` et `devis_opnsense` delegue.

DEUX GARDES ONT TRAVAILLE : P33 a refuse `ingress 22` sur un hote portant deja le
sshd du socle (reponse : `partage: true`, comme `serveur_backup`), et le devis a
refuse d'emettre vers un alias vide.

UN TEST ROUGE DEPUIS TROIS JOURS. `test_adressage_derive` construisait un site avec
un `index` — or un SITE n'en a pas depuis add94f2 (08-25), remplace par
`bande_basse_de`. Invisible parce que le geste quotidien est `make prouver`, qui ne
joue pas les tests. Remis sur le contrat actuel, avec sa contrepartie : sans
`bande_basse_de`, aucun chevauchement n'est tolere.

make verifier : vert. make prouver : CONFORME, 52 OK, 0 echec.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on
2026-08-28 13:09:28 -04:00

72 lines
3.3 KiB
YAML

---
# Flux réseau du runner de SITE. Voir docs/flux-conception.md.
#
# Les flux du POUVOIR DE MATERIALISER : API de l'hyperviseur, shell des noeuds, API de
# la frontiere. Chacun est un pouvoir distinct, donc declare a part.
#
# CE ROLE N'ENTRE PAS CHEZ UN TENANT — SAUF SUR SON RUNNER, POUR L'AMORCER (2026-08-28).
#
# Cette ligne disait « JAMAIS », et c'etait une frontiere qu'on ne pouvait pas tenir. Un
# ecosysteme neuf ne s'amorce pas lui-meme : sa premiere machine doit recevoir le socle,
# le moteur, son plan et son plancher de resolution avant de pouvoir configurer quoi que
# ce soit. Sans ce flux, ce travail retombe sur un humain qui le fait a la main — donc
# hors du depot, donc sans preuve.
#
# LE COUPLAGE EXISTAIT DEJA, NON DECLARE : `creer-vm` exige `_instance-requise`, et le
# runner du site doit donc basculer son symlink `instance` sur le depot du tenant qu'il
# materialise. Le declarer ne cree pas un pouvoir, il rend limitable un pouvoir qui
# s'exercait sans borne.
#
# CE QU'IL RESTE INTERDIT, ET QUI N'EST PAS UNE REGLE MAIS UN FAIT : armer. Le runner du
# SITE ne detient pas la voute d'un tenant — elle vit hors depot — et n'en connait pas le
# mot de passe. Il peut poser tout ce qui est public ; c'est un HUMAIN qui remet le
# secret, et c'est la que le pouvoir du site s'arrete. Voir docs/filiation-emancipation.md.
flux:
- sens: egress
port: 8006
protocole: tcp
pair: fabric
chiffrement: tls-requis
raison: >-
API de l'hyperviseur : créer, cloner et détruire les VM de la fabric. Le seul flux
par lequel un écosystème peut en matérialiser un autre.
# SSH VERS LES HYPERVISEURS. L'API Proxmox ne fait pas tout : deplacer un disque,
# lire une configuration reseau, poser un pont — cela passe par le shell du nœud.
# Le declarer separement de l'API rend visible que ce sont DEUX pouvoirs distincts.
- sens: egress
port: 22
protocole: tcp
pair: fabric
chiffrement: ssh
raison: >-
Shell des hyperviseurs : ce que l'API ne couvre pas — configuration reseau, ponts,
deplacement de disques. Un pouvoir distinct de l'API, donc declare a part.
# L'API DE LA FRONTIERE. Le runner du site pose les regles et les alias qui laissent
# passer les flux d'un tenant : sans ce flux, il prepare un terrain injoignable.
- sens: egress
port: 443
protocole: tcp
pair: fabric
chiffrement: tls-requis
raison: >-
API de la frontiere OPNsense : poser les alias et les regles qui ouvrent les flux
du tenant qu'on materialise. Preparer le terrain sans cela laisserait un terrain
injoignable.
# L'INSEMINATION — le seul flux de ce role qui entre chez un tenant.
#
# Etroit par construction : il vise le groupe `serveur_ops_tenant`, qu'un ecosysteme ne
# pose que sur une machine. Declare au socle, il aurait ouvert le SSH du site vers TOUTE
# la flotte du tenant ; declare ici, sa portee est celle du groupe, et le groupe est
# ecrit au plan du tenant.
- sens: egress
port: 22
protocole: tcp
pair: serveur_ops_tenant
chiffrement: ssh
raison: >-
Insemination : amorcer le runner d'un tenant — socle, moteur, plan, plancher de
resolution — pour qu'il prenne ensuite le relais sur ses propres machines. Ne
transporte aucun secret : la voute est remise par un humain.