Set-OPS-Public/roles/serveur_keycloak/README.md
Daniel Allaire ecc7b2767b docs(keycloak) : documenter le thème Alliance + la compatibilité MAJ
README du rôle : section Thème (vars login/account/theme_cache, fonctionnement,
piège cache 'immuable', mise en garde MAJ Keycloak — calque PatternFly/parents,
pas de réapparition de l'ancien thème mais retouche possible après MAJ majeure,
check-list). + README court dans le dossier du thème.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 10:05:58 -04:00

72 lines
4.7 KiB
Markdown

# 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)
```yaml
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`).