Set-OPS-Public/docs/devis-identite.md
Daniel Allaire 5aa5f2e479 devis d'identite : comparer le deploye au declare
Constat de l'exploitant : « ca fait beaucoup de trucs incoherents qu'on
debusque ensemble ». Il y a une raison mesurable — les 30 preuves de
prouver.py sont STATIQUES (0 appel reseau, 0 ssh, 0 ansible). Elles montrent
que le depot est coherent avec lui-meme ; aucune ne demande au systeme
deploye s'il ressemble a ce que le depot annonce. Les quatre defauts du jour
vivaient tous la.

La classe statique est presque epuisee : recensement des motifs « cree mais
ne reconcilie jamais » -> amorcage_acces (delibere, D-67), serveur_openldap
(corrige le matin), et un seul reste reel (rbac-oidc.yml). Une preuve
statique de plus aurait rapporte une ligne.

Le patron devis/applicateur (D-23/D-24) existait deja pour les quatre
pare-feu, jamais pour les services. make identite-plan l'y porte :
- playbooks/maintenance/devis-identite.yml RELEVE le declare et le reel
- scripts/devis_identite.py COMPARE (le raisonnement n'a rien a faire en
  Jinja ; le depot a deja cette forme pour les devis reseau)
- le declare n'est jamais recopie : defauts du role + resolveurs. Un devis
  qui redeclare ce qu'il verifie ne verifie rien.

Verifie dans les deux sens : CONFORME sur le systeme reel ; sur un releve ou
les quatre defauts du jour sont rejoues plus deux regressions, 6 divergences
listees et code de sortie 1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 06:55:06 -04:00

2.3 KiB

Le devis d'identité : ce qui tourne correspond-il à ce qui est déclaré ?

Instrument ajouté le 2026-08-08, après une série de défauts qu'aucun test n'avait signalés. Lecture seule — il ne modifie rien.

make identite-plan

Le trou qu'il comble

scripts/prouver.py porte 30 preuves. Elles sont toutes statiques : elles lisent le dépôt. Zéro appel réseau, zéro SSH, zéro ansible. Elles établissent que le dépôt est cohérent avec lui-même — que les handlers existent, que les intrants ont un propriétaire, que rien n'est codé en dur.

Aucune ne demande au système déployé s'il ressemble à ce que le dépôt annonce.

Les quatre défauts du 2026-08-08 vivaient tous dans cet angle :

Défaut Le dépôt disait La machine portait
politique de mot de passe length(12)… aucuneabcd accepté
entrée ppolicy figée pwdMustChange: TRUE FALSE
fédération en écriture comptes écrits dans LDAP syncRegistrations absent
prénom givenName cn (le nom complet)

Chacun a été trouvé en relisant après avoir écrit. Aucun n'a été signalé.

Ce qu'il vérifie

Le playbook playbooks/maintenance/devis-identite.yml relève deux dictionnaires — le déclaré et le réel — et les dépose en JSON. scripts/devis_identite.py compare. La séparation est délibérée : la comparaison en Jinja est illisible, et le dépôt a déjà cette forme pour les devis réseau (Python raisonne, Ansible relève).

  • realm — politique de mot de passe, anti-force-brute, « mot de passe oublié », relais SMTP
  • fédération — mode d'écriture et les six clés de durcissement
  • mappeurs — chaque attribut LDAP projeté
  • annuaire — l'entrée pwdPolicy, attribut par attribut
  • comptes — ceux qui n'ont pas d'adresse, pour qui « mot de passe oublié » ne mène nulle part

Le déclaré n'est jamais recopié ici : le playbook charge les défauts du rôle et appelle les résolveurs. Un devis qui redéclare ce qu'il vérifie ne vérifie rien.

Ce qu'il ne fait pas

Il ne corrige pas — c'est make deployer qui réconcilie. Il répond à l'autre question, et sort en code 1 s'il y a un écart.

Il ne couvre que l'identité. Les autres services attendent le même traitement ; le patron est là pour être repris.