From 53e2f781485c2f6f7739fb523311d186410e3062 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Thu, 10 Sep 2026 21:05:47 -0400 Subject: [PATCH] vigie : la console de supervision porte enfin un nom de fonction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit icinga..internal devient vigie..internal, sur les trois locataires a la fois. Le mot avait ete ecarte pour Grafana precisement parce qu il connote la guette du danger : c est le metier d Icinga. Quatrieme recopie du meme FQDN a tomber : serveur_oauth2_proxy_redirect_url etait posee a la main dans les group_vars de chaque instance. Elle derive maintenant de serveur_oauth2_proxy_hostname. Le repli reste vide et non fabrique : l assertion doit refuser un deploiement sans exposition, pas inventer un nom que personne ne resout. Deploye et VERIFIE sur Chezlepro : le SSO renvoie sur vigie, le certificat servi porte observatoire et vigie et plus aucun ancien nom. Deployer nginx pose le vhost mais laisse le SAN en arriere — c est client_pki qui reemet. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q --- CHANGELOG.md | 36 ++++++++++++++++++++ docs/audit/plan-de-recette.md | 2 +- docs/audit/preuve-2026-09-10.md | 4 +-- docs/audit/wiki-publie.yml | 2 +- roles/serveur_oauth2_proxy/defaults/main.yml | 9 ++++- wiki/Reverse-proxy-et-TLS.md | 2 +- wiki/Supervision-et-impact.md | 2 +- 7 files changed, 50 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aac8cdb..ad2e212 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,41 @@ # CHANGELOG — Set-OPS +## 2026-09-10 (18) — `vigie` pour Icinga, et la quatrieme liste tombe + +Suite du renommage precedent, decide par l'exploitant : `vigie` est le nom de la console de +supervision. Le mot avait ete ecarte pour Grafana precisement parce qu'il connote la guette +du danger — c'est le metier d'Icinga, pas celui d'un tableau de bord. + + icinga.chezlepro.internal -> vigie.chezlepro.internal + icinga.technolibre.internal -> vigie.technolibre.internal + icinga.lab.chezlepro.internal -> vigie.lab.chezlepro.internal + +Les trois locataires en meme temps : deux vocabulaires entre ecosystemes, c'est le defaut +qu'on vient de corriger. + +### La quatrieme liste + +`serveur_oauth2_proxy_redirect_url` etait posee A LA MAIN dans les group_vars de chaque +instance, avec le FQDN recopie du plan. Quatrieme recopie du meme nom, apres les SAN (deja +derives), les clients Keycloak (P66) et les noms publics des roles (P67). + +Elle derive maintenant de `serveur_oauth2_proxy_hostname`, que `instancier` pose depuis +`expose:`. Le repli reste VIDE et non fabrique : l'assertion du role doit refuser un +deploiement sans exposition, pas inventer un nom que personne ne resout. La ligne a ete +retiree des trois instances. + +### Ce qu'il faut savoir pour le prochain renommage + +Changer une exposition ne suffit pas a refaire le certificat de l'edge. Deployer +`serveur_nginx` pose le vhost mais laisse le SAN en arriere ; c'est `client_pki` qui +reemet. L'ordre eprouve deux fois aujourd'hui : + + serveur_powerdns -> serveur_keycloak -> le service -> serveur_nginx -> client_pki + +Le certificat servi a ete VERIFIE apres coup, pas suppose : il porte `observatoire` et +`vigie`, et plus aucun des deux anciens noms. Aucune garde ne compare encore le SAN SERVI aux +expositions du plan — ce serait un controle a la demande, pas une preuve statique. + ## 2026-09-10 (17) — La console d'observabilite s'appelle pareil des deux cotes Deux ecosystemes, deux noms pour le meme service : `grafana.chezlepro.internal` chez le diff --git a/docs/audit/plan-de-recette.md b/docs/audit/plan-de-recette.md index 84c453e..ac5f0f2 100644 --- a/docs/audit/plan-de-recette.md +++ b/docs/audit/plan-de-recette.md @@ -225,7 +225,7 @@ le côté humain **est** la preuve de l'affirmation « exploitable sans IA » (c | # | Ce qu'on éprouve | Le geste (avec l'attendu) | Type | Preuve auto | |---|---|---|---|---| -| 1 | Ouvre Icinga Web 2 | (https://icinga.chezlepro.internal, via le SSO) : la liste des hôtes et services supervisés, avec leur état (vert/jaune/rouge). | 👁 observe | — | +| 1 | Ouvre Icinga Web 2 | (https://vigie.chezlepro.internal, via le SSO) : la liste des hôtes et services supervisés, avec leur état (vert/jaune/rouge). | 👁 observe | — | | 2 | Vois l'impact | Menu *Business Processes* → « Supervision Chezlepro » : un processus qui agrège des checks (load, procs, ping…) en un état roulé. C'est l'impact, pas une case. | 👁 observe | — | | 3 | Casse & répare | Provoque l'échec d'un check (ex. arrête un service surveillé) : l'état passe CRITICAL, et le processus BPM qui en dépend rougit (l'impact remonte). Répare : tout reverdit. Tu *sens* la différence entre *mesurer* et *superviser/alerter*. | 🔨 casse-répare | — | diff --git a/docs/audit/preuve-2026-09-10.md b/docs/audit/preuve-2026-09-10.md index cc778c3..4109ec8 100644 --- a/docs/audit/preuve-2026-09-10.md +++ b/docs/audit/preuve-2026-09-10.md @@ -44,7 +44,7 @@ | P29 | Authentification : chaque role declare sa position | AFF-111 | ✅ OK | 32 role(s) serveur declares (interne-sans-auth 2, ldap-direct 2, sans-auth-humaine 21, 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. | | P31 | Documentation : tout ce que le depot FAIT est nomme | — | ✅ OK | 59 scripts expliques et atteignables, 116 cibles make documentees, 67 roles avec README. | -| P32 | Intrants exiges par les roles : tous fournis | — | ✅ OK | CONFORME : 38 exigence(s) de role, toutes satisfaites (138 cle(s) declaree(s) par l'instance). | +| P32 | Intrants exiges par les roles : tous fournis | — | ✅ OK | CONFORME : 38 exigence(s) de role, toutes satisfaites (137 cle(s) declaree(s) par l'instance). | | P33 | Aucune collision de port entre roles co-localises | — | ✅ OK | CONFORME : 34 revendication(s) de port, aucune collision entre roles co-localises (36 groupes). | | P34 | Chaque document declare son lecteur | — | ✅ OK | 44 document(s) declarent leur lecteur (36 genere(s) exempte(s)). | | P35 | Toute application exigeant une base en a une au plan | — | ✅ OK | 5 application(s) exigeant une base l'ont toutes (4 entree(s) au registre). | @@ -72,7 +72,7 @@ | P57 | Comptes en prose : les chiffres du depot sur lui-meme | — | ✅ OK | Les comptes ecrits en prose correspondent a la mesure (67 preuves, 67 roles, 41 groupes). | | P58 | Habilitations : chaque service dit a quel GROUPE, et par quoi | — | ✅ OK | 8 habilitation(s) declarees, toutes nommant un groupe, un mecanisme connu et une raison ; les `role-realm` sont projetees. | | P59 | Enumerations annoncees : le nombre correspond a ce qui suit | — | ✅ OK | 2 enumeration(s) annoncee(s) correspondent a ce qu'elles annoncent (formes non ambigues seulement). | -| P60 | Wiki publie : la forge sert ce que le depot dit | AFF-002 | ✅ OK | Le wiki publie correspond au depot : `wiki/` n'a pas bouge depuis `2450c9e` (publie le 2026-09-10). | +| P60 | Wiki publie : la forge sert ce que le depot dit | AFF-002 | ✅ OK | Le wiki publie correspond au depot : `wiki/` n'a pas bouge depuis `d1ae41c` (publie le 2026-09-10). | | P61 | Schema du plan : il decrit tout ce que les plans contiennent | AFF-033 | ✅ OK | Le schema decrit 47 champ(s) sur 6 registres ; il couvre tout ce que les plans reels contiennent, et la FORME de chaque champ (scalaire / objet / table) corresp | | P62 | Schema du plan : il decrit tout ce que le MOTEUR accepte | AFF-033 | ✅ OK | Les 4 validateurs n'acceptent aucun champ que le schema ignore (applications:8, bases_donnees:4, domaines_publics:5, serveurs:3 champ(s) lus par validateur). | | P63 | cloud-init nait avec la VM et ne lui survit pas | — | ✅ OK | cloud-init est au gabarit (la premiere seconde), absent du socle (pas de va-et-vient), et retire par le durcissement — avec la garde qui verifie que le reseau s | diff --git a/docs/audit/wiki-publie.yml b/docs/audit/wiki-publie.yml index 5ac806a..75f2dfe 100644 --- a/docs/audit/wiki-publie.yml +++ b/docs/audit/wiki-publie.yml @@ -1,5 +1,5 @@ --- # Ecrit par `make wiki-publier`, lu par la preuve P60. Ne pas editer a la main. remote: ssh://git@forge.genese.internal/genome/set-ops-public.wiki.git -source: 2450c9e +source: d1ae41c date: 2026-09-10 diff --git a/roles/serveur_oauth2_proxy/defaults/main.yml b/roles/serveur_oauth2_proxy/defaults/main.yml index aedc228..3984b88 100644 --- a/roles/serveur_oauth2_proxy/defaults/main.yml +++ b/roles/serveur_oauth2_proxy/defaults/main.yml @@ -26,7 +26,14 @@ serveur_oauth2_proxy_app_idp: "keycloak" serveur_oauth2_proxy_issuer: "https://keycloak.{{ domaine_interne }}/realms/{{ serveur_oauth2_proxy_realm }}" serveur_oauth2_proxy_client_id: "" # OBLIGATOIRE (par instance) serveur_oauth2_proxy_client_secret: "" # OBLIGATOIRE (voûte) -serveur_oauth2_proxy_redirect_url: "" # OBLIGATOIRE (https:///oauth2/callback) +# DERIVE de l'exposition que le plan declare pour l'application protegee. +# `instancier` pose `serveur_oauth2_proxy_hostname` depuis `expose:` ; l'URL de retour +# s'en deduit. Une valeur posee dans les group_vars gagne encore — et le repli reste +# vide, pour que l'assertion refuse un deploiement sans exposition plutot que de +# fabriquer un nom que personne ne resout. +serveur_oauth2_proxy_redirect_url: >- + {{ ('https://' ~ serveur_oauth2_proxy_hostname ~ '/oauth2/callback') + if (serveur_oauth2_proxy_hostname | default('') | length > 0) else '' }} # Application protégée (upstream local). serveur_oauth2_proxy_upstream: "" # OBLIGATOIRE (ex. http://127.0.0.1:8080) diff --git a/wiki/Reverse-proxy-et-TLS.md b/wiki/Reverse-proxy-et-TLS.md index c877f8d..1088809 100644 --- a/wiki/Reverse-proxy-et-TLS.md +++ b/wiki/Reverse-proxy-et-TLS.md @@ -19,7 +19,7 @@ Un seul endroit gère les certificats → simple et cohérent. ## ② Comment Set-OPS le fait `serveur_nginx` déployé sur l'**edge** (`infra-edge`) est le reverse-proxy. Le point élégant : -l'**exposition est auto-dérivée**. Déclarer `expose: [icinga.chezlepro.internal]` sur une app +l'**exposition est auto-dérivée**. Déclarer `expose: [vigie.chezlepro.internal]` sur une app génère **tout** : ``` diff --git a/wiki/Supervision-et-impact.md b/wiki/Supervision-et-impact.md index 33d4e3c..e34afe9 100644 --- a/wiki/Supervision-et-impact.md +++ b/wiki/Supervision-et-impact.md @@ -49,7 +49,7 @@ Tu as appris **supervision active vs observabilité passive, l'état, l'alerting ## ④ À toi de jouer -1. **Ouvre Icinga Web 2** (`https://icinga.chezlepro.internal`, via le SSO) : la liste des hôtes +1. **Ouvre Icinga Web 2** (`https://vigie.chezlepro.internal`, via le SSO) : la liste des hôtes et services **supervisés**, avec leur **état** (vert/jaune/rouge). 2. **Vois l'impact.** Menu *Business Processes* → « **Supervision Chezlepro** » : un processus qui **agrège** des checks (load, procs, ping…) en un état roulé. C'est l'impact, pas une case.