Set-OPS-Public/roles/serveur_keycloak
Daniel Allaire 5bc3bceac1
Some checks failed
verifier / verifier (push) Has been cancelled
documentation : la tournee des 74 documents, parce qu un balayage ne lit pas
La revision a commence par un balayage par motifs — chemins morts, cibles make
absentes, comptes derives. Il a trouve une trentaine d ecarts et rate presque
tout le reste : un motif ne voit que ce qui s exprime en motif.

make hote-planifier en est l exemple. La cible EXISTE, donc le controle passait
au vert. C est une cible depreciee qui refuse et sort en 2, recommandee par
AGENTS.md, et qui contredit la REGLE D OR du meme fichier trois ecrans plus
haut. Il fallait lire pour la voir.

74 documents lus un par un. 66 corriges, 8 exacts.

CE QUI ETAIT FRANCHEMENT FAUX

AGENTS.md, la source d autorite, annoncait la flotte pas encore executee contre
des VM reelles. Elle a ete rasee et remontee depuis zero trois fois.
ecosysteme-chezlepro.md, le document montre a un client, portait la meme
phrase : il se sous-vendait gravement.

courriel-conception.md s ouvrait sur aucun role n est encore ecrit, au-dessus de
son propre paragraphe 1 qui les nomme. autorisation.md se terminait sur rien n
est construit alors qu il rapporte des mesures datees du role en fonctionnement.
hebergeur-exploitation.md disait rien n est fait d un depot qui existe.
filiation-emancipation.md se contredisait a deux ecrans de distance.

DES MODELES DECRITS D APRES UN MONDE ANTERIEUR

Le resolveur : cinq documents decrivaient un Unbound par VM en opt-in, trois le
donnaient en exemple d integration FACULTATIVE — il est universel depuis le
2026-08-24. L adressage de nomenclature-vm.md : reseau unique, VLAN 11-15, VMID
a cinq chiffres. Le nommage SDN de sdn-evpn.md contre le code : c est le wiki
qui avait raison.

CE QUI CASSE AU PREMIER ESSAI

Le nom du gabarit dore etait faux a quatre endroits, dont la procedure qui le
FABRIQUE et le critere R2 de l epreuve d operateur independant.
preparer-un-site-hebergeur.md avertissait qu une VM faite a la main serait
detruite : raser derive du plan, il ne la detruira jamais — le risque est l
inverse. Un mot de passe d essai en clair dans un depot public.

DEUX PREUVES ETENDUES, ET UNE QUI SE TROMPAIT ELLE-MEME

P57 couvre les groupes : elle a signale aussitot 29 groupes annonces au-dessus d
un tableau qui en cite 40. P29 confronte le tableau de authentification.md aux
declarations reelles : 12 annonces, 21 reels.

Et P57 imposait un chiffre faux — 56 preuves alors que le depot en porte 57, la
conditionnelle vivant hors de tout comptage. Un garde-fou qui fait respecter une
erreur ajoute l assurance a l erreur.

CE QUI RESTE, ET QU AUCUNE PREUVE NE TIENT

Deux comptes trouves a la main. Et une lacune reelle : rien ne garde les
meta/acces.yml — ni qu un service web-sso en porte un, ni que le groupe qu il
nomme existe. P29 tient les positions d authentification, personne ne tient les
habilitations.

make prouver : CONFORME, 56 OK, 0 echec, 1 saute. 0 lien mort.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-06 16:18:23 -04:00
..
defaults documentation : la tournee des 74 documents, parce qu un balayage ne lit pas 2026-09-06 16:18:23 -04:00
files keycloak : verifier la signature PGP contre une empreinte epinglee 2026-08-10 23:35:32 -04:00
handlers Rendre le dry-run (--check) fiable sur les rôles applicatifs 2026-07-01 21:01:53 -04:00
meta keycloak : realm-admin par appartenance, et la boucle de mot de passe 2026-08-07 19:47:10 -04:00
tasks keycloak : verifier la signature PGP contre une empreinte epinglee 2026-08-10 23:35:32 -04:00
templates Zéro-confiance : Keycloak→PG en verify-full + root_ca lisible (0644) 2026-07-04 18:45:16 -04:00
README.md docs(keycloak) : documenter le thème Alliance + la compatibilité MAJ 2026-07-04 10:05:58 -04:00

serveur_keycloak

SSO / IAM Keycloak (distribution Quarkus) — hub d'authentification centralisée (OIDC/SAML) pour les services internes.

Rôle

  • Installe un JRE, télécharge et extrait la distribution Keycloak dans /opt/keycloak.
  • Configure la base PostgreSQL via le registre instance/plan/bases-donnees.yml (entrée keycloak).
  • Publie derrière serveur_nginx (TLS à l'edge) : hostname, proxy-headers=xforwarded, http-enabled=true.
  • Secrets (mot de passe BD + admin bootstrap) dans /etc/keycloak/keycloak.env (0640, no_log).
  • kc.sh build --db=postgres (une fois par version) puis service systemd start --optimized.

Premier consommateur du registre de BD

L'entrée keycloak de instance/plan/bases-donnees.yml fait que :

  1. serveur_postgresql crée la base keycloak + le compte propriétaire keycloak.
  2. Ce rôle lit la même entrée pour bâtir sa connexion (db-url-database, db-username, mot de passe = vault_bd_keycloak).

Mot de passe partagé, source unique. Dépendance serveur_keycloak requiert serveur_postgresql actif déjà dans docs/dependances-groupes.yml.

Secrets requis (Vault)

serveur_keycloak_admin_password: "{{ vault_keycloak_admin }}"   # admin bootstrap
vault_bd_keycloak: "..."                                          # mot de passe BD (partage avec postgres)

Variables principales

Variable Défaut Rôle
serveur_keycloak_version 26.0.7 Version (à vérifier/bumper sur keycloak.org/downloads)
serveur_keycloak_hostname keycloak.exemple.internal Hostname public (via nginx)
serveur_keycloak_db_host 10.0.13.11 IP de data-01 (serveur_postgresql)
serveur_keycloak_admin_user admin Admin bootstrap
serveur_keycloak_login_theme "" Thème de login du realm (vide = défaut Keycloak)
serveur_keycloak_account_theme "" Thème de la console de compte
serveur_keycloak_theme_cache true Cache des ressources de thème (true=prod/perf, false=lab/itération)

Thème (identité Alliance Boréale)

Un thème alliance-boreale (dans files/themes/) applique l'identité visuelle du site de l'Alliance : ciel nocturne aurore + constellation animée, cartes en verre, accents aurore, logo étoile, police système. Il couvre le login (login/) et la console de compte (account/).

Comment ça marche :

  • theme.properties : parent=keycloak (login) / parent=keycloak.v3 (account) + styles= (CSS)
    • scripts= (la constellation JS). C'est un calque CSS/JS posé sur la structure PatternFly de Keycloak.
  • Déployé dans {{ serveur_keycloak_home }}/themes/ (copie inconditionnelle, à chaque déploiement, après l'extraction de Keycloak) et appliqué au realm via kcadm -s loginTheme/accountTheme.
  • serveur_keycloak_theme_cache: false (lab) sert les ressources en no-cache — sinon Keycloak les marque « immuables » et le navigateur garde l'ancien CSS même en Ctrl+Shift+R (piège classique ; utiliser une fenêtre privée pour vérifier un changement).
  • Le JS de constellation s'initialise sur DOMContentLoaded (Keycloak injecte le <script> dans <head>, avant que <body> existe).

⚠️ Mise à jour de Keycloak — à savoir :

  • Pas de réapparition de l'ancien thème : le thème est codifié + réappliqué à chaque make deployer (la copie survit à l'extraction et n'a pas de garde creates). Une MAJ via Set-OPS réinstalle le thème.
  • Le vrai risque = compatibilité : le calque dépend des classes PatternFly (.pf-c-* / .pf-v5-*) et des thèmes parents (keycloak, keycloak.v3). Une MAJ majeure de Keycloak peut changer PatternFly ou renommer un parent → le rendu se dégrade ou tombe sur le défaut ; il faut alors retoucher le CSS / le parent (le thème ne « redevient » pas l'ancien, il demande un ajustement).
  • Check-list MAJ : après un bump de serveur_keycloak_version, ouvrir le login + la console de compte et vérifier le rendu (~2 min). La version étant épinglée, les MAJ sont délibérées.

Notes / limites

  • Version : à confirmer/bumper ; l'URL suit le motif officiel des releases GitHub.
  • L'unité systemd est dérivée des conventions Keycloak (la doc officielle ne fournit pas d'unité) — sandboxing volontairement modéré pour ne pas casser le démarrage.
  • Le site nginx publiant Keycloak se déclare côté serveur_nginx (serveur_nginx_sites), pas ici.
  • Certificats : TLS terminé à l'edge ; aucun certificat sur Keycloak.

Prérequis

  • Réseau sortant pour télécharger la distribution.
  • Base PostgreSQL atteignable (dépendance serveur_postgresql).