ADR 024 â SSO des UI d'ops : OIDC via GitLab (2026-06-22)
Statut
Accepté (2026-06-22), validé en live le 2026-06-23. Issue #106. Couvre les deux MR : MR1 ArgoCD, MR2 Grafana (toutes deux livrées). Suite du thÚme « accÚs plateforme » du Sprint 5, aprÚs l'exposition d'ArgoCD (#105, ADR 022/023). Deux correctifs sont issus de la validation live (cf. #111) : voir Décisions 2 et 3.
Contexte
Les UI d'ops (ArgoCD #105, Grafana #76) ont chacune leur mot de passe admin. On veut un SSO : une seule identité pour se connecter à toutes les consoles, avec un RBAC centralisé sur l'appartenance à un groupe. Premier palier sur EKS : déléguer l'authentification à un fournisseur OIDC.
DĂ©cision 1 â GitLab plutĂŽt que GitHub comme fournisseur OIDC
Tout le projet vit sur gitlab.com (gitlab.com/yk-devops), c'est déjà notre
identité. Trois avantages décisifs sur GitHub :
- Cohérence : un seul écosystÚme, l'IdP qu'on utilise déjà .
- RBAC par groupe : on a le groupe
yk-devopsâ on gate l'accĂšs dessus (membre â admin) au lieu de coder en dur un username. - Une seule application OAuth : GitLab accepte plusieurs redirect URIs par
application (GitHub n'en accepte qu'une). Une app de groupe
yk-devopscouvre donc ArgoCD et Grafana, avec un seul client_id / client_secret.
DĂ©cision 2 â Une app OAuth GitLab (groupe), RBAC par groupe
- Application OAuth au niveau du groupe
yk-devops, deux redirect URIs :https://argocd.devopsyouss.com/api/dex/callback(ArgoCD/Dex) ethttps://grafana.devopsyouss.com/login/gitlab(Grafana). - Scopes (corrigés en live, #111) :
openid,read_user,read_api. Chaque client réclame un scope différent : le connecteur Dex (ArgoCD) demanderead_user openidet échoue si l'app n'autorise pasread_user(erreur "requested scope is invalid") ; Grafana, lui, utiliseread_apipour récupérer les groupes. L'app doit donc autoriserread_userETread_api. (Leread_apiseul ne fournit PAS les groupes cÎté Dex, contrairement à ce qu'on avait noté.) - RBAC : membres de
yk-devopsârole:admin,readonlypar dĂ©faut.
DĂ©cision 3 â ArgoCD via Dex, Grafana via son provider GitLab natif
- ArgoCD (MR1) : connecteur Dex
gitlabdansconfigs.cm.dex.config(baseURL: https://gitlab.com,clientIDen clair,clientSecret: $dex.gitlab.clientSecret,redirectURI, filtregroups: [yk-devops]). RBAC dansconfigs.rbac(g, yk-devops, role:admin+policy.default: role:readonly). Ces rĂ©glages sont des paramĂštres d'install â ils vivent dans les values du helm install (bootstrap Ansible), commeserver.insecure(#105). - Grafana (MR2) : provider
[auth.gitlab]natif dansgrafana.ini(allowed_groups: yk-devops). Le mapping de rĂŽle (role_attribute_path) doit passer par une variable d'envGF_AUTH_GITLAB_ROLE_ATTRIBUTE_PATH, pas pargrafana.ini: le parser INI de Grafana retire les guillemets, transformant le JMESPath littĂ©ral'Admin'en identifiant de champ â rĂ©sultat nul â repli Viewer. En env la valeur n'est pas re-parsĂ©e (corrigĂ© en live, #111).
DĂ©cision 4 â Le client secret via ESO, dans le secret ArgoCD existant
Le client secret GitLab est une valeur externe (fournie par GitLab), traitée
comme le webhook Slack (#77) : variable TF_VAR_argocd_gitlab_client_secret, jamais
commitée. Il est rangé comme clé supplémentaire du secret fastapi-eks/argocd
existant (qui porte dĂ©jĂ le bcrypt admin) : l'IRSA ESO couvre dĂ©jĂ cet ARN â
aucune modif IRSA. L'ExternalSecret (#105, Merge) est étendu d'une clé pour
patcher dex.gitlab.clientSecret dans argocd-secret, oĂč Dex la rĂ©sout via la
référence $dex.gitlab.clientSecret. (Grafana, MR2, aura son client secret via ESO
cÎté monitoring.)
Conséquences
- « Un seul compte partout » : on se connecte à ArgoCD et Grafana avec son
compte GitLab. Le mot de passe admin (#105) devient un accĂšs break-glass
(secours), rangé hors infra (coffre perso) ; à terme
admin.enabled: false. - Validé en live le 2026-06-23 (conjointement avec #105) : login GitLab sur ArgoCD
(membre
yk-devopsâ admin, claimgroupsvĂ©rifiĂ© dans User Info) et sur Grafana (membreyk-devopsâ Admin). Hors infra on validehelm template/ansible syntax/kustomize/mkdocs. Deux correctifs ont Ă©tĂ© nĂ©cessaires en live (scoperead_user, rĂŽle Grafana via env â cf. #111). - Aucun secret en clair dans Git : client_id public dans
argocd-cm, client_secret via ESO.
Ăvolution possible
- MR2 : Grafana via
[auth.gitlab]ferme #106. - Keycloak central sur le homelab : remplacer gitlab.com par un IdP self-hosted pour un vrai SSO cross-cluster (EKS + homelab + platform). On ne changera que le connecteur (Dex/Grafana â Keycloak), le reste du cĂąblage est identique.
Date : 2026-06-22 Sprint : 5 Issue : #106