docs: publier les fiches RBAC outils sous administration/rbac - #103
Conversation
|
c713cca to
60d9054
Compare
90fefc7 to
cfd31db
Compare
Revue adversariale vs
|
shikanime
left a comment
There was a problem hiding this comment.
Verdict : Changements demandés
Structure exemplaire et cohérente sur les 7 fiches ; j'ai vérifié la matrice contre l'implémentation console actuelle (apps/server-nestjs sur main) : bits PROJECT_PERMS 0-13 exacts, chemins de groupes Keycloak (/<slug>/console/*, console-admin, suffixes plugin Harbor/Nexus/Sonar/Vault/ArgoCD/Grafana) tous conformes, mappings Harbor (admin→Developer, root→Limited Guest), Nexus (écriture admin+devops, lecture readonly+security+developer, rôle <slug>-ID), SonarQube (devops=developer=security identiques, readonly=user+codeviewer) et Vault (policies platform--*, AppRole tech--+app--, mount par projet) corrects. Restent trois écarts factuels à corriger, dont un sur les permissions du rôle Développeur qui contredit la section 4 de la fiche elle-même. ✨ La clarification « chemins /console/<rôle> vs /<slug>/console/<rôle> » et la note platform-* = policies Vault (pas groupes Keycloak) sont précises et utiles.
| | --- | --- | --- | | ||
| | **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` | `SEE_SECRETS`, `REPLAY_HOOKS`, `MANAGE_REPOSITORIES`, `LIST_ENVIRONMENTS`, `LIST_REPOSITORIES` | |
There was a problem hiding this comment.
[🟠 Important] Le rôle Développeur n'a ni SEE_SECRETS ni REPLAY_HOOKS côté code (apps/server-nestjs/src/modules/project/project.utils.ts : MANAGE_REPOSITORIES | LIST_ENVIRONMENTS | LIST_REPOSITORIES uniquement). Cette ligne contredit la section 4 de cette même fiche (« ni SEE_SECRETS ni REPLAY_HOOKS ne lui sont accordés ») et la vue par rôle. Suggestion : retirer SEE_SECRETS et REPLAY_HOOKS de cette ligne.
| | `/console/readonly` (groupe d'identité Vault `console-readonly`) | `platform--readonly` | **Lecture plateforme non-sensible** : `sys/health`, `sys/mounts`, `sys/auth`, `sys/policies`. Pas `kv/data/*`. | | ||
| | `/<slug>/console/admin` | `app--<name>--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. | | ||
| | `/<slug>/console/devops` | `project--<name>--devops` | **RW secrets du projet** : `kv/data/<name>/*` {create,read,update,delete,list} ; `kv/metadata/*` {read,list} ; `kv/delete\|undelete\|destroy/*` {update} ; usage clés transit ; gestion AppRole CI (lecture `role-id`, génération `secret-id`). | | ||
| | `/<slug>/console/developer` | `project--<name>--readonly` | **List strict projet** : `kv/data/<name>/*` {list}. Rien d'autre. | |
There was a problem hiding this comment.
[🟠 Important] La policy du rôle developer est nommée project--<name>--developer (generateProjectPolicyName(project, 'developer') dans vault.service.ts), pas project--<name>--readonly — c'est le rôle readonly qui porte ce nom. Les capabilities (list seul sur data) sont en revanche exactes : ensureProjectReadOnlyPolicy est bien appliqué aux deux. Suggestion : renommer la policy dans cette ligne.
| | `/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/readonly` (groupe d'identité Vault `console-readonly`) | `platform--readonly` | **Lecture plateforme non-sensible** : `sys/health`, `sys/mounts`, `sys/auth`, `sys/policies`. Pas `kv/data/*`. | | ||
| | `/<slug>/console/admin` | `app--<name>--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. | | ||
| | `/<slug>/console/devops` | `project--<name>--devops` | **RW secrets du projet** : `kv/data/<name>/*` {create,read,update,delete,list} ; `kv/metadata/*` {read,list} ; `kv/delete\|undelete\|destroy/*` {update} ; usage clés transit ; gestion AppRole CI (lecture `role-id`, génération `secret-id`). | |
There was a problem hiding this comment.
[🟠 Important] Deux écarts avec vault.service.ts (ensureProjectDevopsPolicy) : (a) la policy devops n'accorde aucun usage de clés transit ni de gestion AppRole (lecture role-id / génération secret-id) — ses seuls paths sont <slug>/data/* (CRUDL), <slug>/metadata/* (read, list) et delete|undelete|destroy (update) ; (b) les chemins sont relatifs au mount projet (<slug>/data/*, le mount étant nommé d'après le slug), pas kv/data/<name>/* — la forme kv/ n'existe pas dans les policies générées. Suggestion : reformuler ces deux points.
| | `/<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`, `Security`) sont systématiquement liés aux groupes `/<slug>/console/{admin,devops,developer,readonly,security}`. Les rôles admin (`AdminRole`) sont les **seuls** pouvant être liés à un groupe Keycloak **existant** via `oidcGroup` (le préfixe `/` est obligatoire). |
There was a problem hiding this comment.
[🟡 Nit] Seuls 4 rôles système sont créés par projet (admin, devops, developer, readonly — cf. generateProjectCreateInput) ; /console/security n'existe que comme suffixe configurable des plugins, sans rôle projet par défaut. Suggestion : le préciser ici pour éviter qu'un lecteur cherche un groupe security peuplé automatiquement.
| | 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/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) | |
There was a problem hiding this comment.
[🟡 Nit] Même remarque que sur keycloak.md : Security (projet) n'est pas un rôle système créé à la création du projet ; le groupe /<slug>/console/security n'est alimenté que si les plugins sont configurés pour l'utiliser. Suggestion : une note « rôle non créé par défaut ».
| | `/<slug>/console/security` | **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** (pas de tirage d'images) pour l'ensemble de ses membres. |
There was a problem hiding this comment.
[🟡 Nit] Sémantique Harbor : le rôle Limited Guest dispose bien du pull d'images (lecture seule, sans browse complet) ; « pas de tirage d'images » est inexact. Suggestion : « lecture seule (pull sans administration) ».
…ssions, Vault) - readonly→reader partout sauf Nexus (migration 20260615100000 console) - Développeur: retrait SEE_SECRETS/REPLAY_HOOKS (project.utils.ts) - Vault: policy developer dédiée, chemins relatifs au mount, pas de transit/AppRole pour devops - Harbor: Limited Guest = pull autorisé - security: groupe projet non créé par défaut
bf7b045 to
ad4a5d5
Compare
…r les fiches RBAC Le chemin plateforme admin est /admin (adminGroupPath), groupe d'amorcage gere en dehors de la reconciliation Console, portant des droits sur la Console CPiN seule. Les groupes plateforme reconcilies /console/* restent propages vers les outils (admin, audit, lecture) ; la fiche keycloak documente les deux chemins admin. Retrait des references internes (ADR 014, matrice RBAC), des notes platform-admin/security/reader et des sections Mise en coherence automatique et References. Co-authored-by: Automata <[email protected]> Signed-off-by: William Phetsinorath <[email protected]> Change-Id: Iaa5027675df7383e5a602fb419761afc6a6a6964
ad4a5d5 to
9498568
Compare
Issues liées
Closes #102
Quel est le comportement actuel ?
Les fiches de droits fins (RBAC) par outil de la chaîne DevSecOps (Console CPiN, Vault, Keycloak, Harbor, Nexus, SonarQube, Grafana) n’étaient documentées que dans le dépôt interne
documentation-interne-socle, inaccessible au public.Quel est le nouveau comportement ?
Les 7 fiches sont publiées dans la documentation grand public sous
docs/administration/rbac/(markdown pur, sans image locale), avec une section dédiée « Droits fins (RBAC outils) » enregistrée dansdocs/.vitepress/sidebar.json(groupe « Administration de la console »).Les références croisées mortes (liens vers des fiches et l’ADR-014 internes non publiées) ont été retirées pour permettre le build VitePress. Les PR internes correspondantes (#94 à #101) ont été fermées.
Cette PR introduit-elle un breaking change ?
Non.
Autres informations
sidebar.json: JSON valide, 7 liens ↔ 7 fichiers.config.tsconsommesidebar.jsondirectement.