# 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 l’Alliance 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 d’exé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 d’entré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 d’exé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 d’exécution → preuves déposées dans `/evidence/`. ## 4) Mode d’audit (trimestriel) — 12 lignes 1. Ouvrir la période dans `/evidence/quarterly/YYYY-Qn/`. 2. Vérifier la présence de l’index `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 C1–C5. 6. Confirmer C3-E3 (couverture checks Icinga + historique alertes/incidents). 7. Confirmer C3-E4 (targets Prometheus + règles Alertmanager + exemple d’alerte). 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 d’apply 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 d’or Si ce n’est pas **versionné**, **traçable**, et **prouvable**, ça n’existe pas dans la pile opérateur.