Set-OPS-Public/roles/serveur_web_frontal
Daniel Allaire 22ef279464 authentification : chaque rôle déclare sa position, gardé par P29
Une règle qu'aucune garde ne vérifie finit par ne plus être vraie — c'est ce qui
était arrivé aux 28 lignes d'intégration recopiées. Chaque rôle serveur_* porte
un meta/authentification.yml, confronté à son code par P29.

web-sso 5, socle-identite 2 (keycloak/openldap : ils SONT la chaîne d'identité),
ldap-direct 2, interne-sans-auth 2, sans-auth-humaine 12.

La preuve refuse l'oubli ET le mensonge. Éprouvée par sabotage sur sept cas :
déclaration supprimée, portée inventée, secours retiré, posture de formulaire
retirée, raison retirée, ldap-direct mensonger, réglage retiré des defaults.

Les deux derniers passaient dans la première version :

- le mensonge passait à cause d'un commentaire. Je cherchais le mot « ldap » dans
  le rôle, et serveur_grafana/defaults/main.yml contient « désactiver quelqu'un
  dans LDAP » : de la prose validait une déclaration fausse. La preuve exige
  maintenant un indice nommé — variable <rôle>_oidc / <rôle>_ldap, ou URI ldap://
- le réglage retiré passait parce que le gabarit citait encore la variable alors
  que plus rien ne lui donnait de valeur. La preuve lit defaults/main.yml en YAML
  et exige que la clé y soit définie, pas mentionnée.

Elle a aussi forcé une valeur : oauth2-proxy était déclaré « formulaire local
fermé » alors qu'il n'a aucun compte local. D'où formulaire_local: aucun, qui
distingue « il n'y en a jamais eu » de « il y en a un, il est fermé ».

Correction d'une note de la veille : Prometheus et Loki ne sont PAS exposés
publiquement (aucun expose au plan). Seuls six groupes le sont. Le risque est
intra-tenant, pas frontalier. Les deux lacunes sont comptées à chaque exécution,
pas masquées.

AFF-111, D-42. 29 preuves OK, ansible-lint (production) sur 375 fichiers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 17:05:43 -04:00
..
defaults Rôles web : renommer web_frontal/dorsal -> serveur_web_frontal/dorsal (convention) 2026-07-05 18:49:31 -04:00
handlers Rôles web : renommer web_frontal/dorsal -> serveur_web_frontal/dorsal (convention) 2026-07-05 18:49:31 -04:00
meta authentification : chaque rôle déclare sa position, gardé par P29 2026-08-03 17:05:43 -04:00
tasks Rôles web : renommer web_frontal/dorsal -> serveur_web_frontal/dorsal (convention) 2026-07-05 18:49:31 -04:00
templates Rôles web : renommer web_frontal/dorsal -> serveur_web_frontal/dorsal (convention) 2026-07-05 18:49:31 -04:00
README.md Rôles web : renommer web_frontal/dorsal -> serveur_web_frontal/dorsal (convention) 2026-07-05 18:49:31 -04:00

serveur_web_frontal

Hébergement de sites web statiques (nginx), derrière l'edge. Première brique de la plateforme webapp de Set-OPS : 100 % natif — pas de conteneur, pas de runtime, pas de base de données. Le contenu vient d'un dépôt git souverain (Forgejo). Codifié depuis le spike du 2026-07-05 (site Alliance Boréale).

Ce que le rôle fait

Pour chaque site déclaré dans serveur_web_frontal_sites :

  1. git clone/pull du dépôt → /srv/web/<nom> ;
  2. vhost nginx servant <sous_dossier> (ex. public/), avec en-têtes de sécurité
    • CSP (défaut : self only, aucun tiers, aucun pistage), gzip, cache, try_files.

Exposé via applications.yml (champ expose) → l'edge proxie en HTTPS (TLS step-ca). Les SAN du cert edge et le plancher /etc/hosts sont auto-dérivés du plan.

Déclaration (group_vars du groupe serveur_web_frontal)

serveur_web_frontal_sites:
  - nom: alliance
    server_name: "alliance-boreale.{{ domaine_interne }}"
    depot: "https://forge.{{ domaine_interne }}/alliance/site-alliance-boreale.git"
    branche: main
    sous_dossier: public
    # csp: "..."   # optionnel, sinon serveur_web_frontal_csp_defaut

Et dans applications.yml : une app groupe: serveur_web_frontal, hote: <noeud>, port: 80, expose: [alliance-boreale.<domaine>].

Portée

Statique seulement (le frontal). Les apps dynamiques (runtime + service systemd + BD via resoudre_base) relèveront d'un rôle dorsal à venir — même éthos : natif, systemd, zéro conteneur.

Validation

ansible-lint profil production + --syntax-check. Éprouvé sur web-frontal-01 (site servi via l'edge, HTTPS step-ca vérifié, CSP en place).