keycloak : journaliser les evenements du realm
Deux services n'aboutissaient pas et tout etait correct cote serveur — clients OIDC, URI de rappel, secret identique (meme empreinte), CA de confiance, aucune restriction de domaine. Le premier saut rejoue au curl montrait des parcours sains. Et la, plus rien a examiner : eventsEnabled = False. Keycloak ne gardait aucune trace, ni des connexions ni des echecs. Manque de diagnostic, mais surtout d'exploitation : « un sysadmin l'exploite sans IA » suppose qu'il puisse lire lui-meme ce qui s'est passe. Journal (connexions + actions d'administration, retention 14 jours) reconcilie par le role, pas active a la main dans une console. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
a90dff7ba7
commit
dd84ed011c
4 changed files with 68 additions and 0 deletions
19
CHANGELOG.md
19
CHANGELOG.md
|
|
@ -1,5 +1,24 @@
|
||||||
# CHANGELOG — Set-OPS
|
# CHANGELOG — Set-OPS
|
||||||
|
|
||||||
|
## 2026-08-08 — Keycloak ne gardait aucune trace des connexions
|
||||||
|
|
||||||
|
Deux services n'aboutissaient pas pour l'exploitant (Nextcloud, Icinga Web 2). Tout a été
|
||||||
|
vérifié côté serveur et tout était correct : clients OIDC actifs, URI de rappel exactes,
|
||||||
|
secret d'`oauth2-proxy` identique à celui de Keycloak (même empreinte SHA-256), CA de
|
||||||
|
confiance depuis `mon-01` (`200` sur la découverte), `email_domains = ["*"]` donc aucune
|
||||||
|
restriction. Le premier saut de chaque parcours a été rejoué avec `curl` : Nextcloud
|
||||||
|
redirige vers sa page locale (qui propose bien le bouton SSO « Chezlepro »), Icinga part
|
||||||
|
correctement vers Keycloak, qui répond `200`.
|
||||||
|
|
||||||
|
**Et là, plus rien à examiner** : `eventsEnabled = False`. Keycloak ne gardait aucune trace
|
||||||
|
— ni qui est entré, ni pourquoi une authentification a échoué. Impossible de savoir ce que
|
||||||
|
l'utilisateur avait rencontré.
|
||||||
|
|
||||||
|
C'est un manque d'exploitation autant que de diagnostic : « un sysadmin l'exploite sans
|
||||||
|
IA » suppose qu'il puisse lire lui-même ce qui s'est passé. Le journal des évènements
|
||||||
|
(connexions et actions d'administration, rétention 14 jours) est désormais réconcilié par
|
||||||
|
`serveur_keycloak`, comme le reste — pas activé à la main dans une console.
|
||||||
|
|
||||||
## 2026-08-08 — La livraison interne était en panne, et le devis disait CONFORME
|
## 2026-08-08 — La livraison interne était en panne, et le devis disait CONFORME
|
||||||
|
|
||||||
Suite de l'arbitrage sur l'adressage : **le courrier local est désormais routé par
|
Suite de l'arbitrage sur l'adressage : **le courrier local est désormais routé par
|
||||||
|
|
|
||||||
|
|
@ -176,3 +176,9 @@ serveur_keycloak_ldap_attributs:
|
||||||
last name: "sn"
|
last name: "sn"
|
||||||
email: "mail"
|
email: "mail"
|
||||||
username: "uid"
|
username: "uid"
|
||||||
|
|
||||||
|
# Journal des evenements du realm — voir tasks/journalisation.yml. Retention en
|
||||||
|
# secondes ; 14 jours suffit a diagnostiquer sans faire du journal une archive.
|
||||||
|
serveur_keycloak_journal_actif: true
|
||||||
|
serveur_keycloak_journal_admin: true
|
||||||
|
serveur_keycloak_journal_retention: 1209600
|
||||||
|
|
|
||||||
40
roles/serveur_keycloak/tasks/journalisation.yml
Normal file
40
roles/serveur_keycloak/tasks/journalisation.yml
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
# Journal des evenements du realm. Sans lui, Keycloak ne garde AUCUNE trace des
|
||||||
|
# connexions : ni qui est entre, ni pourquoi une authentification a echoue. Constate
|
||||||
|
# le 2026-08-08 en cherchant a diagnostiquer deux services qui n'aboutissaient pas —
|
||||||
|
# tout etait correct cote serveur, et il n'existait aucun moyen de savoir ce que
|
||||||
|
# l'utilisateur avait rencontre.
|
||||||
|
#
|
||||||
|
# C'est aussi une exigence d'exploitation : « un sysadmin l'exploite sans IA » suppose
|
||||||
|
# qu'il puisse lire lui-meme ce qui s'est passe.
|
||||||
|
|
||||||
|
- name: Lire la configuration du journal
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "http://localhost:8080/admin/realms/{{ serveur_keycloak_realm }}/events/config"
|
||||||
|
headers:
|
||||||
|
Authorization: "Bearer {{ serveur_keycloak_pol_jeton.json.access_token }}"
|
||||||
|
register: serveur_keycloak_journal_actuel
|
||||||
|
no_log: true
|
||||||
|
|
||||||
|
- name: Composer la configuration attendue
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
serveur_keycloak_journal_attendu:
|
||||||
|
eventsEnabled: "{{ serveur_keycloak_journal_actif | bool }}"
|
||||||
|
eventsExpiration: "{{ serveur_keycloak_journal_retention | int }}"
|
||||||
|
adminEventsEnabled: "{{ serveur_keycloak_journal_admin | bool }}"
|
||||||
|
adminEventsDetailsEnabled: "{{ serveur_keycloak_journal_admin | bool }}"
|
||||||
|
|
||||||
|
- name: Activer le journal des évènements du realm
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "http://localhost:8080/admin/realms/{{ serveur_keycloak_realm }}/events/config"
|
||||||
|
method: PUT
|
||||||
|
status_code: [204]
|
||||||
|
headers:
|
||||||
|
Authorization: "Bearer {{ serveur_keycloak_pol_jeton.json.access_token }}"
|
||||||
|
body_format: json
|
||||||
|
body: "{{ serveur_keycloak_journal_actuel.json | combine(serveur_keycloak_journal_attendu) }}"
|
||||||
|
no_log: true
|
||||||
|
changed_when: true
|
||||||
|
when: >-
|
||||||
|
(serveur_keycloak_journal_actuel.json | combine(serveur_keycloak_journal_attendu))
|
||||||
|
!= serveur_keycloak_journal_actuel.json
|
||||||
|
|
@ -101,3 +101,6 @@
|
||||||
|
|
||||||
- name: Reconcilier les mappeurs d'attributs
|
- name: Reconcilier les mappeurs d'attributs
|
||||||
ansible.builtin.include_tasks: attributs-ldap.yml
|
ansible.builtin.include_tasks: attributs-ldap.yml
|
||||||
|
|
||||||
|
- name: Activer le journal des évènements
|
||||||
|
ansible.builtin.include_tasks: journalisation.yml
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue