dorsal : confiance limitee a la forge du site ; chemin public eprouve de bout en bout

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-09-29 17:34:44 -04:00
parent 8186389309
commit 80bd8e88ac
3 changed files with 80 additions and 0 deletions

View file

@ -1,5 +1,37 @@
# CHANGELOG — Set-OPS
## 2026-09-29 (41) — Le chemin public éprouvé de bout en bout : Internet → `.61` → WAF → dorsal → forge du site
**Le contenu vient de la forge du site.** Organisation `essais` (distincte du génome), dépôt
public `essai-web` et sa page `public/index.html`, créés par l'API de la forge depuis le runner
du site ; lecture anonyme vérifiée.
**Le dorsal fait confiance à la forge du site, et à elle seule.** Comme le runner : la racine
de l'AC du site n'entre pas dans le magasin système, `git config http.<url>.sslCAInfo` la
limite à l'adresse de la forge. L'adresse et la racine sont LUES chez le runner du locataire
(`serveur_ops_forge_amont`, `serveur_ops_forge_amont_ac`) — pas de seconde copie. Premier
passage : le répertoire de la racine manquait (créé désormais). Posé aussi chez Technolibre.
**Déclaré au plan de Chezlepro** : application `essai_web` (dorsal, port 80,
`expose: essai.chezlepro.ca`) et le site `essai` du dorsal ; inventaire régénéré (`make
instancier`, écart relu : `serveur_web_dorsal_hostname` et `sans_exposition` du frontal — une
variable que seul l'edge lit ; le certificat interne du frontal passe par `client_pki`, filtré).
**Éprouvé depuis l'Internet** (le wifi du poste sort par un autre accès) :
- le DNS public du site répond `essai.chezlepro.ca → 69.70.26.61` — la zone du locataire,
notifiée et transférée ;
- la page est servie : `.61` → frontal → dorsal ;
- une injection SQL est journalisée par le WAF (942100, 949110) et passe (200) : mode
détection, comme prévu ;
- un nom inconnu sur `.61` est refusé.
Sondes : `sites-servis` « 1 servi », `frontal` « 1 exposition publique servie, WAF CRS en
DetectionOnly ».
**Reste** : Let's Encrypt (le 443 attend son certificat) ; passer le WAF en blocage après
lecture de son journal ; le plancher `/etc/hosts` de Chezlepro n'a pas encore la ligne
`essai.chezlepro.ca` (sans effet sur la sonde `plancher`, qui ne compte que le domaine interne).
## 2026-09-29 (40) — Le domaine public désigne le frontal ; les noms publics pointent vers l'adresse du locataire ; le dorsal refuse les inconnus
**Point 3.** `domaines.yml` des deux locataires : le domaine public (`chezlepro.ca`,

View file

@ -56,3 +56,18 @@ serveur_web_dorsal_sites: []
# l'edge, pour un nom interne) qui les recoit et les relaie. La sonde mesure ce qu'il ira
# chercher — si le frontal est vert et le site muet, la panne est ici.
serveur_web_dorsal_sites_port: 80
# --- LA FORGE DU SITE, SOURCE DES SITES ET DES APPLICATIONS (2026-09-29) -------------------
#
# Les locataires n'ont plus de forge a eux : le contenu vient de celle du SITE, jointe par
# son adresse et signee par l'AC du site. On ne pose pas cette racine dans le magasin
# systeme : `git config http.<url>.sslCAInfo` ne l'applique qu'a CETTE forge — le patron du
# runner (`serveur_ops`). L'adresse et la racine sont LUES chez le runner du locataire,
# qui les declare deja : une seconde copie prendrait du retard.
serveur_web_dorsal_forge_site: >-
{{ (hostvars[groups['serveur_ops'][0]].serveur_ops_forge_amont | default(''))
if (groups.get('serveur_ops') or []) else '' }}
serveur_web_dorsal_forge_site_ac: >-
{{ (hostvars[groups['serveur_ops'][0]].serveur_ops_forge_amont_ac | default(''))
if (groups.get('serveur_ops') or []) else '' }}
serveur_web_dorsal_forge_site_ac_depot: "/usr/local/share/setops/ac-forge-site.crt"

View file

@ -26,6 +26,39 @@
group: root
mode: "0755"
# LA CONFIANCE AVANT LE CLONE, LIMITEE A LA FORGE DU SITE (voir defaults/main.yml).
- name: Creer le repertoire de la racine de la forge du site
ansible.builtin.file:
path: "{{ serveur_web_dorsal_forge_site_ac_depot | dirname }}"
state: directory
owner: root
group: root
mode: "0755"
when:
- serveur_web_dorsal_forge_site | trim | length > 0
- serveur_web_dorsal_forge_site_ac | trim | length > 0
- name: Deposer la racine de la forge du site
ansible.builtin.copy:
src: "{{ serveur_web_dorsal_forge_site_ac | trim }}"
dest: "{{ serveur_web_dorsal_forge_site_ac_depot }}"
owner: root
group: root
mode: "0644"
when:
- serveur_web_dorsal_forge_site | trim | length > 0
- serveur_web_dorsal_forge_site_ac | trim | length > 0
- name: Limiter cette confiance a la forge du site, et a elle seule
community.general.git_config:
name: "http.{{ serveur_web_dorsal_forge_site | trim }}/.sslCAInfo"
scope: global
value: "{{ serveur_web_dorsal_forge_site_ac_depot }}"
when:
- serveur_web_dorsal_forge_site | trim | length > 0
- serveur_web_dorsal_forge_site_ac | trim | length > 0
- not ansible_check_mode
- name: Cloner / mettre a jour chaque app (clone superficiel)
ansible.builtin.git:
repo: "{{ item.depot }}"