la console d exploitation est allumee, et publiee par l edge
console.genese.internal : 401 sans justificatif, la console avec. Le site est le premier ecosysteme a servir son GUI par un nom, en TLS verifie. Le vestibule reste, et c est le contraire d une contradiction avec la veille : Icinga Web 2 a une page de connexion, donc on lui a retire le sien ; le GUI de Set-OPS sert sa page a qui la demande, jeton inclus, donc le vestibule EST sa seule serrure. Verifie sur la machine : le GUI n ecoute que 127.0.0.1:8765, seul le 8090 du vestibule est publie. Controle dans les deux sens — une serrure ne se prouve qu en la forcant et en l ouvrant. Et la sonde console-ops exige un REFUS sur une requete anonyme, parce qu un 200 y serait la pire des reponses. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
This commit is contained in:
parent
504840f378
commit
0529951381
3 changed files with 62 additions and 3 deletions
46
CHANGELOG.md
46
CHANGELOG.md
|
|
@ -1,5 +1,51 @@
|
||||||
# CHANGELOG — Set-OPS
|
# CHANGELOG — Set-OPS
|
||||||
|
|
||||||
|
## 2026-09-15 (4) — La console d'exploitation est allumee, et publiee par l'edge
|
||||||
|
|
||||||
|
https://console.genese.internal/ 401 sans justificatif, la console avec
|
||||||
|
|
||||||
|
Le site est le premier ecosysteme a servir son GUI par un nom, en TLS verifie. Il a fallu
|
||||||
|
qu'il ait un edge pour que ce soit possible.
|
||||||
|
|
||||||
|
### Le vestibule reste, et c'est le contraire d'une contradiction
|
||||||
|
|
||||||
|
La veille, on RETIRAIT le vestibule de la vigie : Icinga Web 2 sait s'authentifier, en
|
||||||
|
poser un devant reinventait sa page de connexion. Ici on en GARDE un, et la difference est
|
||||||
|
tout le sujet :
|
||||||
|
|
||||||
|
Icinga Web 2 a une page de connexion, des comptes, des groupes -> pas de vestibule
|
||||||
|
GUI Set-OPS `GET /` sert la page A QUI LA DEMANDE, jeton inclus -> le vestibule EST
|
||||||
|
sa seule serrure
|
||||||
|
|
||||||
|
Le jeton du GUI garde contre le CSRF, pas contre un visiteur. Ce qui protege la fabric,
|
||||||
|
c'est que le service n'ecoute que `127.0.0.1` — verifie sur la machine :
|
||||||
|
|
||||||
|
LISTEN 127.0.0.1:8765 <- le GUI, joignable de nulle part ailleurs
|
||||||
|
LISTEN 0.0.0.0:8090 <- le vestibule, seul publie
|
||||||
|
|
||||||
|
`locale` (HTTP Basic) parce qu'un site n'a ni annuaire ni Keycloak. Chez un locataire ce
|
||||||
|
sera `oidc`, derriere oauth2-proxy — et c'est la que l'integration a sa place.
|
||||||
|
|
||||||
|
### Controle dans les deux sens
|
||||||
|
|
||||||
|
Une serrure ne se prouve qu'en la forcant ET en l'ouvrant :
|
||||||
|
|
||||||
|
sans justificatif HTTP 401
|
||||||
|
avec 152 805 octets — « Set-OPS · Votre artisan numerique »
|
||||||
|
182 vues du GUI, le jeton injecte dans la page
|
||||||
|
|
||||||
|
Et la sonde `console-ops` mesure exactement ca — elle exige un REFUS sur une requete
|
||||||
|
anonyme, parce qu'un 200 y serait la pire des reponses :
|
||||||
|
|
||||||
|
site-ops-01 | console-ops | OK | Console vivante, vestibule (locale) en place :
|
||||||
|
une requete anonyme rend HTTP 401.
|
||||||
|
|
||||||
|
### Le mot de passe le plus lourd de la voute
|
||||||
|
|
||||||
|
48 caracteres la ou les autres en ont 32 ou 40. Il n'ouvre pas une console de lecture : il
|
||||||
|
ouvre `deployer`, `creer`, `instance-utiliser` et l'edition du plan. Le cout d'un caractere
|
||||||
|
de plus est nul ; celui d'une console forcee ne l'est pas.
|
||||||
|
|
||||||
## 2026-09-15 (3) — Le charabia de la console : deux bases confondues, et un etat sans domicile
|
## 2026-09-15 (3) — Le charabia de la console : deux bases confondues, et un etat sans domicile
|
||||||
|
|
||||||
L'exploitant, apres s'etre connecte : *« icingaweb2 affiche un tas de charabia quand
|
L'exploitant, apres s'etre connecte : *« icingaweb2 affiche un tas de charabia quand
|
||||||
|
|
|
||||||
|
|
@ -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 : 8 machine(s) du plan retrouvees, 181 regle(s) du site. |
|
| P43 | Frontiere : le devis voit les machines du site | — | ✅ OK | Devis de la frontiere : 8 machine(s) du plan retrouvees, 182 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 271 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 272 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 |
|
||||||
|
|
@ -79,7 +79,7 @@
|
||||||
| P64 | Sondes de supervision : declarees ET deposees | — | ✅ OK | 40 sonde(s) declaree(s) ET deposee(s), chacune avec sa raison et son `ttl` : client_journal/journaux, client_metrique/metriques, client_pki/certificat, serveur_ |
|
| P64 | Sondes de supervision : declarees ET deposees | — | ✅ OK | 40 sonde(s) declaree(s) ET deposee(s), chacune avec sa raison et son `ttl` : client_journal/journaux, client_metrique/metriques, client_pki/certificat, serveur_ |
|
||||||
| P65 | Depots tiers : demandes au cache, jamais en HTTPS direct | — | ✅ OK | 4 depot(s) tiers relaye(s) par le cache, aucun role ne les vise en https:// ecrit en dur. |
|
| P65 | Depots tiers : demandes au cache, jamais en HTTPS direct | — | ✅ OK | 4 depot(s) tiers relaye(s) par le cache, aucun role ne les vise en https:// ecrit en dur. |
|
||||||
| P66 | Clients OIDC : chaque URI vise un nom que le plan expose | — | ✅ OK | 3 client(s) OIDC, toutes leurs URI visent un FQDN que le plan expose (5 exposition(s)). |
|
| P66 | Clients OIDC : chaque URI vise un nom que le plan expose | — | ✅ OK | 3 client(s) OIDC, toutes leurs URI visent un FQDN que le plan expose (5 exposition(s)). |
|
||||||
| P67 | Nom public : le service porte celui du plan, pas celui du role | — | ✅ OK | 11 service(s) expose(s) portent le nom du plan, sur 2 inventaire(s) : instance, SITE. |
|
| P67 | Nom public : le service porte celui du plan, pas celui du role | — | ✅ OK | 12 service(s) expose(s) portent le nom du plan, sur 2 inventaire(s) : instance, SITE. |
|
||||||
| P68 | Cle de depot telechargee : mesuree avant d'etre utilisee | — | ✅ OK | 5 role(s) telechargent une cle de depot, tous la mesurent avant de s'en servir. |
|
| P68 | Cle de depot telechargee : mesuree avant d'etre utilisee | — | ✅ OK | 5 role(s) telechargent une cle de depot, tous la mesurent avant de s'en servir. |
|
||||||
| P69 | Amorcage d'un tenant : l'adresse designe le site REEL | — | ✅ OK | 2 adresse(s) d'amorcage designent bien une machine du site. |
|
| P69 | Amorcage d'un tenant : l'adresse designe le site REEL | — | ✅ OK | 2 adresse(s) d'amorcage designent bien une machine du site. |
|
||||||
| P70 | Depot de binaires : il tient tout ce que les roles vont chercher | — | ✅ OK | 6 artefact(s) direct(s) tenus par le depot du site. |
|
| P70 | Depot de binaires : il tient tout ce que les roles vont chercher | — | ✅ OK | 6 artefact(s) direct(s) tenus par le depot du site. |
|
||||||
|
|
|
||||||
|
|
@ -685,6 +685,19 @@ def inventaire() -> dict:
|
||||||
# `auth_basic` nginx devant — un vestibule devant une application qui sait
|
# `auth_basic` nginx devant — un vestibule devant une application qui sait
|
||||||
# deja s'authentifier (corrige le 2026-09-15).
|
# deja s'authentifier (corrige le 2026-09-15).
|
||||||
"serveur_icingaweb2_auth": "db",
|
"serveur_icingaweb2_auth": "db",
|
||||||
|
# LA CONSOLE D'EXPLOITATION DU SITE, ALLUMEE (2026-09-15).
|
||||||
|
#
|
||||||
|
# `locale` ET PAS `oidc`, ET LA DIFFERENCE AVEC LA VIGIE EST TOUT LE SUJET.
|
||||||
|
# Icinga Web 2 sait s'authentifier : on lui a RETIRE son vestibule. Le GUI de
|
||||||
|
# Set-OPS, lui, n'a AUCUNE authentification — `GET /` sert la page a qui la
|
||||||
|
# demande, avec son jeton dedans. Le vestibule est donc sa seule serrure, et
|
||||||
|
# non une couche de trop.
|
||||||
|
#
|
||||||
|
# Un site n'a ni annuaire ni Keycloak : `locale` est le repli, et il est
|
||||||
|
# declare comme tel dans le role. Chez un locataire, ce sera `oidc`.
|
||||||
|
"serveur_ops_gui_actif": True,
|
||||||
|
"serveur_ops_gui_auth": "locale",
|
||||||
|
"serveur_ops_gui_admin_motdepasse": "{{ vault_setops_gui_admin | default('') }}",
|
||||||
# L'EDGE SERT LE CERTIFICAT DE L'AC INTERNE, PAS LE BOUCHON DE DEBIAN.
|
# L'EDGE SERT LE CERTIFICAT DE L'AC INTERNE, PAS LE BOUCHON DE DEBIAN.
|
||||||
#
|
#
|
||||||
# `serveur_nginx` a pour DEFAUT `ssl-cert-snakeoil.pem`, avec un commentaire
|
# `serveur_nginx` a pour DEFAUT `ssl-cert-snakeoil.pem`, avec un commentaire
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue