From 974b2d2a215130530c5e3389be06355d8e8f21f1 Mon Sep 17 00:00:00 2001 From: alkatrazz Date: Mon, 6 Jul 2026 22:47:22 +0200 Subject: [PATCH] =?UTF-8?q?feat(guacamole):=20SSO=20direct=20=E2=80=94=20r?= =?UTF-8?q?edirection=20imm=C3=A9diate=20vers=20Authentik?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EXTENSION_PRIORITY "openid, *" : plus de formulaire local, l'arrivée sur portail.lab.local redirige directement vers Authentik. L'admin passe par un compte SSO avec « Administer system » (guacadmin devient inaccessible ; retour arrière = remettre "*, openid"). Doc : pièges slug d'application (≠ guacamole → JWKS 404) et anti-bruteforce (IP Traefik bloquée pour tous après 5 échecs) découverts pendant la mise en route. Co-Authored-By: Claude Fable 5 --- admin/k8s/auth-portal.md | 21 ++++++++++++++++----- k8s/apps/guacamole/deployment.yaml | 7 +++++-- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/admin/k8s/auth-portal.md b/admin/k8s/auth-portal.md index 387bee8..4281230 100644 --- a/admin/k8s/auth-portal.md +++ b/admin/k8s/auth-portal.md @@ -93,11 +93,22 @@ kubectl -n auth create secret generic guacamole-secret \ serveur→serveur de Guacamole ne dépend pas de la résolution `lab.local` des pods. L'issuer, lui, reste `http://auth.lab.local/...` (doit matcher le claim `iss` des tokens émis via le navigateur). -3. **`EXTENSION_PRIORITY="*, openid"`** : garde le formulaire local (guacadmin) accessible - en plus du SSO — sans ça, redirection OIDC forcée et plus d'accès admin local. -4. **User `console` sans sudo** (volontaire) : le portail sert à observer/opérer léger. +3. **`EXTENSION_PRIORITY="openid, *"`** : arrivée sur le portail = **redirection + immédiate vers Authentik** (pas de formulaire local). Conséquence : `guacadmin` est + inaccessible — l'admin Guacamole passe par un compte SSO auquel on a coché + **« Administer system »** (fait pour `Alkatrazz`). Prérequis absolu avant d'activer : + avoir donné ce droit, sinon plus d'admin. Dépannage si Authentik est HS : remettre + `"*, openid"` dans `k8s/apps/guacamole/deployment.yaml` (le formulaire local revient). +4. **Le slug de l'application Authentik doit être exactement `guacamole`** : Authentik + le génère depuis le nom (« Portail consoles » → `portail-consoles`) et l'issuer/JWKS + deviennent faux → log Guacamole `Non 200 status code (404) ... /o/guacamole/jwks/` + et token rejeté. Corriger : Applications → Edit → Slug. +5. **Anti-bruteforce intégré** (extension `ban`) : 5 échecs → IP bloquée ~5 min. Derrière + Traefik, l'IP vue est celle du proxy → **le blocage touche tout le monde**. Patienter + ou redémarrer le pod guacamole pour purger. +6. **User `console` sans sudo** (volontaire) : le portail sert à observer/opérer léger. L'administration passe par les comptes admin habituels, pas par Guacamole. -5. **Enregistrement des sessions** : possible (guacd + volume partagé) mais non configuré +7. **Enregistrement des sessions** : possible (guacd + volume partagé) mais non configuré — gap connu, à ajouter si le portail s'ouvre à d'autres utilisateurs. -6. La config Authentik (provider, app, utilisateurs) et les connexions Guacamole vivent +8. La config Authentik (provider, app, utilisateurs) et les connexions Guacamole vivent **en base, pas en IaC** — comme le Server Manager Satisfactory. Backup PG = gap connu. diff --git a/k8s/apps/guacamole/deployment.yaml b/k8s/apps/guacamole/deployment.yaml index 1c8b808..b5e58f2 100644 --- a/k8s/apps/guacamole/deployment.yaml +++ b/k8s/apps/guacamole/deployment.yaml @@ -59,9 +59,12 @@ spec: value: "preferred_username" - name: OPENID_SCOPE value: "openid profile email" - # L'extension base (autorisation/connexions) passe avant l'OIDC (authentification) + # OIDC prioritaire : arrivée sur le portail = redirection immédiate vers + # Authentik (pas de formulaire local). Conséquence : guacadmin devient + # inaccessible — l'admin passe par un compte SSO avec « Administer system ». + # Dépannage sans Authentik : remettre "*, openid" ici et re-sync. - name: EXTENSION_PRIORITY - value: "*, openid" + value: "openid, *" - name: TZ value: "Europe/Paris" resources: