Nouvelle version de la présentation / Décision architecturale concernant FastAPI et ERPLibre
Some checks are pending
CI / yaml-lint (push) Waiting to run
CI / ssot-export (push) Waiting to run
CI / tests (push) Waiting to run
CI / docs (push) Waiting to run

This commit is contained in:
Dan Allaire 2026-02-01 09:28:39 -05:00
parent 22e5954295
commit 6c23f1147f
2 changed files with 154 additions and 0 deletions

View file

@ -0,0 +1,154 @@
# ADR-C5-CTRL-001 — ERPLibre “cockpit” en tenant opérateur et FastAPI comme plan de contrôle C5
**Version :** 1.1
**Date :** 31 janvier 2026
**Statut :** Adopté
**Portée :** Pile opérateur de référence (C1C5), Gouvernance, Admission tenants, Sécurité, Audit
---
## 1) Contexte
La pile opérateur de référence fixe **C5** comme **membrane** (point dentrée unique) entre la Fédération (C1C4) et les tenants (C6C8).
C5 doit porter un **plan de contrôle** : admission, quotas, RBAC, orchestration (runner), production de preuves.
Dans le même temps, un besoin fort émerge : disposer dun **cockpit** (portail “au premier plan”) pour piloter la gouvernance opérationnelle (demandes, onboarding, changements, approbations), sans compromettre la membrane.
---
## 2) Problème
Deux impératifs doivent coexister :
1. **C5 doit rester minimal, durci, audit-friendly** : la membrane ne doit pas se transformer en suite applicative riche.
2. **Le pilotage opérationnel doit être ergonomique et fédérateur** : un portail/cockpit central améliore ladoption et la cohérence.
Le risque à éviter : déplacer des privilèges infrastructurels et des intégrations sensibles dans une application riche exposée, au détriment du non-bypass, de lauditabilité et de la surface dattaque.
---
## 3) Décision
### 3.1 ERPLibre est “aux commandes” comme cockpit — mais en tant que tenant
ERPLibre est positionné comme **cockpit de gouvernance** **dans un tenant de lopérateur fédéré** (tenant dédié “Gouvernance/Back-office”).
Il pilote le workflow humain (demandes, approbations, dossiers, suivi), et déclenche les actions **par contrat**, sans privilèges directs sur les couches internes.
> ERPLibre est **au premier plan** (UX, orchestration métier), mais **pas** le plan de contrôle de la membrane.
### 3.2 FastAPI demeure le plan de contrôle en C5
FastAPI est maintenu en **C5** comme **Pivot API / Plan de contrôle** pour :
- ladmission (validation des descripteurs),
- lapplication des politiques (quotas, conformité),
- lorchestration dexécution (runner C5 OpenTofu/Ansible),
- la gestion daccès (RBAC via Keycloak et services fédérés),
- la production et lindexation des preuves (audit).
### 3.3 Règle dintégration : “Commander par le contrat, pas par des accès directs”
ERPLibre **commande** via des mécanismes traçables et contrôlés :
- PR + ΔLog (Git comme source de vérité),
- appels API C5 (demande dexécution et suivi),
- lecture détat / preuves (status/evidence).
ERPLibre **ne** doit **pas** disposer daccès directs à C2/C3/C4 (DNS autoritatif, IAM admin, secrets admin, forge admin, etc.).
---
## 4) Architecture cible (rôle et flux)
### 4.1 Déploiement et exposition
- ERPLibre est déployé comme **workload applicatif** dans le **tenant “Gouvernance/Back-office”** de lopérateur.
- Il est exposé **via C5** (NGINX+ModSecurity) et protégé par **SSO** (Keycloak), conformément à la membrane.
- ERPLibre nest pas un composant de C5 : il est un **consommateur** du plan de contrôle.
### 4.2 “Git comme source de vérité” (flux recommandé)
1. Une demande est créée et approuvée dans ERPLibre (onboarding / changement).
2. ERPLibre génère/édite un **TenantDescriptor** (YAML) et ouvre une **PR** dans Forgejo avec ΔLog.
3. CI (Forgejo Actions) valide : schéma/politiques, lint, et `tofu plan` (si applicable).
4. Sur merge, FastAPI (C5) récupère le YAML (commit SHA), **revalide**, puis :
- déclenche le runner C5 (OpenTofu/Ansible),
- orchestre RBAC et intégrations nécessaires,
- produit `run_id`, journaux, et preuves (evidence pack).
5. ERPLibre consulte létat via C5 (status/runs/evidence) et présente le suivi au demandeur.
### 4.3 Flux API (complémentaire)
ERPLibre peut appeler C5 pour :
- demander lexécution dun changement référencé par `tenant_id + commit_sha`,
- suivre un `run_id`,
- afficher les preuves disponibles.
---
## 5) Contraintes de sécurité et de conformité (non négociables)
### 5.1 Membrane / non-bypass
- Tous les flux exposés passent par C5 (NGINX+ModSecurity).
- Aucun accès direct tenant → C2/C3/C4.
### 5.2 Principe du moindre privilège
- ERPLibre nobtient jamais de privilèges “infra” larges.
- Les actions à privilèges sont exécutées **uniquement** via le runner C5, sous contrôle C5.
### 5.3 Traçabilité
- Tout changement : PR + ΔLog obligatoires.
- Tout provisioning : PR → run_id → logs → preuves indexées.
### 5.4 Preuves auditables
- C5 produit des preuves standardisées et indexées dans le dépôt `operator-stack/` (evidence pack trimestriel, exports, manifests/hashes si adoptés).
---
## 6) Justification (pourquoi cest la solution la plus robuste)
- **ERPLibre** est idéal pour être un cockpit : workflow humain, dossiers, demandes, suivi, ergonomie.
- **C5** doit rester un plan de contrôle minimal : plus un composant est riche à la membrane, plus il est coûteux à sécuriser, patcher, auditer.
- Cette décision maximise ladoption (ERPLibre visible) sans diluer la rigueur (FastAPI contrôle et prouve).
---
## 7) Alternatives considérées
1. **ERPLibre en C5 (remplacement complet)** : rejeté (surface dattaque, complexité, périmètre flou, audit alourdi).
2. **FastAPI seul sans cockpit** : acceptable techniquement, mais moins fédérateur et moins ergonomique.
3. **Cockpit alternatif** : possible, tant quil reste “tenant” et quil commande par contrat via C5.
---
## 8) Critères dacceptation
La décision est considérée opérationnelle lorsque :
1. ERPLibre est déployé dans un tenant dédié “Gouvernance/Back-office” de lopérateur et exposé via C5.
2. SSO Keycloak protège ERPLibre (et les portails) via la membrane.
3. ERPLibre génère/édite un TenantDescriptor et ouvre une PR + ΔLog dans Forgejo.
4. FastAPI en C5 valide et orchestre lexécution via runner C5, produisant un `run_id`.
5. Les preuves sont déposées et indexées (operator-stack/evidence/…), consultables via C5.
6. Un test de non-bypass démontre limpossibilité daccès direct tenant → C2/C3/C4.
---
## 9) Impacts sur la pile opérateur de référence
- Aucun changement à la pile C1C5 : FastAPI reste en C5.
- Ajout dun **tenant opérateur dédié** (workload) : ERPLibre devient une application “premier plan” consommant le plan de contrôle C5.
---
## 10) ΔLog (à compléter au commit)
- Décision : ERPLibre cockpit en tenant opérateur ; FastAPI plan de contrôle C5 ; commande par contrat (PR+ΔLog+API)
- Auteur(s) : \_________________\_
- Référence PR : \_________________\_
- Date dentrée : \_________________\_