Set-OPS-Public/roles/serveur_icinga/templates/setops-api-users.conf.j2
Daniel Allaire b1c4775afe sauvegardes : un controle hebdomadaire de restauration, rapporte a Icinga
restic check en relisant 10 pourcent des donnees, puis restauration reelle du
dernier instantane avec --verify et comptage des fichiers. Service restauration,
fraicheur de 8 jours, filtre du compte d API complete.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 17:04:28 -04:00

49 lines
2.7 KiB
Django/Jinja

/*
* Gere par Set-OPS (role serveur_icinga). Ne pas editer a la main.
*
* Compte d'API par lequel un NOEUD depose ses resultats passifs.
*
* IL S'APPELLE ENCORE `setops-depot` (2026-09-09) : il servait d'abord au seul rapport de
* sauvegarde. Il porte desormais aussi le rapport de SANTE — un second compte serait plus
* pur, un secret par usage, mais exigerait une clef de voute de plus dans chaque
* ecosysteme, donc un geste manuel a chaque nouvel ecosysteme, pour une portee identique.
* Le renommer churnerait les voutes sans rien gagner. Le filtre ci-dessous reste etroit :
* trois noms de service, et aucun autre pouvoir.
* Portee minimale : uniquement `actions/process-check-result`, et uniquement sur les
* services de sauvegarde. Ce compte ne peut ni lire la configuration, ni agir ailleurs.
*/
object ApiUser "{{ serveur_icinga_api_utilisateur }}" {
password = "{{ serveur_icinga_api_motdepasse }}"
permissions = [
{
permission = "actions/process-check-result"
{#
DEUX FORMES DE NOM, PARCE QU'IL Y A DEUX MODELES (2026-09-02).
« sauvegarde: <noeud> » — l'ecosysteme a son propre depot, qui rapporte pour
tout le monde : les services vivent sur SON hote, le nom doit donc dire de quel
noeud on parle.
« sauvegarde » — l'ecosysteme depose chez son hebergeur, qui heberge du chiffre
et ne peut rien juger. Chaque noeud verifie le sien : le service vit SUR LUI, et
repeter son nom donnerait « idm-01 / sauvegarde: idm-01 ».
Le filtre n'acceptait que la premiere forme. Les noeuds recevaient
`{"error":404,"status":"No objects found."}` — le message d'un objet ABSENT,
alors qu'il existait et que c'etait la PERMISSION qui refusait. Une heure a
chercher un objet qui etait la.
La portee reste etroite : ce compte ne peut poser un resultat que sur un service
de sauvegarde, jamais ailleurs.
#}
{#
LES NOMS SONT DERIVES, PAS RECOPIES. Une sonde declaree par un role entre dans ce
filtre toute seule ; une sonde retiree en sort. Recopier la liste ici, c'etait la
garantie qu'un jour elle divergerait — et le symptome serait un 404 « No objects
found » sur un objet qui existe, comme le 2026-09-02. Une heure perdue.
La portee reste etroite : des NOMS, jamais un joker.
#}
filter = {{ '{{' }} match("sauvegarde: *", service.name) || service.name == "sauvegarde" || service.name == "restauration" || service.name == "sante"{% for role, sondes in (serveur_icinga_sondes | default({})) | dictsort %}{% for s in sondes %} || service.name == "{{ s.nom }}"{% endfor %}{% endfor %} {{ '}}' }}
}
]
}