Le dépôt fait / explique / prouve ce qu'il affirme, vérifiable en une commande. - Phase 1 : docs/audit/affirmations.md — 54 affirmations publiques tracées vers une commande de preuve et un statut (✅/🟡/❌/⚪). - Phase 2 : CLAUDE.md réduit à un pointeur mince ; contradiction SSH levée (le code applique déjà PasswordAuthentication no + AuthenticationMethods publickey, conforme à AGENTS.md) ; section AGENTS « Codex » → « agents IA ». - Phase 3 : parcours démarrage réparé (QUICKSTART renvoyait à un modèle absent, chemins de voûte faux, commandes make périmées) ; make verifier vert (ansible-lint 33 → 0 : site.yml généré nommé, pipefail, name[template]) ; voûte Proxmox unifiée lue par le clonage (all/vault.yml). - Phase 4 : make prouver → docs/audit/preuve-<date>.md, harnais rejouable qui rappelle l'outillage existant (aucune validation réimplémentée). - Phase 5 : parcours QUICKSTART prouvé hors-ligne sur le socle ; modèle socle rendu valide (autorite interne → auto-heberge) ; split-brain d'inventaire corrigé (repli sur le répertoire existant, pas principal/). make prouver : 15 OK, 0 échec, 1 sautée (voûte). ansible-lint : 0 failure. Écarts découverts en cours de traitement (AFF-097..100) : tous résolus. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
75 lines
4.3 KiB
Markdown
75 lines
4.3 KiB
Markdown
# Audit de conformité — mode d'emploi
|
|
|
|
Ce dossier contient le dispositif qui garde Set-OPS **honnête** : il ne doit jamais
|
|
affirmer plus que ce qu'il prouve.
|
|
|
|
## Les trois pièces
|
|
|
|
| Fichier | Rôle |
|
|
|---|---|
|
|
| [`affirmations.md`](affirmations.md) | **Le registre** : chaque affirmation publique du dépôt (README, AGENTS, QUICKSTART, docs, wiki, aide `make`, GUI) tracée vers une commande de preuve et un statut (✅/🟡/❌/⚪), plus le **journal des traitements** (ce qui a été corrigé, quand, comment). |
|
|
| `scripts/prouver.py` | **Le harnais** : un orchestrateur mince qui **rejoue** les preuves automatisables du registre en appelant l'outillage existant (les mêmes scripts que `make verifier`). Il ne réimplémente aucune validation. |
|
|
| `preuve-AAAA-MM-JJ.md` | **La pièce justificative** : le rapport horodaté produit par `make prouver`. Rejouable et présentable (audit, certification, revue). |
|
|
|
|
## Produire une preuve
|
|
|
|
```bash
|
|
make prouver
|
|
```
|
|
|
|
Cela exécute chaque preuve et écrit `docs/audit/preuve-<date>.md`. La commande **sort en
|
|
erreur (rc≠0)** si une preuve automatisable échoue — utilisable en garde-fou (CI locale,
|
|
pré-commit). Une preuve **SAUTÉE** (⚪) n'est pas un échec.
|
|
|
|
### Prérequis Vault
|
|
|
|
La preuve `P15` (inventaire Ansible complet, `ansible-inventory --list`) déchiffre le
|
|
`group_vars` de l'instance. Sans `ANSIBLE_VAULT_PASSWORD_FILE`, elle est **automatiquement
|
|
sautée** (⚪) avec la mention du prérequis — le reste du harnais reste vert, car les
|
|
validateurs Python lisent le plan et l'inventaire directement, sans secret. Pour l'inclure :
|
|
|
|
```bash
|
|
export ANSIBLE_VAULT_PASSWORD_FILE=~/.config/setops-vault-pass
|
|
make prouver
|
|
```
|
|
|
|
## Ce que couvre `make prouver`
|
|
|
|
| # | Preuve | Ce qu'elle établit |
|
|
|---|---|---|
|
|
| P01 | Lint (`ansible-lint`) | 0 violation, profil `production`. |
|
|
| P02 | Tests unitaires | `inventory_host` — cas nominal + refus. |
|
|
| P03 | Diff-vide du plan | l'inventaire est **généré** depuis le plan (diff vide). |
|
|
| P04 | Groupes ↔ playbooks | chaque groupe opérationnel a son playbook homonyme. |
|
|
| P05 | Dépendances de groupes | graphe cohérent, aucune entrée orpheline. |
|
|
| P06 | Validateurs de registres | serveurs / applications / bases / domaines valides. |
|
|
| P07 | GUI | `node --check` du JS du GUI. |
|
|
| P08 | Orchestration | couches + graphe : aucun cycle, aucune arête en arrière. |
|
|
| P09 | Flux réseau | schéma + matrice d'audit cohérents. |
|
|
| P10 | Handlers ↔ notify | tout `notify` pointe vers un handler du même rôle. |
|
|
| P11 | Syntaxe | `--syntax-check` de tous les playbooks (via `make syntaxe`). |
|
|
| P12 | Runbooks cités | les fichiers `docs/` référencés existent. |
|
|
| P13 | Invariants structurels | LICENSE, socle en forme dossier, pas de couches parallèles, SSH clé-only, nftables désactivé par défaut. |
|
|
| P14 | Chemins d'inventaire | aucun `instance/inventories/lab/group_vars` codé en dur. |
|
|
| P15 | Modèle public `socle` | ses registres (domaines/serveurs/applications/bases) valident. |
|
|
| P16 | Inventaire Ansible (voûte) | `ansible-inventory --list` — sauté sans mot de passe Vault. |
|
|
|
|
Le rapport relie chaque preuve aux **affirmations** qu'elle couvre (colonne « Affirmations »),
|
|
et liste à part les **déclarations d'intention** (⚪ invérifiables localement : AFF-036,
|
|
091, 096, 007) — assumées comme intentions, jamais présentées comme prouvées.
|
|
|
|
## Ajouter une preuve
|
|
|
|
1. Ajouter (ou corriger) l'affirmation dans `affirmations.md` avec sa commande de preuve.
|
|
2. Ajouter une entrée à la liste `PREUVES` de `scripts/prouver.py` : soit une ou plusieurs
|
|
commandes (`cmds`, toutes doivent renvoyer 0), soit une fonction native `func` renvoyant
|
|
`(ok, détail)` pour un invariant simple. Renseigner `refs` avec les ID d'affirmations.
|
|
3. Ne **pas** réimplémenter de logique de validation : appeler l'outillage existant
|
|
(`scripts/*.py`, `ansible-lint`, cibles `make`). Le harnais orchestre, il ne valide pas.
|
|
|
|
## Rapport avec `make verifier`
|
|
|
|
`make verifier` est la **porte de validation** au fil de l'eau (lint, tests, cohérence,
|
|
syntaxe) et s'arrête au premier échec. `make prouver` est complémentaire : il **exécute
|
|
tout** (sans s'arrêter au premier échec), **horodate** et **relie** chaque résultat aux
|
|
affirmations — pour produire une pièce présentable. Les deux réutilisent le même outillage.
|