diff --git a/docs/administration/rbac/console-cpin.md b/docs/administration/rbac/console-cpin.md index 4112171..e29794a 100644 --- a/docs/administration/rbac/console-cpin.md +++ b/docs/administration/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 @@ -53,11 +53,11 @@ 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) | | Admin plateforme (nom de groupe `console-admin`) | `console-admin` | identique à `/console/admin` (même périmètre admin global) — nom utilisé côté Vault | | 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** : les seuls chemins Keycloak réels sont `/console/admin`, `/console/security` et `/console/reader` (nommage en sous-groupes conservé et étendu par rétro-compatibilité). Les noms `console-admin`, `console-security`, `console-reader` désignent le _nom_ de groupe (sans `/`) dans certains outils (ex. Vault), mais le chemin Keycloak effectif reste `/console/`. +> **Groupes Keycloak d'administration plateforme** : les seuls chemins Keycloak réels sont `/console/admin`, `/console/security` et `/console/readonly` (nommage en sous-groupes conservé et étendu par rétro-compatibilité). Les noms `console-admin`, `console-security`, `console-readonly` désignent le _nom_ de groupe (sans `/`) dans certains outils (ex. Vault), mais le chemin Keycloak effectif reste `/console/`. > -> **`platform-admin` / `platform-security` / `platform-reader` ne sont PAS des groupes Keycloak.** Ce sont les _policies_ internes Vault (`platform--admin` / `platform--security` / `platform--reader`) couplées aux rôles `console-*`, représentant la portée transversale (tous projets). +> **`platform-admin` / `platform-security` / `platform-readonly` ne sont PAS des groupes Keycloak.** Ce sont les _policies_ internes Vault (`platform--admin` / `platform--security` / `platform--readonly`) couplées aux rôles `console-*`, représentant la portée transversale (tous projets). > **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/administration/rbac/grafana.md b/docs/administration/rbac/grafana.md index bea1615..2f184d3 100644 --- a/docs/administration/rbac/grafana.md +++ b/docs/administration/rbac/grafana.md @@ -14,8 +14,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 | @@ -36,12 +36,12 @@ Ce que chaque rôle Console obtient réellement dans Grafana (scopé par environ | Groupe Keycloak (ADR 014) | Rôle Grafana (mapping OIDC) | Portée | | -------------------------------------- | --------------------------- | -------------------------- | | `console-admin` (`/console/admin`) | **Organization Admin** | Globale | -| `/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/administration/rbac/harbor.md b/docs/administration/rbac/harbor.md index 6f4eec3..a089475 100644 --- a/docs/administration/rbac/harbor.md +++ b/docs/administration/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` (`/console/admin`) | **Admin** (global) | Global | | `/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. @@ -51,8 +51,8 @@ La Console mappe chaque groupe OIDC vers un **rôle Harbor** et une **portée** ## 3. Points d'attention - **Admin plateforme = Admin global Harbor.** `console-admin` (`/console/admin`) obtient le rôle **Admin** Harbor (gestion de tous les projets), pas un simple rôle de projet. -- **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/administration/rbac/keycloak.md b/docs/administration/rbac/keycloak.md index b844dc9..5c62b71 100644 --- a/docs/administration/rbac/keycloak.md +++ b/docs/administration/rbac/keycloak.md @@ -14,8 +14,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 | @@ -37,25 +37,25 @@ La Console crée et réconcilie automatiquement l'arborescence suivante (noms ca | ---------------------------------------- | ------------------------------------------------------------------- | ----------------------------------------- | | `console-admin` | Groupe plateforme **admin** | Tous les outils (Admin global) | | `/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 -- **`/console/admin` (nom `console-admin`) est le seul groupe plateforme admin.** `platform-admin`, `platform-security`, `platform-reader` ne sont pas des groupes Keycloak : ce sont des _policies_ internes Vault attachées aux groupes `/console/*`. -- **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. +- **`/console/admin` (nom `console-admin`) est le seul groupe plateforme admin.** `platform-admin`, `platform-security`, `platform-readonly` ne sont pas des groupes Keycloak : ce sont des _policies_ internes Vault attachées aux groupes `/console/*`. +- **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/administration/rbac/sonarqube.md b/docs/administration/rbac/sonarqube.md index 1c74f16..ee4cee6 100644 --- a/docs/administration/rbac/sonarqube.md +++ b/docs/administration/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 (ADR 014) | Permissions SonarQube (projet) | | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | `console-admin` (`/console/admin`) | **Administer System**, **Administer Quality Profiles**, **Administer Quality Gates**, **Create Projects** (admin global) | -| `/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/administration/rbac/vault.md b/docs/administration/rbac/vault.md index c4d1f8e..1e43c07 100644 --- a/docs/administration/rbac/vault.md +++ b/docs/administration/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`.