Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/.vitepress/sidebar.json
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,10 @@
{
"text": "Grafana",
"link": "/guide/rbac/grafana"
},
{
"text": "GitLab",
"link": "/guide/rbac/gitlab"
}
]
},
Expand Down
10 changes: 5 additions & 5 deletions docs/guide/rbac/console-cpin.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ Ce que chaque rôle peut réellement faire dans la Console CPiN. Les chemins `/c
| Administrateur projet | `/<slug>/console/admin` | Gérer le projet : membres, environnements, dépôts, suppression |
| DevOps | `/<slug>/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 | `/<slug>/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) | `/<slug>/console/reader` | Lister environnements et dépôts uniquement |
| Lecture seule (administration) | `/console/reader` | Lecture transverse (tous projets) |
| Lecture seule (projet) | `/<slug>/console/readonly` | Lister environnements et dépôts uniquement |
| Lecture seule (administration) | `/console/readonly` | Lecture transverse (tous projets) |
| Security (projet) | `/<slug>/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 |
Expand All @@ -38,7 +38,7 @@ Chaque projet reçoit 4 rôles système par défaut, liés aux groupes `/<slug>/
| **Administrateur** | `/<slug>/console/admin` | `MANAGE` (gérer le projet) |
| **DevOps** | `/<slug>/console/devops` | `SEE_SECRETS`, `REPLAY_HOOKS`, `MANAGE_ENVIRONMENTS`, `MANAGE_REPOSITORIES`, `LIST_ENVIRONMENTS`, `LIST_REPOSITORIES` |
| **Développeur** | `/<slug>/console/developer` | `MANAGE_REPOSITORIES`, `LIST_ENVIRONMENTS`, `LIST_REPOSITORIES` |
| **Lecture seule** | `/<slug>/console/reader` | `LIST_ENVIRONMENTS`, `LIST_REPOSITORIES` |
| **Lecture seule** | `/<slug>/console/readonly` | `LIST_ENVIRONMENTS`, `LIST_REPOSITORIES` |

### Bits `PROJECT_PERMS` disponibles

Expand All @@ -52,9 +52,9 @@ Chaque projet reçoit 4 rôles système par défaut, liés aux groupes `/<slug>/
| ------------------------------------------------ | ------------------------ | ----------------------------------------------------------------------------------- |
| 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.

Expand Down
64 changes: 64 additions & 0 deletions docs/guide/rbac/gitlab.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# 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 :

| Rôle Console | Groupe Keycloak | Accès obtenu dans GitLab |
| --------------------- | --------------------------- | ---------------------------- |
| Propriétaire projet | — | **Owner** sur le groupe |
| Administrateur projet | `/<slug>/console/admin` | **Maintainer** sur le groupe |
| DevOps | `/<slug>/console/devops` | **Maintainer** sur le groupe |
| Développeur | `/<slug>/console/developer` | **Developer** sur le groupe |
| Lecture seule | `/<slug>/console/readonly` | **Reporter** sur le groupe |
| Security | `/<slug>/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 / Guest).

---

## 2. Groupes Keycloak et niveau GitLab résultant

| Groupe Keycloak | Niveau GitLab |
| --------------------------- | --------------- |
| `/<slug>/console/admin` | **Maintainer** |
| `/<slug>/console/devops` | **Maintainer** |
| `/<slug>/console/developer` | **Developer** |
| `/<slug>/console/readonly` | **Reporter** |
| `/<slug>/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.
- **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.
- Les dépôts `infra-apps` et `mirror` sont des dépôts techniques Console, jamais des cibles de mirroring.

---

## 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** |

---
8 changes: 4 additions & 4 deletions docs/guide/rbac/grafana.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ Ce que chaque rôle Console obtient réellement dans Grafana (scopé par environ
| Administrateur projet | `/<slug>/console/admin` | **Editor** (hors-prod + prod) |
| DevOps | `/<slug>/console/devops` | **Editor** (hors-prod + prod) |
| Développeur | `/<slug>/console/developer` | **Viewer** (hors-prod + prod) |
| Lecture seule | `/<slug>/console/reader` | **Viewer** (projet) |
| Lecture seule | `/console/reader` | **Viewer** (globale) |
| Lecture seule | `/<slug>/console/readonly` | **Viewer** (projet) |
| Lecture seule | `/console/readonly` | **Viewer** (globale) |
| Security | `/<slug>/console/security` | **Viewer** (projet) |
| Security | `/console/security` | **Viewer** (globale) |
| Guest | — | Aucun accès |
Expand All @@ -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) |
| `/<slug>/console/admin` | **Editor** | Projet `<name>` |
| `/<slug>/console/devops` | **Editor** | Projet `<name>` |
| `/<slug>/console/developer` | **Viewer** | Projet `<name>` |
| `/<slug>/console/security` | **Viewer** | Projet `<name>` |
| `/<slug>/console/reader` | **Viewer** | Projet `<name>` |
| `/<slug>/console/readonly` | **Viewer** | Projet `<name>` |
| `/<slug>/grafana/hprod-RW` | **Editor** (hors-prod) | Projet `<slug>`, hors-prod |
| `/<slug>/grafana/hprod-RO` | **Viewer** (hors-prod) | Projet `<slug>`, hors-prod |
| `/<slug>/grafana/prod-RW` | **Editor** (prod) | Projet `<slug>`, prod |
Expand Down
12 changes: 6 additions & 6 deletions docs/guide/rbac/harbor.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ Ce que chaque rôle Console obtient réellement dans Harbor. Les chemins `/conso
| Administrateur projet | `/<slug>/console/admin` | **Developer** sur le projet (push/pull d'images) |
| DevOps | `/<slug>/console/devops` | **Guest** sur le projet (pull/lecture, pas de push) |
| Développeur | `/<slug>/console/developer` | **Guest** sur le projet (pull/lecture) |
| Lecture seule | `/<slug>/console/reader` | **Guest** sur le projet (lecture) |
| Lecture seule | `/console/reader` | **Guest** sur **tous** les projets (lecture transverse) |
| Lecture seule | `/<slug>/console/readonly` | **Guest** sur le projet (lecture) |
| Lecture seule | `/console/readonly` | **Guest** sur **tous** les projets (lecture transverse) |
| Security | `/<slug>/console/security` | **Guest** sur le projet (lecture) |
| Security | `/console/security` | **Guest** sur **tous** les projets (lecture transverse) |
| Guest | — | Aucun accès |
Expand All @@ -37,21 +37,21 @@ 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) |
| `/<slug>/console/admin` | **Developer** | Projet `<name>` |
| `/<slug>/console/devops` | **Guest** | Projet `<name>` |
| `/<slug>/console/developer` | **Guest** | Projet `<name>` |
| `/<slug>/console/security` | **Guest** | Projet `<name>` |
| `/<slug>/console/reader` | **Guest** | Projet `<name>` |
| `/<slug>/console/readonly` | **Guest** | Projet `<name>` |

> Le groupe racine du projet (`/<slug>`) est ajouté en tant que membre avec un niveau **Limited Guest** (lecture seule : pull d'images sans administration) pour l'ensemble de ses membres.

---

## 3. Points d'attention

- **Seul `/<slug>/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 `/<slug>/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.

---

Expand Down
14 changes: 7 additions & 7 deletions docs/guide/rbac/keycloak.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ En tant qu'IdP, Keycloak ne « donne » pas d'écran de droits : il place chaque
| Administrateur projet | `/<slug>/console/admin` | Admin du projet partout |
| DevOps | `/<slug>/console/devops` | RW projet (sauf admin) |
| Développeur | `/<slug>/console/developer` | Lecture/projet (selon outil) |
| Lecture seule | `/<slug>/console/reader` | Lecture transverse du projet |
| Lecture seule | `/console/reader` | Lecture transverse plateforme |
| Lecture seule | `/<slug>/console/readonly` | Lecture transverse du projet |
| Lecture seule | `/console/readonly` | Lecture transverse plateforme |
| Security | `/<slug>/console/security` | Audit/lecture transverse du projet |
| Security | `/console/security` | Audit/lecture transverse plateforme |
| Guest | — | Aucun droit jusqu'à ajout manuel à un projet |
Expand All @@ -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`) |
| `/<slug>/console/admin` | Groupe projet **admin** | Tous les outils (admin projet) |
| `/<slug>/console/devops` | Groupe projet **devops** | Tous les outils (RW projet) |
| `/<slug>/console/developer` | Groupe projet **developer** | Tous les outils (selon outil) |
| `/<slug>/console/security` | Groupe projet **security** | Tous les outils (audit/lecture) |
| `/<slug>/console/reader` | Groupe projet **reader** | Tous les outils (lecture) |
| `/<slug>/console/readonly` | Groupe projet **readonly** | Tous les outils (lecture) |
| `/<slug>/console/<env>/<RO\|RW>` | Sous-groupes **environnement** (membres en RO, propriétaires en RW) | ArgoCD (`/<slug>/console/<env>/<RO\|RW>`) |
| `/<slug>/grafana/<hprod\|prod>-<RO\|RW>` | 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 `/<slug>/console/{admin,devops,developer,reader}`. Le groupe `/<slug>/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 `/<slug>/console/{admin,devops,developer,readonly}`. Le groupe `/<slug>/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** (`<env>/RO|RW`, `grafana/<hprod|prod>-RO|RW`). Les autres outils s'appuient sur les groupes **projet-role** (`/<slug>/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** (`<env>/RO|RW`, `grafana/<hprod|prod>-RO|RW`). Les autres outils s'appuient sur les groupes **projet-role** (`/<slug>/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.

---
Expand Down
Loading
Loading