Skip to content

docs: publier les fiches RBAC outils sous administration/rbac - #103

Merged
iliesmrf merged 5 commits into
mainfrom
docs/rbac-fiches
Sep 4, 2026
Merged

docs: publier les fiches RBAC outils sous administration/rbac#103
iliesmrf merged 5 commits into
mainfrom
docs/rbac-fiches

Conversation

@shikanime

@shikanime shikanime commented Aug 19, 2026

Copy link
Copy Markdown
Member

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 dans docs/.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.ts consomme sidebar.json directement.
  • Build VitePress : 0 lien mort, exécution locale et CI vertes.

@shikanime

Copy link
Copy Markdown
Member Author

/requesting-code-review — verdict: PASSED

Independent reviewer + static gates, all green:

  • Sidebar (sidebar.json) : JSON valide, groupe « Droits fins (RBAC outils) » correctement imbriqué sous « Administration de la console », 7 liens ↔ 7 fichiers (aucun lien cassé).
  • Tables Markdown : colonnes cohérentes sur les 7 fiches (pipes échappés <RO|RW> gérés).
  • Titres : aucune parenthèse résiduelle.
  • Scan sécurité : aucun secret hardcodé, injection shell/eval/pickle, ou SQL.
  • Scoping /console/<role> : présent uniquement dans les intros, pas comme identité de groupe Keycloak dans les tableaux.

PR prête pour relecture humaine.

@shikanime
shikanime marked this pull request as ready for review August 19, 2026 12:05
@shikanime shikanime changed the title Ajout des fiches RBAC outils sous administration/rbac docs: publier les fiches RBAC outils sous administration/rbac Aug 19, 2026
@shikanime

Copy link
Copy Markdown
Member Author

Revue adversariale vs console/apps/server-nestjs — corrections appliquées (cd7095c)

Chaque point a été vérifié ligne à ligne contre le code (packages/shared/src/utils/permissions.ts, modules/{project,registry,nexus,sonarqube,vault,keycloak,argocd,observability}) avant correction :

  • Développeur ≠ accès secrets : le code n'accorde ni SEE_SECRETS ni REPLAY_HOOKS au rôle developer (project.utils.ts) ; la fiche Console CPiN disait l'inverse dans sa vue par rôle et ses points d'attention. Corrigé dans les deux endroits.
  • platform-admin/security/readonly ne sont pas des groupes Keycloak : un seul chemin plateforme existe par plugin (/console/admin|readonly|security, cf. constantes registry/nexus/sonarqube/vault/argocd). Les mappings différenciés console-admin vs platform-admin annoncés pour Grafana/Sonar/Nexus n'ont aucun support code. Toutes les tables remplacées par les chemins /console/* réels.
  • Vault : les groupes d'identité Vault sont nommés console-* et aliasés vers /console/*, porteurs des policies internes platform--*. La mention « Métadonnées KV » sur la policy security (absente du code) a été retirée.
  • Harbor : le groupe racine /<slug> est en Limited Guest, pas «Guest access level 3».

Les bits PROJECT_PERMS, les matrices projet Harbor/Nexus/Sonar/Vault et l'arborescence Keycloak restaient conformes — inchangés.

Vérification post-push : PR head = cd7095c, état open.

@shikanime shikanime left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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` |

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🟠 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.

Comment thread docs/administration/rbac/vault.md Outdated
| `/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. |

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🟠 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.

Comment thread docs/administration/rbac/vault.md Outdated
| `/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`). |

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🟠 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.

Comment thread docs/administration/rbac/keycloak.md Outdated
| `/<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).

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🟡 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) |

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🟡 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 ».

Comment thread docs/administration/rbac/harbor.md Outdated
| `/<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.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[🟡 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
iliesmrf
iliesmrf previously approved these changes Sep 3, 2026
@shikanime
shikanime force-pushed the docs/rbac-fiches branch 5 times, most recently from bf7b045 to ad4a5d5 Compare September 4, 2026 12:29
…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
@iliesmrf
iliesmrf merged commit 7fd0a48 into main Sep 4, 2026
1 check passed
@iliesmrf
iliesmrf deleted the docs/rbac-fiches branch September 4, 2026 15:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

💡 [REQUEST] - Ajouter la définition des RBAC

2 participants