Set-OPS-Public/roles/serveur_oauth2_proxy/defaults/main.yml
Daniel Allaire 249fba702a sso : l'issuer et le nom d'hote se derivent de l'exposition declaree
oauth2-proxy fonctionne devant Icinga Web 2 : 302 vers Keycloak, qui federe
LDAP. Quatre defauts leves, dont trois du meme motif — un nom construit par
convention d'un cote, declare de l'autre.

1. Le secret de cookie etait en base64 STANDARD. oauth2-proxy decode en
   url-safe : le decodage echoue, il retombe sur la chaine brute et se plaint de
   sa LONGUEUR, jamais de l'encodage. Garde ajoutee qui refuse + et /.

2. L'issuer etait fabrique (`keycloak.<domaine>`), un nom que rien ne publie.
   Le plan expose `auth.<domaine>` — c'est ce nom que le DNS resout et que nginx
   sert. Derive desormais du champ `expose`.

3. Keycloak s'annoncait sous ce meme nom invente : « issuer did not match ».
   Meme correctif a la source.

4. Le pare-feu est-ouest bloquait l'edge : nginx ne declarait son 443 qu'avec
   `pair: externe`, que le devis est-ouest saute (il releve de la frontiere).
   Le flux existait d'un seul cote et la matrice etait satisfaite. nginx declare
   maintenant aussi son 443 depuis la flotte.

obs-01 et mon-01 deployees. 7 cibles Prometheus up, scrutees en TLS a travers
cinq zones du VRF.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 11:47:34 -04:00

48 lines
2.8 KiB
YAML

---
# Passerelle SSO OIDC générique (oauth2-proxy) : place Keycloak DEVANT n'importe quelle
# application sans OIDC natif. L'app reçoit l'utilisateur via en-têtes (auth « external »).
# Binaire Go statique depuis les releases GitHub (pas d'apt). Requiert client_pki (confiance
# step_ca pour joindre Keycloak) + résolution de l'hôte Keycloak.
serveur_oauth2_proxy_version: "v7.15.3"
serveur_oauth2_proxy_archive: "oauth2-proxy-{{ serveur_oauth2_proxy_version }}.linux-amd64.tar.gz"
serveur_oauth2_proxy_url: >-
https://github.com/oauth2-proxy/oauth2-proxy/releases/download/{{
serveur_oauth2_proxy_version }}/{{ serveur_oauth2_proxy_archive }}
serveur_oauth2_proxy_binaire: "/usr/local/bin/oauth2-proxy"
serveur_oauth2_proxy_utilisateur: "oauth2-proxy"
serveur_oauth2_proxy_config: "/etc/oauth2-proxy/oauth2-proxy.cfg"
serveur_oauth2_proxy_service: "oauth2-proxy"
# Écoute (l'edge nginx proxifie ici).
serveur_oauth2_proxy_ecoute: "0.0.0.0:4180"
# OIDC (Keycloak) — realm applicatif.
serveur_oauth2_proxy_realm: "{{ identite_realm | default('chezlepro') }}"
# DERIVE de l'exposition que le plan declare pour l'IdP (voir tasks/main.yml). La valeur
# ci-dessous n'est qu'un REPLI, utilise si l'application n'expose rien : un nom fabrique
# par convention n'est resolu par personne.
serveur_oauth2_proxy_issuer_derive: true
serveur_oauth2_proxy_app_idp: "keycloak"
serveur_oauth2_proxy_issuer: "https://keycloak.{{ domaine_interne }}/realms/{{ serveur_oauth2_proxy_realm }}"
serveur_oauth2_proxy_client_id: "" # OBLIGATOIRE (par instance)
serveur_oauth2_proxy_client_secret: "" # OBLIGATOIRE (voûte)
serveur_oauth2_proxy_redirect_url: "" # OBLIGATOIRE (https://<app>/oauth2/callback)
# Application protégée (upstream local).
serveur_oauth2_proxy_upstream: "" # OBLIGATOIRE (ex. http://127.0.0.1:8080)
# Secret de cookie (voûte) — 32 octets en base64 URL-SAFE (alphabet `-_`, RFC 4648 §5).
#
# Le base64 STANDARD ne convient PAS, et l'erreur ne le dit pas : oauth2-proxy décode en
# `RawURLEncoding`, et un secret contenant `+` ou `/` fait échouer le décodage. Il retombe
# alors sur la chaîne BRUTE et se plaint de sa longueur — « is 44 bytes » — sans jamais
# mentionner l'encodage. Constaté le 2026-08-07 : le service redémarrait en boucle.
#
# Générer avec : `openssl rand -base64 32 | tr '+/' '-_'`
serveur_oauth2_proxy_cookie_secret: "{{ vault_oauth2_cookie | default('') }}"
# * = tout utilisateur authentifié par Keycloak.
serveur_oauth2_proxy_email_domains: "*"
# IdP interne de confiance : les utilisateurs LDAP n'ont pas le drapeau email_verified.
serveur_oauth2_proxy_allow_unverified_email: true
# Bundle d'AC système (racine step_ca via client_pki) pour joindre Keycloak en HTTPS.
serveur_oauth2_proxy_ca_bundle: "/etc/ssl/certs/ca-certificates.crt"