From a5152a5162af193b4f7bdd602cb296ca9b602831 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Wed, 16 Sep 2026 13:37:18 -0400 Subject: [PATCH] responsabilites : deduites des pouvoirs, et lues par les documents remis Qui peut, doit ; qui ne peut pas, ne peut pas etre tenu. Vingt lignes derivees des trois portees du moteur (calculer, configurer, materialiser), chacune citant son mecanisme. Deux coupures qui ne se devinaient pas : la verification des sauvegardes suit la CLE (l hebergeur heberge des octets qu il ne peut pas ouvrir), et l acces de secours par sudo est dit plutot que tu, avec sa date de fin. Le tableau est canonique dans le depot ; les chartes remises le LISENT entre ses ancres. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 44 ++++++++ docs/audit/preuve-2026-09-16.md | 2 +- docs/carte-set-ops.md | 2 +- docs/responsabilites-locataire-hebergeur.md | 118 ++++++++++++++++++++ 4 files changed, 164 insertions(+), 2 deletions(-) create mode 100644 docs/responsabilites-locataire-hebergeur.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 56c423a..b52111d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,49 @@ # CHANGELOG — Set-OPS +## 2026-09-16 (2) — Les responsabilites, deduites des pouvoirs + +Un partage de responsabilites se redige d'habitude en distribuant des devoirs. Celui-ci +les DEDUIT, et la regle tient en une ligne : + +> Qui peut, doit. Qui ne peut pas, ne peut pas etre tenu — et personne ne peut se +> decharger sur celui qui ne peut pas. + +`docs/responsabilites-locataire-hebergeur.md` part donc des trois portees qui existent +deja dans le moteur — *calculer*, *configurer*, *materialiser* — et en tire vingt lignes, +chacune citant le mecanisme qui la rend vraie : un role, une garde, une commande. + +### Les lignes qui ne se devinaient pas + +**Les sauvegardes se partagent en deux, et la coupure est nette.** L'hebergeur repond de +ce que sa sonde peut constater : le depot accepte-t-il encore une ecriture ? Il ne peut +pas juger un instantane — il heberge des octets chiffres qu'il ne peut pas ouvrir. « Cet +instantane est-il recent, complet, restaurable ? » se demande a qui detient la cle. *La +verification suit la cle.* + +**L'acces de secours est dit plutot que taire.** D-40 donne a l'hebergeur un `sudo` sur +les machines qu'il exploite : exploiter, c'est pouvoir tout lire. La charte l'ecrit, et +enchaine sur sa consequence — c'est la raison d'etre du second temps de la remise, et de +sa DATE. + +**Une ligne sans vis-a-vis est un trou, pas une zone partagee.** C'est la garde de lecture +du tableau : le silence n'a jamais cree de responsabilite. + +### Le PDF LIT la doctrine, il n'en porte pas de copie + +Les chartes remises a Chezlepro et a TechnoLibre sont engendrees depuis le tableau du +depot, entre ses ancres. Deux textes qui diraient deux choses differentes seraient pires +que l'absence de charte : chacun aurait raison de croire le sien. Le generateur REFUSE de +rendre si l'ancre a disparu, plutot que de livrer une charte tronquee. + +Au passage, les deux generateurs partagent desormais `commun.py` — la liste des +locataires et la feuille de style existaient en double. + +### Ce qui n'est pas tranche est nomme + +Le recouvrement de la cle du responsable designe, le changement de responsable, et la +duree de retention avant purge. Une ligne rassurante sans mecanisme derriere vaut moins +qu'un point ouvert ecrit. + ## 2026-09-16 (1) — Remettre un ecosysteme : une procedure, un outil, une garde Livrer se terminait par une phrase : *« tes cles te seront remises separement »*. Ce qui diff --git a/docs/audit/preuve-2026-09-16.md b/docs/audit/preuve-2026-09-16.md index 60a4c12..a36680b 100644 --- a/docs/audit/preuve-2026-09-16.md +++ b/docs/audit/preuve-2026-09-16.md @@ -46,7 +46,7 @@ | P31 | Documentation : tout ce que le depot FAIT est nomme | — | ✅ OK | 68 scripts expliques et atteignables, 128 cibles make documentees, 68 roles avec README. | | P32 | Intrants exiges par les roles : tous fournis | — | ✅ OK | CONFORME : 36 exigence(s) de role, toutes satisfaites (144 cle(s) declaree(s) par l'instance). | | P33 | Aucune collision de port entre roles co-localises | — | ✅ OK | CONFORME : 36 revendication(s) de port, aucune collision entre roles co-localises (35 groupes). | -| P34 | Chaque document declare son lecteur | — | ✅ OK | 47 document(s) declarent leur lecteur (41 genere(s) exempte(s)). | +| P34 | Chaque document declare son lecteur | — | ✅ OK | 48 document(s) declarent leur lecteur (42 genere(s) exempte(s)). | | P35 | Toute application exigeant une base en a une au plan | — | ✅ OK | 4 application(s) exigeant une base l'ont toutes (3 entree(s) au registre). | | P36 | Tout detenteur d'etat porte une sauvegarde | — | ✅ OK | 8 hote(s) de l'ecosysteme et 3 du site detiennent de l'etat, tous porteurs de `client_backup` (9 groupe(s) au catalogue). | | P37 | Le placement du tenant existe chez son hebergeur | — | ✅ OK | placement confronte a l'hebergeur monte (SITE-Chezlepro) : noeud, stockage, pont — tous offerts. | diff --git a/docs/carte-set-ops.md b/docs/carte-set-ops.md index b41c6b0..33e7e6b 100644 --- a/docs/carte-set-ops.md +++ b/docs/carte-set-ops.md @@ -25,7 +25,7 @@ README de rôles). Cette page comble ces deux trous. |---|---|---| | rôles | 68 | `roles/*/` | | README de rôles | 68 | `roles/*/README.md` — l'écart avec la ligne au-dessus est la dette | -| documents | 43 | `docs/*.md` | +| documents | 44 | `docs/*.md` | | pièces d'audit | 47 | `docs/audit/*` | | unités de wiki | 27 | `wiki/*.md` | | décisions en vigueur | 85 | lignes `\| **D-nn** \|` de `decisions-architecture.md` | diff --git a/docs/responsabilites-locataire-hebergeur.md b/docs/responsabilites-locataire-hebergeur.md new file mode 100644 index 0000000..3b71b32 --- /dev/null +++ b/docs/responsabilites-locataire-hebergeur.md @@ -0,0 +1,118 @@ +> **Pour qui :** le locataire **et** l'hébergeur — les deux lisent le même texte, et c'est +> le but. Un partage de responsabilités dont chaque partie aurait sa version est un +> désaccord qui attend son incident. + +# Responsabilités du locataire et de l'hébergeur + +## 1. Le principe : une responsabilité est la conséquence d'un pouvoir + +Ce document ne distribue pas des devoirs par bonne volonté. Il les **dérive** : + +> **Qui peut, doit. Qui ne peut pas, ne peut pas être tenu — et personne ne peut se +> décharger sur celui qui ne peut pas.** + +Trois règles en découlent, et elles décident de tout le reste : + +1. **À chaque pouvoir sa responsabilité.** Un pouvoir sans devoir correspondant est une + prise sur autrui ; un devoir sans pouvoir correspondant est un piège. +2. **Une responsabilité sans mécanisme est un vœu.** Chaque ligne du tableau nomme + l'endroit du système qui la rend vraie — un rôle, une garde, une commande. Ce qui n'a + pas de mécanisme est écrit au §5, parmi les points non tranchés, plutôt que promis. +3. **Le silence ne crée pas de responsabilité.** Si une ligne n'a pas de vis-à-vis, ce + n'est pas une zone partagée : c'est un trou, et il se voit. + +## 2. La ligne de partage : trois portées, et aucun pouvoir total + +C'est la structure même du moteur, pas une convention de contrat +(`roles/serveur_ops_tenant/README.md`) : + +``` +calculer plan → inventaire aucune voûte n'importe quel runner +configurer des rôles sur ses machines voûte du TENANT le runner du locataire +matérialiser créer / détruire des VM voûte du SITE le runner de l'hébergeur +``` + +**Aucun runner n'est omnipotent.** Celui de l'hébergeur matérialise le terrain et n'entre +jamais chez un locataire ; celui du locataire configure son écosystème et ne touche jamais +la fabric. Tout ce qui suit découle de cette coupure. + +## 3. Le tableau + + + +| Le pouvoir | Qui le détient | La responsabilité qui en découle | Ce que l'autre ne peut donc pas faire à sa place | +|---|---|---|---| +| **Créer et détruire les machines** (`raser`, `site-raser`, clonage du gabarit) | l'hébergeur | Que les machines existent, démarrent et tiennent ; qu'aucune destruction n'ait lieu sans confirmation explicite ni sans sauvegarde hors du site au préalable | Le locataire ne peut pas garantir l'existence de ses machines, ni se les rendre lui-même | +| **Le réseau, la frontière et le stockage** (SDN, VLAN, OPNsense, Ceph) | l'hébergeur | Que le chemin existe et que la bordure refuse ce qui n'est pas déclaré ; prévenir avant toute coupure planifiée | Le locataire ne peut pas ouvrir un flux vers l'extérieur sans que l'hébergeur l'applique | +| **Déclarer ses flux** (`roles/*/meta/flux.yml`, pare-feu d'hôte) | le locataire | Déclarer ce que ses services ont besoin d'échanger ; ce qui n'est pas déclaré est refusé, et c'est voulu | L'hébergeur ne peut pas deviner un flux applicatif ; il n'ouvrira rien « au cas où » | +| **Configurer les services** (son runner, sa voûte) | le locataire | L'état de ses services : ce qui est déployé, à jour, et conforme à son plan | L'hébergeur ne peut pas configurer un service du locataire : il n'a pas sa voûte | +| **L'annuaire et l'entrée unique** (LDAP, Keycloak) | le locataire | Qui entre, qui sort, et **quand** — créer, désactiver, révoquer sans attendre personne | L'hébergeur ne peut retirer l'accès de personne : mutualiser l'annuaire serait lui confier ses gens | +| **Les habilitations** (appartenance aux groupes, D-66/D-67) | le locataire | Tenir ses groupes à jour. Le moteur amorce **un** accès puis se retire : il ne réconcilie jamais les appartenances | Ni l'hébergeur ni l'outillage ne corrigeront un groupe : un redéploiement n'efface pas le compte créé la veille | +| **Son autorité de certification** (step-ca, D-87) | le locataire | Renouveler ses certificats, et **recharger** les services qui les servent — un certificat renouvelé sur disque reste servi périmé en mémoire | L'hébergeur ne peut pas émettre de certificat au nom du locataire, et c'est délibéré : il pourrait sinon se faire passer pour n'importe lequel de ses services | +| **Ses journaux** (Loki, D-87) | le locataire | Les lire, les conserver, et les fournir s'il demande de l'aide | L'hébergeur ne voit pas les journaux du locataire : il ne peut donc pas diagnostiquer un incident applicatif à sa place | +| **La disponibilité de la fabric** (une VM est-elle debout ?) | l'hébergeur | Constater qu'une machine est tombée et le dire — c'est sa fabric | Le locataire n'a pas de vue sur l'hyperviseur qui porte ses VM | +| **Les métriques d'hébergement** (charge, disque) | l'hébergeur, **avec réserve** | S'en servir pour dimensionner et prévenir, pas pour lire l'activité d'une organisation — elles disent *quand* et *combien* | — (elles ne disent pas *quoi* : le contenu reste hors de portée) | +| **Le dépôt de sauvegarde** (`serveur_backup`, chiffré côté client) | l'hébergeur | Que le dépôt **accepte encore une écriture** : espace, droits, système de fichiers en lecture seule. Sa sonde constate l'endroit, jamais le contenu | L'hébergeur **ne peut pas** juger un instantané : il héberge des octets qu'il ne peut pas ouvrir | +| **La clé de ses sauvegardes** (restic) | le locataire | Juger que ses instantanés sont **récents, complets et restaurables**, et éprouver une restauration. *La vérification suit la clé* | Personne ne peut vérifier une sauvegarde à la place de qui détient la clé — et sa perte les rend définitivement illisibles | +| **Sa voûte et ses secrets** (jamais mutualisée) | le locataire | Garder sa clé hors de l'infrastructure qu'elle ouvre, en double, et faire tourner ses secrets | L'hébergeur ne peut pas recouvrer une clé de voûte perdue : il n'en a aucune copie, par construction | +| **Le courriel** (relais à la bordure) | partagé | L'**enveloppe** transite chez l'hébergeur, qui en répond ; le **contenu** appartient au locataire, qui en répond | L'hébergeur ne lit pas le contenu ; le locataire ne tient pas la réputation de la bordure | +| **La forge du génome** (D-81) | l'hébergeur | Tenir l'autorité du génome disponible : c'est de là qu'un écosystème se reproduit | Le locataire ne dépend pas d'elle pour **vivre** — seulement pour se reconstruire ; il peut en garder son propre miroir | +| **L'accès de secours par `sudo`** (D-40) | l'hébergeur, **tant qu'il exploite** | Le dire plutôt que de le taire : exploiter une machine, c'est pouvoir tout y lire. C'est la raison d'être du second temps de la remise, et de sa date | Le locataire ne peut pas le supprimer sans reprendre lui-même l'exploitation — d'où une **échéance écrite**, pas une confiance indéfinie | +| **La remise des clés** (`make remise-*`, garde **P80**) | l'hébergeur remet, le locataire reçoit | Remettre en deux temps : l'identité le jour de la livraison, la machine à l'échéance — sa clé entre, la nôtre sort, la voûte est re-clétée | Un accès qu'on oublie de rendre ne devient pas légitime en vieillissant : la garde signale tout retard | +| **Nommer le responsable désigné** (D-18, `remise.yml`) | le locataire | Nommer la personne qui engage l'organisation, et la maintenir à jour | L'hébergeur ne peut pas la désigner : ce serait choisir qui a le droit de le quitter | +| **Décider de partir** (migration, émancipation) | le locataire | Mandater, et emporter ce qui est à lui : son plan, ses données, sa voûte, ses domaines | L'hébergeur ne peut ni retenir ni décider à sa place ; la machine **instruit**, l'humain décide | +| **Libérer un partant** (`migration-tenant.md` §6) | l'hébergeur | **Révoquer, pas transmettre** : ses accès tombent, puis rétention convenue, puis purge | Le locataire ne peut pas vérifier lui-même la purge ; elle est un engagement daté, pas une mesure | + + + +## 4. Ce que personne ne peut déléguer + +Trois choses ne se confient à aucune des deux parties, parce que les confier les annule : + +- **La phrase de passe d'un paquet de remise** ne voyage jamais avec le support qu'elle + ouvre. Séparés, ils ne valent rien l'un sans l'autre ; ensemble, ils valent l'écosystème. +- **La seconde copie** d'une clé, dans un autre lieu physique. Un support unique dans un + tiroir unique n'est pas une sauvegarde, c'est le même risque déplacé de quelques mètres. +- **La comparaison d'une empreinte** avant d'installer une autorité de certification. + Installer une AC, c'est lui donner le droit de signer n'importe quel nom : la + comparaison est ce qui distingue sa racine d'une racine interceptée. + +## 5. Ce qui n'est pas tranché — et qui reste donc à convenir + +Nommer un point ouvert vaut mieux qu'une ligne rassurante sans mécanisme derrière. + +- **Le recouvrement de la clé du responsable désigné.** Elle se perd, se compromet, ou la + personne quitte l'organisation. Sans procédure, un locataire devient *inmigrable* : + captif non par contrat mais par accident. Piste retenue : un **contact de secours nommé + en même temps que le responsable**, tant que personne n'est en situation d'urgence. +- **Comment on change de responsable désigné** — acte au moins aussi sensible que la + migration, puisqu'il décide qui pourra la mandater ensuite. +- **La durée de rétention** avant purge chez un hébergeur sortant : elle se convient, elle + ne se dérive pas. +- **La preuve que l'hébergeur ne peut plus entrer.** Le plan déclare la révocation et le + déploiement l'applique ; le vérifier depuis l'extérieur demande d'essayer d'entrer, donc + une machine vivante (`make emancipation-prouver`). + +## 6. Comment chaque ligne se vérifie + +Aucune de ces responsabilités n'est laissée à la parole : + +``` +make prouver le dépôt est-il cohérent avec lui-même (80 preuves, zéro réseau) +make remise-verifier le second temps de la remise est-il fait, ou en retard ? (P80) +make certificats-plan ce que le disque porte contre ce que la mémoire sert +make expositions-plan chaque service publié répond-il, et depuis où +make identite-plan royaume, fédération, politique de mot de passe, comptes +make emancipation-prouver un lien d'hébergement est-il réellement coupé +``` + +`make deployer` **répare**, les devis **constatent** : les confondre fait perdre +l'information au moment où elle sert. + +--- + +*Le partage décrit ici n'est pas une politique commerciale : c'est la forme du système. +Chaque fois qu'il a été possible de donner un pouvoir au locataire, il lui a été donné — +et chaque fois que l'hébergeur a conservé un pouvoir, c'est parce que quelqu'un doit porter +la fabric, et cela s'écrit ici plutôt que de se découvrir le jour d'un incident.*