Icinga ne surveillait rien : aucun objet Host ni Service de Set-OPS, seulement
la config Debian d'origine sur localhost.
Superviser setops-sauvegarde.service aurait reproduit le defaut du jour meme :
l'unite etait VERTE sur onze noeuds pendant qu'elle n'emportait rien. Le noeud
sait qu'il a LANCE sa sauvegarde, pas qu'elle est ARRIVEE. backup-01 evalue donc
ses depots et pousse un resultat passif par noeud vers l'API Icinga.
Trois criteres, parce qu'un seul suffit a mentir : l'instantane existe, il est
recent (26 h / 50 h), il contient au moins un fichier.
Le sens du flux est delibere : le depot parle a la supervision, jamais l'inverse
— compromettre mon-01 ne donne aucun acces aux sauvegardes.
Le ttl de 6 h fait la fraicheur : si le rapporteur se tait, Icinga perime les
services tout seul. C'est le silence qui a laisse le defaut vivre un mois.
Deux erreurs corrigees par la mesure :
- --data-urlencode refuse en Bad Request (l'API veut du JSON) ; le flux, le TLS
et l'auth marchaient, seule la charge etait perdue.
- le seuil « vide » en octets signalait a tort idm-01 (2363 o) : un export LDIF
d'un annuaire a un compte pese cela. « Vide » se mesure en FICHIERS. Et le
verdict est un AVERTISSEMENT : la machine ne distingue pas « les donnees ont
disparu » de « il n'y en a pas encore ».
Reserve assumee : curl -k — l'API presente le cert de sa propre AC, pas step-ca.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| defaults | ||
| handlers | ||
| meta | ||
| tasks | ||
| templates | ||
| vars | ||
| README.md | ||
client_backup
Intégration cliente sauvegarde : le nœud pousse ses données (pas sa VM) vers le dépôt
restic hors-nœud (serveur_backup), chiffrées côté client, sur un timer systemd.
Principe
L'infrastructure est reconstructible par le code (make reconstruire). Ce qui ne se
reconstruit pas, c'est l'état : clés de l'AC, annuaire, bases, courrier, dépôts Git.
C'est cet état — et lui seul — que ce rôle sauvegarde.
Rôle
- Installe
restic. - Dépose la clé SSH privée de sauvegarde et le mot de passe restic dans
/etc/setops(0600), depuis la voûte. - Configure l'accès SSH vers la cible (utilisateur restreint
restic). - Déploie
sauvegarder.sh+ l'unité et le timer systemd, et l'active.
Jobs déclaratifs
Chaque nœud déclare ses client_backup_jobs (en group_vars/host_vars) :
client_backup_jobs:
- nom: step_ca
chemins: [/etc/step-ca]
- nom: postgresql
commande: "sudo -u postgres pg_dumpall > /var/backups/setops/postgresql/all.sql"
chemins: [/var/backups/setops/postgresql]
Le script exécute, dans l'ordre : les commande (dumps vers le staging) → restic init
si le dépôt est neuf → restic backup de tous les chemins → restic forget --prune
(rétention).
Secrets requis (Vault)
vault_restic_password # mot de passe du dépôt restic (le chiffrement)
vault_backup_ssh_privkey # clé privée SSH vers la cible (publique côté serveur_backup)
Sans eux, le rôle refuse de s'exécuter (assertion).
Variables principales
| Variable | Défaut | Rôle |
|---|---|---|
client_backup_cible |
backup-01.{{ domaine_interne }} |
Nœud dépôt |
client_backup_repo |
sftp:restic@<cible>:<hôte> |
Un sous-dossier par nœud |
client_backup_staging |
/var/backups/setops |
Préparation des dumps |
client_backup_retention |
--keep-daily 7 --keep-weekly 4 --keep-monthly 6 |
restic forget |
client_backup_horaire |
*-*-* 02:30:00 |
Timer systemd |
client_backup_jobs |
[] |
À déclarer par nœud |
Notes / limites
- Chiffrement côté client : la cible ne voit que des blocs chiffrés — elle n'a donc pas besoin d'être aussi protégée que les sources.
client_backup_jobs: []= le timer tourne mais ne sauvegarde rien. C'est silencieux : vérifier que chaque nœud porteur d'état déclare ses jobs.- Un dépôt neuf est vide jusqu'à la première exécution : après une reconstruction from-zero, déclencher une première sauvegarde plutôt que d'attendre 02:30.
- Restauration :
restic restoreavec le même mot de passe (cf.docs/runbooks-exploitation.md).
Prérequis
serveur_backupdéployé, et saserveur_backup_pubkeycorrespondant à la clé privée de la voûte. Couche agents (après les services).