Binding annuaire complété : icingaweb2 + client_ldap → resoudre_annuaire

Fin des 2 loose ends : icingaweb2 (LDAP dormant en mode SSO) résout via
resoudre_annuaire (redéploiement changed=0, SSO intact) ; client_ldap
(SSSD, dormant) ne pointe plus sur un idm-01 périmé.

Plus aucun rôle ne code en dur l'hôte d'annuaire — un seul point de vérité.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-07-03 23:24:38 -04:00
parent 457b89927b
commit 1f1b722a00
5 changed files with 35 additions and 10 deletions

View file

@ -44,8 +44,12 @@
déréférencé, `no_log`). **Migrés + prouvés (config neutre, `changed=0`)** : `serveur_keycloak`
(fédération LDAP — testmail token HTTP 200), `serveur_dovecot` + `serveur_postfix` (flux courriel
Postfix→LDAP→LMTP→Dovecot **livré de bout en bout**). Piège appris : les *defaults* d'un rôle inclus
ne persistent pas hors de son exécution — publier via `set_fact`. Reste : les defaults LDAP dormants
d'`icingaweb2` (mode SSO, LDAP inutilisé) et `client_ldap` (référence périmée `idm-01`).
ne persistent pas hors de son exécution — publier via `set_fact`.
- **Binding annuaire complété — `icingaweb2` + `client_ldap` migrés vers `resoudre_annuaire`.** Fin des
2 loose ends : `serveur_icingaweb2` (connexion LDAP dormante en mode SSO) résout via
`resoudre_annuaire` (redéploiement `changed=0`, SSO intact) ; `client_ldap` (SSSD, dormant) ne pointe
plus sur un `idm-01` périmé. **Plus AUCUN rôle ne code en dur l'hôte d'annuaire** — un seul point de
vérité (`resoudre_annuaire`).
- **Rôle `serveur_oauth2_proxy` — passerelle SSO OIDC générique (Keycloak) + Icinga Web 2 au SSO.**
oauth2-proxy (v7.15.3, binaire GitHub) place Keycloak **devant** n'importe quelle app sans OIDC
natif : elle reçoit l'utilisateur authentifié via en-tête, en auth `external`. Rôle paramétrable

View file

@ -9,8 +9,9 @@ client_ldap_paquets:
client_ldap_service: "sssd"
client_ldap_domaine: "{{ domaine_interne.split('.') | first }}"
client_ldap_uri: "ldap://idm-01.{{ domaine_interne }}"
client_ldap_base_dn: "dc={{ domaine_interne.split('.') | join(',dc=') }}"
# uri + base_dn : fournis par le rôle partagé resoudre_annuaire (tasks « Adopter »).
# Rôle DORMANT (login LDAP niveau OS via SSSD, non câblé). L'activer requiert client_pki
# (confiance step_ca pour LDAPS) et client_ldap_tls_reqcert: "demand".
# Bind de lecture. Vide => bind anonyme (lecture publique de l'annuaire).
client_ldap_bind_dn: ""

View file

@ -1,4 +1,13 @@
---
- name: Résoudre l'annuaire (rôle partagé)
ansible.builtin.include_role:
name: resoudre_annuaire
- name: Adopter la connexion annuaire pour SSSD
ansible.builtin.set_fact:
client_ldap_uri: "{{ resoudre_annuaire_uri }}"
client_ldap_base_dn: "{{ resoudre_annuaire_base_dn }}"
- name: Installer SSSD et les modules LDAP
ansible.builtin.apt:
name: "{{ client_ldap_paquets }}"

View file

@ -32,13 +32,10 @@ serveur_icingaweb2_icinga_groupe: "serveur_icinga"
serveur_icingaweb2_redis_host: "127.0.0.1"
serveur_icingaweb2_redis_port: 6380
# Authentification LDAP (OpenLDAP, LDAPS via la confiance step_ca / client_pki).
serveur_icingaweb2_ldap_url: "ldaps://id-ldap-01.{{ domaine_interne }}"
# Authentification LDAP (OpenLDAP, LDAPS). La connexion (url, base, users_dn, bind_dn,
# bind_password) est fournie par le rôle partagé resoudre_annuaire (voir tasks « Adopter la
# connexion annuaire »). Utilisée seulement en mode auth "ldap" ; en SSO, résolue mais inutilisée.
serveur_icingaweb2_ldap_port: 636
serveur_icingaweb2_ldap_base: "dc={{ domaine_interne.split('.') | join(',dc=') }}"
serveur_icingaweb2_ldap_users_dn: "ou=people,dc={{ domaine_interne.split('.') | join(',dc=') }}"
serveur_icingaweb2_ldap_bind_dn: "cn=admin,dc={{ domaine_interne.split('.') | join(',dc=') }}"
serveur_icingaweb2_ldap_bind_password: "{{ vault_openldap_admin | default('') }}"
serveur_icingaweb2_ldap_user_class: "inetOrgPerson"
serveur_icingaweb2_ldap_user_attr: "uid"

View file

@ -5,6 +5,20 @@
vars:
resoudre_base_groupe: "{{ serveur_icingaweb2_icinga_groupe }}"
- name: Résoudre l'annuaire (rôle partagé)
ansible.builtin.include_role:
name: resoudre_annuaire
- name: Adopter la connexion annuaire pour Icinga Web 2
ansible.builtin.set_fact:
serveur_icingaweb2_ldap_url: "{{ resoudre_annuaire_uri }}"
serveur_icingaweb2_ldap_port: "{{ resoudre_annuaire_port }}"
serveur_icingaweb2_ldap_base: "{{ resoudre_annuaire_base_dn }}"
serveur_icingaweb2_ldap_users_dn: "{{ resoudre_annuaire_users_dn }}"
serveur_icingaweb2_ldap_bind_dn: "{{ resoudre_annuaire_bind_dn }}"
serveur_icingaweb2_ldap_bind_password: "{{ resoudre_annuaire_bind_password }}"
no_log: true
- name: Installer Icinga Web 2 + module IcingaDB + PHP-FPM + nginx
ansible.builtin.apt:
name: "{{ serveur_icingaweb2_paquets }}"