76 lines
7.1 KiB
Markdown
76 lines
7.1 KiB
Markdown
|
|
# 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.
|