Trois des cinq pieges restants avaient deja une page depuis que la semaine a avance : le connect() vers le vide (frontiere-opnsense.md + le controle porte par frontiere-mesurer), le `make prouver` vert (wiki « Verifier le deploye »), et le banner exchange. Les deux orphelins — kcadm -s sur une map, grafana-cli dans une base fantome — s'adressent a qui ECRIT du code, pas a qui reprend l'exploitation : ils n'ont rien a faire dans un chemin de reprise. Une page separee aurait redit ce que trois autres disent deja, et aurait donc vieilli mal — le reproche exact qu'on faisait a sa version longue. La section ⑤ de « Reprendre l'ecosysteme » porte desormais la REGLE qui les relie (verifier l'instrument avant d'accuser le composant) et un tableau de trois lignes qui renvoie chacune a son domicile. Plus de promesse en attente. Et le banner exchange n'avait AUCUN domicile : le savoir vivait dans un commentaire du Makefile et trois entrees du CHANGELOG — nulle part ou on le cherche, exactement le mal que la refonte traite. Ecrit en runbook §3, avec ses trois causes par frequence et ce qui tranche dans l'ordre. runbooks-exploitation.md declare aussi son lecteur, comme le veut la convention validee. Verifie : chaque renvoi controle un a un, prouver.py 0 (33 OK), plan-recette inchange. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4.8 KiB
Runbooks d'exploitation — Set-OPS
Pour qui : l'exploitant, face à une situation. Pas le mainteneur, pas l'apprenant. Le pourquoi vit dans les autres
docs/; la version pédagogique, dans le wiki. Ici, uniquement le comment faire.Tu viens de reprendre l'écosystème et tu ne sais pas par où entrer ? Wiki → Reprendre l'écosystème.
1. Un certificat a expiré / le login SSO est cassé
Symptôme : connexion à une app via le SSO échoue après le login ; log Grafana/app :
tls: failed to verify certificate: x509: certificate has expired.
Cause fréquente : le cert step-ca a été renouvelé sur disque mais le service (nginx sur l'edge) n'a pas été rechargé → il sert l'ancien cert en mémoire.
Diagnostic-réflexe — comparer le cert servi au cert fichier :
# SERVI (en mémoire par nginx)
echo | openssl s_client -connect infra-edge-01…:443 -servername keycloak.lab… 2>/dev/null \
| openssl x509 -noout -enddate
# FICHIER (sur disque)
openssl x509 -in /etc/step/certs/infra-edge-01….crt -noout -enddate
Dates différentes (servi < fichier) ⇒ nginx sert un cert périmé.
Fix immédiat : systemctl reload nginx sur l'edge (idem postfix/dovecot/slapd selon le
service touché).
Fix permanent (déjà en place) : client_pki_reload_services recharge les vrais consommateurs
après chaque renouvellement — edge→nginx, mail→postfix/dovecot, annuaire→slapd. Vérifier :
systemctl cat cert-renewer@$(hostname -f).service | grep ExecStartPost.
Voir aussi l'unité wiki PKI & confiance (⑤ le renouvellement).
2. Donner Explore/Editor à un opérateur dans Grafana (RBAC)
Par défaut, un utilisateur SSO est Viewer (dashboards seulement, pas Explore). Pour l'élever :
- Déclarer l'assignation dans l'inventaire de l'instance (group_vars
serveur_keycloak) :serveur_keycloak_role_assignments: - { user: <uid>, role: grafana-editor } # ou grafana-admin - Redéployer Keycloak (
make deployersur le nœud SSO) — kcadm à chaud, sans coupure. - L'utilisateur doit se déconnecter/reconnecter (Grafana applique le rôle à la connexion).
Mapping (défaut du rôle grafana) : grafana-admin→Admin, grafana-editor→Editor, sinon Viewer
(serveur_grafana_oidc_role_path). Idéal souverain : piloter par un groupe d'annuaire plutôt
qu'un utilisateur explicite. Voir l'unité wiki Autorisation & RBAC.
3. « Connection timed out during banner exchange » — le message qui accuse le réseau
Symptôme : Ansible marque un ou plusieurs hôtes injoignables, avec ce message. On soupçonne le réseau, la route ou le pare-feu. C'est presque toujours autre chose.
Pourquoi le message trompe. À travers la frontière, la poignée TCP aboutit toujours — le
pare-feu y répond lui-même sans relayer (voir frontiere-opnsense.md). L'échec ne peut donc
pas se présenter comme un « connection refused » franc : il se manifeste plus tard, au moment
où le serveur devrait annoncer sa bannière SSH. D'où un message qui parle de délai réseau pour
un hôte qui, souvent, n'a jamais rien reçu.
Les trois causes, par fréquence :
- La VM n'est pas encore là.
make creer-vmrend la main dès que Proxmox a démarré la VM, pas quand elle répond. C'est le cas normal, quotidien, et aucun correctif ne l'abolira : les attentes actives duMakefileexistent pour ça. sshdrefuse une rafale.MaxStartups/MaxSessionstrop serrés coupent des connexions parfaitement légitimes — deux déploiements interrompus le 2026-08-09, sur des hôtes qui n'avaient ni redémarré ni perdu leur réseau. Réglés parssh_hardening_max_startups(10:30:60) etssh_hardening_max_sessions(10), avec l'arbitrage expliqué dansroles/ssh_hardening/defaults/main.yml.- Le réseau, vraiment — le cas le plus rare, et le dernier à examiner.
Ce qui tranche, dans l'ordre :
make hote-afficher HOTE=<nom> # l'hôte existe-t-il au plan ?
ssh -v ansible@<ip> 2>&1 | tail -20 # où la négociation s'arrête exactement
Une bannière (SSH-2.0-OpenSSH…) prouve que le chemin est bon et que le problème est
applicatif. Aucun connect() ne prouvera quoi que ce soit ici — il réussit vers le vide.
4. Brander une instance Forgejo (identité visuelle)
Activer dans l'inventaire (group_vars serveur_forgejo) :
serveur_forgejo_branding: true
serveur_forgejo_app_name: "Forge Chezlepro"
serveur_forgejo_theme: "forgejo-dark"
serveur_forgejo_meta_description: "…"
Puis redéployer. Le rôle déploie le dossier custom/ officiel (logo/favicon aurore, accent CSS par
variables, page d'accueil brandée) — léger, résistant aux MAJ (aucune classe interne touchée).
Note : ne s'applique qu'aux Forgejo gérées par Set-OPS.