keycloak : les roles de realm sont un prerequis de la projection des groupes
Second defaut trouve par la reconstruction from-zero. groupes-ldap.yml attache grafana-admin a un groupe, mais c'est rbac-oidc.yml qui cree ce role — et il s'executait APRES. Invisible tant que le realm existait avec ses roles crees par un passage precedent ; sur un realm neuf, seuls les roles integres existaient et l'attachement echouait. Scinde plutot que deplace : rbac-oidc.yml fait trois choses aux dependances DISTINCTES — creer les roles (ne depend de rien), poser un mapper sur les clients (depend de clients-oidc), assigner des roles a des utilisateurs. Les melanger etait le defaut. L'ordre est desormais roles -> groupes -> clients -> mappers. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
a1accdd49e
commit
3bf99fa7be
3 changed files with 42 additions and 24 deletions
|
|
@ -171,6 +171,10 @@
|
||||||
ansible.builtin.include_tasks: courriel-realm.yml
|
ansible.builtin.include_tasks: courriel-realm.yml
|
||||||
when: serveur_keycloak_smtp_actif | bool
|
when: serveur_keycloak_smtp_actif | bool
|
||||||
|
|
||||||
|
- name: Créer les rôles de realm (prérequis de la projection des groupes)
|
||||||
|
ansible.builtin.include_tasks: roles-realm.yml
|
||||||
|
when: not ansible_check_mode
|
||||||
|
|
||||||
- name: Projeter les groupes LDAP (mapper + roles de groupe)
|
- name: Projeter les groupes LDAP (mapper + roles de groupe)
|
||||||
ansible.builtin.include_tasks: groupes-ldap.yml
|
ansible.builtin.include_tasks: groupes-ldap.yml
|
||||||
when:
|
when:
|
||||||
|
|
|
||||||
|
|
@ -3,30 +3,6 @@
|
||||||
# Additif et idempotent (create-si-absent, kcadm à chaud — pas de restart Keycloak).
|
# Additif et idempotent (create-si-absent, kcadm à chaud — pas de restart Keycloak).
|
||||||
# Permet à une app (ex. Grafana) de mapper un rôle du realm vers son niveau de droit.
|
# Permet à une app (ex. Grafana) de mapper un rôle du realm vers son niveau de droit.
|
||||||
|
|
||||||
- name: Assurer les roles de realm (kcadm, idempotent)
|
|
||||||
ansible.builtin.shell:
|
|
||||||
executable: /bin/bash
|
|
||||||
cmd: |
|
|
||||||
set -euo pipefail
|
|
||||||
KC={{ serveur_keycloak_home }}/bin/kcadm.sh
|
|
||||||
"$KC" config credentials --server http://localhost:8080 --realm master \
|
|
||||||
--user {{ serveur_keycloak_admin_user }} --password "$KC_ADMIN_PW" >/dev/null
|
|
||||||
if "$KC" get roles/{{ item }} -r {{ serveur_keycloak_realm }} >/dev/null 2>&1; then
|
|
||||||
echo SETOPS_OK
|
|
||||||
else
|
|
||||||
"$KC" create roles -r {{ serveur_keycloak_realm }} -s name={{ item }} >/dev/null
|
|
||||||
echo SETOPS_CHANGED
|
|
||||||
fi
|
|
||||||
environment:
|
|
||||||
KC_ADMIN_PW: "{{ serveur_keycloak_admin_password }}"
|
|
||||||
loop: "{{ serveur_keycloak_realm_roles }}"
|
|
||||||
register: serveur_keycloak_role_reg
|
|
||||||
changed_when: "'SETOPS_CHANGED' in serveur_keycloak_role_reg.stdout"
|
|
||||||
no_log: true
|
|
||||||
when:
|
|
||||||
- not ansible_check_mode
|
|
||||||
- serveur_keycloak_realm_roles | length > 0
|
|
||||||
|
|
||||||
- name: Assurer le mapper de roles de realm sur les clients (claim 'roles')
|
- name: Assurer le mapper de roles de realm sur les clients (claim 'roles')
|
||||||
ansible.builtin.shell:
|
ansible.builtin.shell:
|
||||||
executable: /bin/bash
|
executable: /bin/bash
|
||||||
|
|
|
||||||
38
roles/serveur_keycloak/tasks/roles-realm.yml
Normal file
38
roles/serveur_keycloak/tasks/roles-realm.yml
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
---
|
||||||
|
# Creation des ROLES DE REALM — extrait de `rbac-oidc.yml` le 2026-08-08.
|
||||||
|
#
|
||||||
|
# Ces roles sont un PREREQUIS de `groupes-ldap.yml`, qui les attache aux groupes projetes
|
||||||
|
# depuis l'annuaire. Ils vivaient pourtant dans `rbac-oidc.yml`, execute APRES — et le
|
||||||
|
# defaut est reste invisible aussi longtemps que le realm a existe avec ses roles deja
|
||||||
|
# crees par un passage precedent.
|
||||||
|
#
|
||||||
|
# La premiere reconstruction from-zero l'a fait tomber au premier essai : realm neuf, et
|
||||||
|
# `groupes-ldap` a tente d'attacher `grafana-admin` a un groupe alors que seuls les roles
|
||||||
|
# integres (`offline_access`, `uma_authorization`, `default-roles-*`) existaient.
|
||||||
|
#
|
||||||
|
# Les deux autres etapes de `rbac-oidc.yml` restent APRES `clients-oidc.yml` : elles
|
||||||
|
# posent un mapper sur les clients et assignent des roles a des utilisateurs. Trois
|
||||||
|
# dependances distinctes, trois moments distincts — les melanger etait le defaut.
|
||||||
|
- name: Assurer les roles de realm (kcadm, idempotent)
|
||||||
|
ansible.builtin.shell:
|
||||||
|
executable: /bin/bash
|
||||||
|
cmd: |
|
||||||
|
set -euo pipefail
|
||||||
|
KC={{ serveur_keycloak_home }}/bin/kcadm.sh
|
||||||
|
"$KC" config credentials --server http://localhost:8080 --realm master \
|
||||||
|
--user {{ serveur_keycloak_admin_user }} --password "$KC_ADMIN_PW" >/dev/null
|
||||||
|
if "$KC" get roles/{{ item }} -r {{ serveur_keycloak_realm }} >/dev/null 2>&1; then
|
||||||
|
echo SETOPS_OK
|
||||||
|
else
|
||||||
|
"$KC" create roles -r {{ serveur_keycloak_realm }} -s name={{ item }} >/dev/null
|
||||||
|
echo SETOPS_CHANGED
|
||||||
|
fi
|
||||||
|
environment:
|
||||||
|
KC_ADMIN_PW: "{{ serveur_keycloak_admin_password }}"
|
||||||
|
loop: "{{ serveur_keycloak_realm_roles }}"
|
||||||
|
register: serveur_keycloak_role_reg
|
||||||
|
changed_when: "'SETOPS_CHANGED' in serveur_keycloak_role_reg.stdout"
|
||||||
|
no_log: true
|
||||||
|
when:
|
||||||
|
- not ansible_check_mode
|
||||||
|
- serveur_keycloak_realm_roles | length > 0
|
||||||
Loading…
Reference in a new issue