alliance-boreale/archives/pre-migration/docs-pile-operateur/README.md

76 lines
7.1 KiB
Markdown
Raw Normal View History

2026-01-29 09:46:17 -05:00
# README - Pile C1-C5 (Opérateur de référence)
Ce dépôt est la **source de vérité** (documentation + configuration + preuves) de la **Pile opérateur de référence** pour lAlliance Boréale (couches **C1 à C5**).
Références normatives : **ADR-OPS-STACK-001** (décision) et **POL-OPS-STACK-001** (exigences + preuves).
## 1) Principes non négociables
- **Membrane** : tout accès exposé passe par **C5 (NGINX + ModSecurity)**, sans bypass vers C2/C3/C4.
- **Traçabilité** : tout changement passe par **PR + ΔLog**, et génère ses preuves.
- **Séparation IaC** : **C4 = plan de vérité** (code, PR, CI, plan) ; **C5 = plan dexécution** (runner `apply` sous contrôle de la membrane).
## 2) Table — Stack opérateur (Exposition + Preuves)
> Les “preuves” ci-dessous référencent les identifiants exigés par **POL-OPS-STACK-001** (Cx-Ey). Les détails (contenu exact attendu) sont dans la POL.
| Couche | Domaine | Composant | Exposition | Preuves attendues |
|--------|------------------------------|----------------------------|-----------------------------------------------|----------------------------------------|
| C1 | Virtualisation | Proxmox VE | Admin-only (réseau gestion) | C1-E1, C1-E3 |
| C1 | Stockage distribué | Ceph | Admin-only (réseau stockage/gestion) | C1-E2, C1-E3 |
| C1 | NAS / landing zone / backup | TrueNAS | Admin-only | C1-E4 (si activé) |
| C2 | Pare-feu / segmentation | OPNsense | Admin-only (enforcement réseau) | C2-E1, C2-E2 |
| C2 | DNS autoritatif | PowerDNS Authoritative | Interne fédération (pas tenants) | C2-E3 |
| C2 | VPN admin / interco | WireGuard | Ops-only | C2-E4 |
| C3 | SSO / IAM | Keycloak | Via C5 (portails/UI) ; admin-only direct | C3-E1 |
| C3 | Annuaire | OpenLDAP | Interne (consommé par C3) | C3 (documenter si requis) |
| C3 | Monitoring états/SLA | Icinga2 | Lecture via C5 (Icinga Web) ; checks internes | C3-E2, C3-E3 |
| C3 | UI monitoring | Icinga Web 2 | Via C5 (SSO) | C3-E2, C3-E3 |
| C3 | Dashboards audit/SLA | Icinga Web 2 BPM | Via C5 (SSO) | C3-E2 |
| C3 | Observabilité métriques | Prometheus | Interne ; consulté via Grafana | C3-E4 |
| C3 | Alerting métriques | Alertmanager | Ops-only (notifications) | C3-E4 |
| C3 | Dashboards unifiés | Grafana | Via C5 (SSO) | C3-E5 |
| C3 | Logs centralisés (référence) | Loki | Ingestion via C5 ; lecture via Grafana | C3-E6 (+ ADR-OBS-001, POL-OBS-LOG-001) |
| C4 | Forge / traçabilité | Forgejo | Via C5 (SSO) | C4-E1 |
| C4 | CI / validation | Forgejo Actions | Interne (CI) | C4-E2 |
| C4 | Registre artefacts | Harbor | Via C5 (auth) | C4-E3 |
| C4 | Secrets | Vault | Interne ; accès restreint (C3/C5) | C4-E4 |
| C4 | Référentiels IaC | OpenTofu + Ansible (code) | Via Forgejo (PR/CI) | C4-E5 |
| C5 | Reverse proxy / WAF | NGINX + ModSecurity | Public/tenant-facing (point dentrée unique) | C5-E1, C5-E2 |
| C5 | Pivot API / portail | FastAPI | Via NGINX (SSO) | C5-E3 |
| C5 | DNS récursif tenants | Unbound | Tenants uniquement (C6+) | C5-E4 |
| C5 | Runner dexécution IaC | OpenTofu + Ansible (apply) | Ops-only (membrane) | C5-E5 |
## 3) IaC : “C4 vérité / C5 exécution” (règle opérateur)
- **C4 (Forgejo + Actions)** héberge le *code* (OpenTofu/Ansible), les PR, le ΔLog, et la **validation** (lint/format/tests + `tofu plan` attaché aux PR).
- **C5 (runner contrôlé)** exécute les actions à privilèges (`tofu apply`, `ansible-playbook`) avec secrets fournis via Vault et accès réseau minimal requis.
- Toute exécution IaC doit être **traçable** : PR → job → logs dexécution → preuves déposées dans `/evidence/`.
## 4) Mode daudit (trimestriel) — 12 lignes
1. Ouvrir la période dans `/evidence/quarterly/YYYY-Qn/`.
2. Vérifier la présence de lindex `evidence/00_Evidence_Index.md` mis à jour.
3. Confirmer C2-E1 (export OPNsense) et C2-E2 (tests non-bypass) pour la période.
4. Confirmer C3-E1 (export Keycloak) et cohérence RBAC ops/audit.
5. Confirmer C3-E2 (exports BPM) couvrant au minimum les services C1C5.
6. Confirmer C3-E3 (couverture checks Icinga + historique alertes/incidents).
7. Confirmer C3-E4 (targets Prometheus + règles Alertmanager + exemple dalerte).
8. Confirmer C3-E5 (exports dashboards Grafana + sources).
9. Confirmer C3-E6 (Loki : labels/rétention + requêtes de preuve reproductibles).
10. Confirmer C4-E1..E4 (Forgejo/Actions/Harbor/Vault) avec artefacts et journaux.
11. Confirmer C4-E5 et C5-E5 (IaC : plan attaché PR + logs dapply côté C5).
12. Produire un ΔLog “Audit trimestriel” liant les preuves et conclure OK/KO.
## 5) Structure du dépôt (résumé)
- `/adr/` : décisions (dont ADR-OPS-STACK-001)
- `/pol/` : politiques (dont POL-OPS-STACK-001, POL-OBS-LOG-001)
- `/configs/` : configs versionnées (opnsense/nginx/unbound/icinga/grafana/loki/harbor/vault, etc.)
- `/iac/` : OpenTofu + Ansible (code) + inventory
- `/runbooks/` : procédures opératoires (incluant exécution IaC en C5)
- `/evidence/` : preuves datées + index (audit mécanique)
- `/dashboards/` : exports Grafana et Icinga BPM
## 6) Règle dor
Si ce nest pas **versionné**, **traçable**, et **prouvable**, ça nexiste pas dans la pile opérateur.