From 1acb8b2d82cfcafc301565f383b0c3eb14218d77 Mon Sep 17 00:00:00 2001 From: Shikanime Deva <22115108+shikanime@users.noreply.github.com> Date: Thu, 3 Sep 2026 10:56:19 +0200 Subject: [PATCH 1/3] =?UTF-8?q?fix(docs):=20r=C3=A9tablir=20readonly=20en?= =?UTF-8?q?=20attente=20du=20rename=20console=20(cloud-pi-native/console#2?= =?UTF-8?q?654)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Shikanime Deva <22115108+shikanime@users.noreply.github.com> --- docs/guide/rbac/console-cpin.md | 10 +++++----- docs/guide/rbac/grafana.md | 8 ++++---- docs/guide/rbac/harbor.md | 12 ++++++------ docs/guide/rbac/keycloak.md | 14 +++++++------- docs/guide/rbac/sonarqube.md | 10 +++++----- docs/guide/rbac/vault.md | 8 ++++---- 6 files changed, 31 insertions(+), 31 deletions(-) diff --git a/docs/guide/rbac/console-cpin.md b/docs/guide/rbac/console-cpin.md index 50cae26..c30051e 100644 --- a/docs/guide/rbac/console-cpin.md +++ b/docs/guide/rbac/console-cpin.md @@ -14,8 +14,8 @@ Ce que chaque rôle peut réellement faire dans la Console CPiN. Les chemins `/c | Administrateur projet | `//console/admin` | Gérer le projet : membres, environnements, dépôts, suppression | | DevOps | `//console/devops` | Gérer environnements + dépôts, rejouer les hooks, voir les secrets. **Pas** de déploiement applicatif ni de gestion des membres | | Développeur | `//console/developer` | Gérer et lister les dépôts, lister les environnements. **Pas** d'accès aux secrets ni de rejeu du projet | -| Lecture seule (projet) | `//console/reader` | Lister environnements et dépôts uniquement | -| Lecture seule (administration) | `/console/reader` | Lecture transverse (tous projets) | +| Lecture seule (projet) | `//console/readonly` | Lister environnements et dépôts uniquement | +| Lecture seule (administration) | `/console/readonly` | Lecture transverse (tous projets) | | Security (projet) | `//console/security` | Lecture transverse du projet (audit). _Groupe non créé par défaut : alimenté par les outils qui le référencent_ | | Security (administration) | `/console/security` | Lecture transverse (tous projets, audit) | | Guest (utilisateur externe sans groupe) | — | Aucun accès jusqu'à ajout à un projet | @@ -38,7 +38,7 @@ Chaque projet reçoit 4 rôles système par défaut, liés aux groupes `// | **Administrateur** | `//console/admin` | `MANAGE` (gérer le projet) | | **DevOps** | `//console/devops` | `SEE_SECRETS`, `REPLAY_HOOKS`, `MANAGE_ENVIRONMENTS`, `MANAGE_REPOSITORIES`, `LIST_ENVIRONMENTS`, `LIST_REPOSITORIES` | | **Développeur** | `//console/developer` | `MANAGE_REPOSITORIES`, `LIST_ENVIRONMENTS`, `LIST_REPOSITORIES` | -| **Lecture seule** | `//console/reader` | `LIST_ENVIRONMENTS`, `LIST_REPOSITORIES` | +| **Lecture seule** | `//console/readonly` | `LIST_ENVIRONMENTS`, `LIST_REPOSITORIES` | ### Bits `PROJECT_PERMS` disponibles @@ -52,9 +52,9 @@ Chaque projet reçoit 4 rôles système par défaut, liés aux groupes `// | ------------------------------------------------ | ------------------------ | ----------------------------------------------------------------------------------- | | Admin plateforme (`/console/admin`) | `/console/admin` | `MANAGE` + toutes les `MANAGE_*`, `LIST_*` (admin global) | | Security (`/console/security`) | `/console/security` | lecture transverse (portée audit, `*RO`) | -| Lecture seule (`/console/reader`) | `/console/reader` | lecture transverse (`*RO`) | +| Lecture seule (`/console/readonly`) | `/console/readonly` | lecture transverse (`*RO`) | -> **Groupes Keycloak d'administration plateforme** : le chemin plateforme d'administration est `/admin`, groupe d'amorçage géré en dehors de la Console ; `/console/admin` (admin), `/console/security` (audit) et `/console/reader` (lecture) sont les groupes plateforme réconciliés, propagés vers les outils. +> **Groupes Keycloak d'administration plateforme** : le chemin plateforme d'administration est `/admin`, groupe d'amorçage géré en dehors de la Console ; `/console/admin` (admin), `/console/security` (audit) et `/console/readonly` (lecture) sont les groupes plateforme réconciliés, propagés vers les outils. > **Axe ABAC `userType`** : indépendamment des groupes, certains endpoints restreignent l'accès selon le type d'utilisateur (`human` / `bot` / `ghost`, colonne `User.type`). Cet axe s'ajoute au masque de bits admin/projet. diff --git a/docs/guide/rbac/grafana.md b/docs/guide/rbac/grafana.md index 6097d13..f5438d4 100644 --- a/docs/guide/rbac/grafana.md +++ b/docs/guide/rbac/grafana.md @@ -13,8 +13,8 @@ Ce que chaque rôle Console obtient réellement dans Grafana (scopé par environ | Administrateur projet | `//console/admin` | **Editor** (hors-prod + prod) | | DevOps | `//console/devops` | **Editor** (hors-prod + prod) | | Développeur | `//console/developer` | **Viewer** (hors-prod + prod) | -| Lecture seule | `//console/reader` | **Viewer** (projet) | -| Lecture seule | `/console/reader` | **Viewer** (globale) | +| Lecture seule | `//console/readonly` | **Viewer** (projet) | +| Lecture seule | `/console/readonly` | **Viewer** (globale) | | Security | `//console/security` | **Viewer** (projet) | | Security | `/console/security` | **Viewer** (globale) | | Guest | — | Aucun accès | @@ -34,12 +34,12 @@ Ce que chaque rôle Console obtient réellement dans Grafana (scopé par environ | Groupe Keycloak | Rôle Grafana (mapping OIDC) | Portée | | -------------------------------------- | --------------------------- | -------------------------- | -| `/console/security`, `/console/reader` | **Viewer** | Globale (lecture) | +| `/console/security`, `/console/readonly` | **Viewer** | Globale (lecture) | | `//console/admin` | **Editor** | Projet `` | | `//console/devops` | **Editor** | Projet `` | | `//console/developer` | **Viewer** | Projet `` | | `//console/security` | **Viewer** | Projet `` | -| `//console/reader` | **Viewer** | Projet `` | +| `//console/readonly` | **Viewer** | Projet `` | | `//grafana/hprod-RW` | **Editor** (hors-prod) | Projet ``, hors-prod | | `//grafana/hprod-RO` | **Viewer** (hors-prod) | Projet ``, hors-prod | | `//grafana/prod-RW` | **Editor** (prod) | Projet ``, prod | diff --git a/docs/guide/rbac/harbor.md b/docs/guide/rbac/harbor.md index ca46028..acbc1ee 100644 --- a/docs/guide/rbac/harbor.md +++ b/docs/guide/rbac/harbor.md @@ -14,8 +14,8 @@ Ce que chaque rôle Console obtient réellement dans Harbor. Les chemins `/conso | Administrateur projet | `//console/admin` | **Developer** sur le projet (push/pull d'images) | | DevOps | `//console/devops` | **Guest** sur le projet (pull/lecture, pas de push) | | Développeur | `//console/developer` | **Guest** sur le projet (pull/lecture) | -| Lecture seule | `//console/reader` | **Guest** sur le projet (lecture) | -| Lecture seule | `/console/reader` | **Guest** sur **tous** les projets (lecture transverse) | +| Lecture seule | `//console/readonly` | **Guest** sur le projet (lecture) | +| Lecture seule | `/console/readonly` | **Guest** sur **tous** les projets (lecture transverse) | | Security | `//console/security` | **Guest** sur le projet (lecture) | | Security | `/console/security` | **Guest** sur **tous** les projets (lecture transverse) | | Guest | — | Aucun accès | @@ -37,12 +37,12 @@ La Console mappe chaque groupe OIDC vers un **rôle Harbor** et une **portée** | ---------------------------------- | ------------------ | ------------------------- | | `/console/admin` | **Admin** | Tous projets | | `/console/security` | **Guest** | Tous projets (plateforme) | -| `/console/reader` | **Guest** | Tous projets (plateforme) | +| `/console/readonly` | **Guest** | Tous projets (plateforme) | | `//console/admin` | **Developer** | Projet `` | | `//console/devops` | **Guest** | Projet `` | | `//console/developer` | **Guest** | Projet `` | | `//console/security` | **Guest** | Projet `` | -| `//console/reader` | **Guest** | Projet `` | +| `//console/readonly` | **Guest** | Projet `` | > Le groupe racine du projet (`/`) est ajouté en tant que membre avec un niveau **Limited Guest** (lecture seule : pull d'images sans administration) pour l'ensemble de ses membres. @@ -50,8 +50,8 @@ La Console mappe chaque groupe OIDC vers un **rôle Harbor** et une **portée** ## 3. Points d'attention -- **Seul `//console/admin` pousse des images.** Tous les autres rôles projet (`devops`, `developer`, `security`, `reader`) sont en **Guest** (pull/lecture uniquement). -- **Groupes `security`/`reader` = Guest transverse.** Ils sont ajoutés en Guest sur **tous** les projets Harbor (portée plateforme), ce qui donne une lecture globale des registres. +- **Seul `//console/admin` pousse des images.** Tous les autres rôles projet (`devops`, `developer`, `security`, `readonly`) sont en **Guest** (pull/lecture uniquement). +- **Groupes `security`/`readonly` = Guest transverse.** Ils sont ajoutés en Guest sur **tous** les projets Harbor (portée plateforme), ce qui donne une lecture globale des registres. --- diff --git a/docs/guide/rbac/keycloak.md b/docs/guide/rbac/keycloak.md index 1d7e872..2aab872 100644 --- a/docs/guide/rbac/keycloak.md +++ b/docs/guide/rbac/keycloak.md @@ -15,8 +15,8 @@ En tant qu'IdP, Keycloak ne « donne » pas d'écran de droits : il place chaque | Administrateur projet | `//console/admin` | Admin du projet partout | | DevOps | `//console/devops` | RW projet (sauf admin) | | Développeur | `//console/developer` | Lecture/projet (selon outil) | -| Lecture seule | `//console/reader` | Lecture transverse du projet | -| Lecture seule | `/console/reader` | Lecture transverse plateforme | +| Lecture seule | `//console/readonly` | Lecture transverse du projet | +| Lecture seule | `/console/readonly` | Lecture transverse plateforme | | Security | `//console/security` | Audit/lecture transverse du projet | | Security | `/console/security` | Audit/lecture transverse plateforme | | Guest | — | Aucun droit jusqu'à ajout manuel à un projet | @@ -39,25 +39,25 @@ La Console crée et réconcilie automatiquement l'arborescence suivante, propag | `/admin` | Groupe plateforme **admin** (amorçage) | Console uniquement (hors propagation) | | `/console/admin` | Groupe plateforme **admin** (réconcilié) | Tous les outils (admin sur chaque service)| | `/console/security` | Groupe plateforme **sécurité** | Tous les outils (audit/security) | -| `/console/reader` | Groupe plateforme **lecture** | Tous les outils (lecture, `*RO`) | +| `/console/readonly` | Groupe plateforme **lecture** | Tous les outils (lecture, `*RO`) | | `//console/admin` | Groupe projet **admin** | Tous les outils (admin projet) | | `//console/devops` | Groupe projet **devops** | Tous les outils (RW projet) | | `//console/developer` | Groupe projet **developer** | Tous les outils (selon outil) | | `//console/security` | Groupe projet **security** | Tous les outils (audit/lecture) | -| `//console/reader` | Groupe projet **reader** | Tous les outils (lecture) | +| `//console/readonly` | Groupe projet **readonly** | Tous les outils (lecture) | | `//console//` | Sous-groupes **environnement** (membres en RO, propriétaires en RW) | ArgoCD (`//console//`) | | `//grafana/-` | Sous-groupes **Grafana** (environnement-scoped) | Grafana | | Groupes `AdminRole` liés via `oidcGroup` | Rôles admin Console | — | -> ℹ️ Les **rôles projet Console** (`Administrateur`, `DevOps`, `Développeur`, `Lecture seule`) sont systématiquement créés avec le projet et liés aux groupes `//console/{admin,devops,developer,reader}`. Le groupe `//console/security` n'existe pas par défaut : il n'est alimenté que si un outil (ou un admin) le référence. Les rôles admin (`AdminRole`) sont les **seuls** pouvant être liés à un groupe Keycloak **existant** via `oidcGroup` (le préfixe `/` est obligatoire). +> ℹ️ Les **rôles projet Console** (`Administrateur`, `DevOps`, `Développeur`, `Lecture seule`) sont systématiquement créés avec le projet et liés aux groupes `//console/{admin,devops,developer,readonly}`. Le groupe `//console/security` n'existe pas par défaut : il n'est alimenté que si un outil (ou un admin) le référence. Les rôles admin (`AdminRole`) sont les **seuls** pouvant être liés à un groupe Keycloak **existant** via `oidcGroup` (le préfixe `/` est obligatoire). --- ## 3. Points d'attention - **`/admin` est le seul groupe plateforme admin.** Groupe d'amorçage géré en dehors de la Console ; il ne porte des droits que sur la Console CPiN (aucune propagation vers les outils). -- **Groupes environnement vs groupes projet.** ArgoCD et Grafana s'appuient sur des sous-groupes **environment-scoped** (`/RO|RW`, `grafana/-RO|RW`). Les autres outils s'appuient sur les groupes **projet-role** (`//console/{admin,devops,developer,reader,security}`). -- **Security / Reader sont des portées de lecture/audit**, jamais d'écriture, sur la plupart des outils. +- **Groupes environnement vs groupes projet.** ArgoCD et Grafana s'appuient sur des sous-groupes **environment-scoped** (`/RO|RW`, `grafana/-RO|RW`). Les autres outils s'appuient sur les groupes **projet-role** (`//console/{admin,devops,developer,readonly,security}`). +- **Security / Readonly sont des portées de lecture/audit**, jamais d'écriture, sur la plupart des outils. - **Utilisateurs tiers (IDP externe).** Aucun groupe par défaut n'est attribué ; ils n'ont aucun droit tant qu'un membre les ajoute à un projet avec le niveau adéquat. --- diff --git a/docs/guide/rbac/sonarqube.md b/docs/guide/rbac/sonarqube.md index 92e4c61..4854e28 100644 --- a/docs/guide/rbac/sonarqube.md +++ b/docs/guide/rbac/sonarqube.md @@ -14,8 +14,8 @@ Ce que chaque rôle Console obtient réellement dans SonarQube. Les chemins `/co | Administrateur projet | `//console/admin` | Admin du projet + scan, codeviewer, issueadmin, securityhotspotadmin | | DevOps | `//console/devops` | scan + user + codeviewer + issueadmin + securityhotspotadmin | | Développeur | `//console/developer` | identique DevOps (mêmes permissions projet) | -| Lecture seule | `//console/reader` | user + codeviewer (projet, visualisation) | -| Lecture seule | `/console/reader` | user + codeviewer (tous projets, visualisation) | +| Lecture seule | `//console/readonly` | user + codeviewer (projet, visualisation) | +| Lecture seule | `/console/readonly` | user + codeviewer (tous projets, visualisation) | | Security | `//console/security` | identique DevOps (mêmes permissions projet) | | Security | `/console/security` | identique DevOps (tous projets) | | Guest | — | Aucun accès | @@ -36,14 +36,14 @@ La Console mappe chaque groupe OIDC vers un ensemble de **permissions projet Son | Groupe Keycloak | Permissions SonarQube (projet) | | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | `/console/admin` | `admin`, `profileadmin`, `gateadmin`, `scan`, `provisioning` (permissions globales) | -| `/console/security`, `/console/reader` | Appliquent les groupes `//console/security` / `//console/reader` sur chaque projet | +| `/console/security`, `/console/readonly` | Appliquent les groupes `//console/security` / `//console/readonly` sur chaque projet | | `//console/admin` | `admin`, `scan`, `user`, `codeviewer`, `issueadmin`, `securityhotspotadmin` | | `//console/devops` | `scan`, `user`, `codeviewer`, `issueadmin`, `securityhotspotadmin` | | `//console/developer` | `scan`, `user`, `codeviewer`, `issueadmin`, `securityhotspotadmin` | | `//console/security` | `scan`, `user`, `codeviewer`, `issueadmin`, `securityhotspotadmin` | -| `//console/reader` | `user`, `codeviewer` | +| `//console/readonly` | `user`, `codeviewer` | -> **Égalité devops = developer = security.** Sur un projet, les trois rôles `devops`, `developer` et `security` reçoivent **exactement les mêmes permissions** (`scan`, `user`, `codeviewer`, `issueadmin`, `securityhotspotadmin`). Seul `admin` ajoute `admin`. `reader` se limite à `user` + `codeviewer`. +> **Égalité devops = developer = security.** Sur un projet, les trois rôles `devops`, `developer` et `security` reçoivent **exactement les mêmes permissions** (`scan`, `user`, `codeviewer`, `issueadmin`, `securityhotspotadmin`). Seul `admin` ajoute `admin`. `readonly` se limite à `user` + `codeviewer`. --- diff --git a/docs/guide/rbac/vault.md b/docs/guide/rbac/vault.md index 1bc52ab..df3186d 100644 --- a/docs/guide/rbac/vault.md +++ b/docs/guide/rbac/vault.md @@ -14,8 +14,8 @@ Ce que chaque rôle Console obtient réellement dans Vault. Les chemins `/consol | Administrateur projet | `//console/admin` | Owner du projet : tout `devops` + gestion des rôles/policies AppRole/transit du projet | | DevOps | `//console/devops` | Lecture + écriture des secrets du projet (`/data/*`) | | Développeur | `//console/developer` | Liste des secrets du projet uniquement (pas de lecture/écriture du contenu) | -| Lecture seule | `//console/reader` | Liste des secrets du projet uniquement | -| Lecture seule | `/console/reader` | Lecture plateforme non-sensible : `sys/health`, `sys/mounts`, `sys/auth`, `sys/policies` | +| Lecture seule | `//console/readonly` | Liste des secrets du projet uniquement | +| Lecture seule | `/console/readonly` | Lecture plateforme non-sensible : `sys/health`, `sys/mounts`, `sys/auth`, `sys/policies` | | Security | `//console/security` | Audit projet : `/metadata/*`, `transit/keys//*` | | Security | `/console/security` | Audit & posture plateforme : `sys/audit`, `sys/policies`, `/metadata`, jamais le contenu | | Guest | — | Aucun accès Vault | @@ -38,12 +38,12 @@ La Console génère, pour chaque projet, les groupes d'identité Vault suivants | ---------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `/console/admin` (groupe d'identité Vault `console-admin`) | `platform--admin` | **Admin plateforme** : `path "sys/*" { create, read, update, delete, list, sudo }`. | | `/console/security` (groupe d'identité Vault `console-security`) | `platform--security` | **Audit & posture** : lecture `sys/audit/*`, `sys/policies/*`, `sys/auth/*`. Pas de contenu de secrets. | -| `/console/reader` (groupe d'identité Vault `console-reader`) | `platform--reader` | **Lecture plateforme non-sensible** : `sys/health`, `sys/mounts`, `sys/auth`, `sys/policies`. Pas `/data/*`. | +| `/console/readonly` (groupe d'identité Vault `console-readonly`) | `platform--readonly` | **Lecture plateforme non-sensible** : `sys/health`, `sys/mounts`, `sys/auth`, `sys/policies`. Pas `/data/*`. | | `//console/admin` | `app----admin` | **Owner périmètre projet** : tout ce que `devops` + **gestion des rôles d'accès du projet** (policies préfixées projet, AppRole/JWT du projet, clés transit du projet). Pas d'accès hors projet. | | `//console/devops` | `project----devops` | **RW secrets du projet** (mount ``, chemins relatifs au mount) : `/data/*` {create,read,update,delete,list} ; `/metadata/*` {read,list} ; `/delete\|undelete\|destroy/*` {update}. Pas d'accès aux clés transit ni à AppRole. | | `//console/developer` | `project----developer` | **List strict projet** : `/data/*` {list}. Rien d'autre. | | `//console/security` | `project----security` | **Audit projet** : `/metadata/*` {list} ; `transit/keys//*` {list}. Pas `/data/*`. | -| `//console/reader` | `project----reader` | **List strict projet** : `/data/*` {list}. Rien d'autre. | +| `//console/readonly` | `project----readonly` | **List strict projet** : `/data/*` {list}. Rien d'autre. | > Un projet possède également un rôle AppRole technique (``) pour les robots CI, rattaché aux _policies_ `tech----ro` (lecture d'un secret de registre dédié) et `app----admin`. From 6831f333481a0e9783d277099506fdd9f99e28df Mon Sep 17 00:00:00 2001 From: William Phetsinorath Date: Thu, 8 Oct 2026 16:43:44 +0200 Subject: [PATCH 2/3] docs: ajouter la fiche RBAC GitLab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le répertoire guide/rbac couvrait console-cpin, vault, keycloak, harbor, nexus, sonarqube et grafana mais pas GitLab. Ajout de la fiche GitLab (mapping roles projet vers niveaux d acces : Owner/Maintainer/Developer/Reporter, source plugins/gitlab members.ts) et inscription dans la sidebar. Co-authored-by: Automata Signed-off-by: William Phetsinorath Change-Id: I5d9ce0bad995a6ecb3d041dc087c45a06a6a6964 --- docs/.vitepress/sidebar.json | 4 +++ docs/guide/rbac/gitlab.md | 63 ++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 docs/guide/rbac/gitlab.md diff --git a/docs/.vitepress/sidebar.json b/docs/.vitepress/sidebar.json index 2d085f7..2184a86 100644 --- a/docs/.vitepress/sidebar.json +++ b/docs/.vitepress/sidebar.json @@ -144,6 +144,10 @@ { "text": "Grafana", "link": "/guide/rbac/grafana" + }, + { + "text": "GitLab", + "link": "/guide/rbac/gitlab" } ] }, diff --git a/docs/guide/rbac/gitlab.md b/docs/guide/rbac/gitlab.md new file mode 100644 index 0000000..dd33fad --- /dev/null +++ b/docs/guide/rbac/gitlab.md @@ -0,0 +1,63 @@ +# Groupes Keycloak et GitLab + +Ce document décrit comment la Console propage les **groupes Keycloak** en **niveaux d'accès GitLab** (membres du groupe du projet), et quels droits en résultent. + +--- + +## Vue par rôle + +Ce que chaque rôle Console obtient réellement dans GitLab, sur le **groupe du projet** : + +| Rôle Console | Groupe Keycloak | Accès obtenu dans GitLab | +| --------------------- | --------------------------- | -------------------------- | +| Propriétaire projet | — | **Owner** sur le groupe | +| Administrateur projet | `//console/admin` | **Maintainer** sur le groupe | +| DevOps | `//console/devops` | **Developer** sur le groupe | +| Développeur | `//console/developer` | **Developer** sur le groupe | +| Lecture seule | `//console/readonly` | **Reporter** sur le groupe | +| Guest | — | Aucun accès | + +> Les groupes d'administration plateforme (`/console/*`) ne sont pas propagés vers GitLab : seuls les rôles projet ouvrent un accès au groupe GitLab du projet. + +--- + +## 1. Authentification : GitLab via OIDC Keycloak + +- GitLab est fédéré au fournisseur OIDC Keycloak ; les utilisateurs se connectent sans mot de passe local. +- La Console approvisionne, pour chaque projet, le **groupe GitLab** et y ajoute les membres avec un niveau d'accès (Owner / Maintainer / Developer / Reporter). + +--- + +## 2. Groupes Keycloak et niveau GitLab résultant + +La Console mappe chaque rôle projet vers un **niveau d'accès GitLab** (membre direct du groupe du projet). + +| Groupe Keycloak | Niveau GitLab | +| --------------------------- | --------------- | +| `//console/admin` | **Maintainer** | +| `//console/devops` | **Developer** | +| `//console/developer` | **Developer** | +| `//console/readonly` | **Reporter** | + +- **Propriétaire du projet** : **Owner** (toujours le niveau le plus élevé, indépendamment des rôles). +- **Cumul des rôles** : en cas de rôles multiples, le **niveau le plus élevé** l'emporte. +- Cette correspondance peut être adaptée par les administrateurs via la configuration du plugin GitLab (suffixes de groupes `projectMaintainerGroupPathSuffix`, `projectDeveloperGroupPathSuffix`, `projectReporterGroupPathSuffix`). + +--- + +## 3. Points d'attention + +- **Provisionnement autoritaire.** La Console prend le contrôle total de l'appartenance du groupe : tout membre non tracé par la Console est **supprimé**, les modifications manuelles dans GitLab sont écrasées à la synchronisation. +- **Phase de rétrocompatibilité (9.16.x)** — un rôle sans groupe OIDC reçoit `Developer` par défaut lors de l'ajout ; ce comportement évoluera vers `Guest` dans une prochaine version. + +--- + +## 4. Qui gère quoi ? + +| Élément | Géré par | +| ---------------------------------- | ------------------------- | +| Identité OIDC / groupes Keycloak | **Keycloak** | +| Groupes GitLab, membres & niveaux | **Console** (automatique) | +| Application des droits | **GitLab** | + +--- From a055ed09547a0006c2f8722ed7cf13fe612f3706 Mon Sep 17 00:00:00 2001 From: William Phetsinorath Date: Thu, 8 Oct 2026 17:44:58 +0200 Subject: [PATCH 3/3] docs: corriger la fiche RBAC GitLab selon server-nestjs Mapping des niveaux aligne sur apps/server-nestjs (gitlab.constants.ts, gitlab.utils.ts generateAccessLevelMapping) : devops -> Maintainer (et non Developer), security -> Reporter, defaut sans groupe OIDC -> Guest, plus les flags admin/auditor GitLab pour les groupes plateforme. Co-authored-by: Automata Signed-off-by: William Phetsinorath Change-Id: I480b691ad25956f10520c36d0c4a9cd76a6a6964 --- docs/guide/rbac/gitlab.md | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/docs/guide/rbac/gitlab.md b/docs/guide/rbac/gitlab.md index dd33fad..16ad2cf 100644 --- a/docs/guide/rbac/gitlab.md +++ b/docs/guide/rbac/gitlab.md @@ -6,49 +6,50 @@ Ce document décrit comment la Console propage les **groupes Keycloak** en **niv ## Vue par rôle -Ce que chaque rôle Console obtient réellement dans GitLab, sur le **groupe du projet** : +Ce que chaque rôle Console obtient réellement dans GitLab : -| Rôle Console | Groupe Keycloak | Accès obtenu dans GitLab | -| --------------------- | --------------------------- | -------------------------- | -| Propriétaire projet | — | **Owner** sur le groupe | +| Rôle Console | Groupe Keycloak | Accès obtenu dans GitLab | +| --------------------- | --------------------------- | ---------------------------- | +| Propriétaire projet | — | **Owner** sur le groupe | | Administrateur projet | `//console/admin` | **Maintainer** sur le groupe | -| DevOps | `//console/devops` | **Developer** sur le groupe | -| Développeur | `//console/developer` | **Developer** sur le groupe | -| Lecture seule | `//console/readonly` | **Reporter** sur le groupe | -| Guest | — | Aucun accès | - -> Les groupes d'administration plateforme (`/console/*`) ne sont pas propagés vers GitLab : seuls les rôles projet ouvrent un accès au groupe GitLab du projet. +| DevOps | `//console/devops` | **Maintainer** sur le groupe | +| Développeur | `//console/developer` | **Developer** sur le groupe | +| Lecture seule | `//console/readonly` | **Reporter** sur le groupe | +| Security | `//console/security` | **Reporter** sur le groupe | +| Admin plateforme | `/console/admin` | **Admin GitLab** (flag instance) | +| Audit plateforme | `/console/readonly`, `/console/security` | **Auditeur GitLab** (flag auditor) | --- ## 1. Authentification : GitLab via OIDC Keycloak - GitLab est fédéré au fournisseur OIDC Keycloak ; les utilisateurs se connectent sans mot de passe local. -- La Console approvisionne, pour chaque projet, le **groupe GitLab** et y ajoute les membres avec un niveau d'accès (Owner / Maintainer / Developer / Reporter). +- La Console approvisionne, pour chaque projet, le **groupe GitLab** et y ajoute les membres avec un niveau d'accès (Owner / Maintainer / Developer / Reporter / Guest). --- ## 2. Groupes Keycloak et niveau GitLab résultant -La Console mappe chaque rôle projet vers un **niveau d'accès GitLab** (membre direct du groupe du projet). - | Groupe Keycloak | Niveau GitLab | | --------------------------- | --------------- | | `//console/admin` | **Maintainer** | -| `//console/devops` | **Developer** | +| `//console/devops` | **Maintainer** | | `//console/developer` | **Developer** | | `//console/readonly` | **Reporter** | +| `//console/security` | **Reporter** | - **Propriétaire du projet** : **Owner** (toujours le niveau le plus élevé, indépendamment des rôles). - **Cumul des rôles** : en cas de rôles multiples, le **niveau le plus élevé** l'emporte. -- Cette correspondance peut être adaptée par les administrateurs via la configuration du plugin GitLab (suffixes de groupes `projectMaintainerGroupPathSuffix`, `projectDeveloperGroupPathSuffix`, `projectReporterGroupPathSuffix`). +- **Rôle sans groupe OIDC reconnu** : le membre reçoit **Guest** (accès minimal au groupe). +- **Rôles plateforme** : les membres d'`/console/admin` reçoivent le flag GitLab **admin** (administration de l'instance) ; les membres des groupes d'audit (`/console/readonly`, `/console/security`) reçoivent le flag **auditor** (lecture sur toute l'instance). +- Cette correspondance peut être adaptée via la configuration du plugin GitLab (`projectMaintainerGroupPathSuffix`, `projectDeveloperGroupPathSuffix`, `projectReporterGroupPathSuffix`, `adminGroupPath`, `auditorGroupPath`). --- ## 3. Points d'attention - **Provisionnement autoritaire.** La Console prend le contrôle total de l'appartenance du groupe : tout membre non tracé par la Console est **supprimé**, les modifications manuelles dans GitLab sont écrasées à la synchronisation. -- **Phase de rétrocompatibilité (9.16.x)** — un rôle sans groupe OIDC reçoit `Developer` par défaut lors de l'ajout ; ce comportement évoluera vers `Guest` dans une prochaine version. +- Les dépôts `infra-apps` et `mirror` sont des dépôts techniques Console, jamais des cibles de mirroring. ---