Set-OPS-Public/roles/serveur_grafana/defaults/main.yml

80 lines
4.5 KiB
YAML
Raw Normal View History

---
serveur_grafana_paquets:
- grafana
serveur_grafana_service: "grafana-server"
serveur_grafana_port: 3000
# Publication (derriere serveur_nginx, TLS termine a l'edge).
serveur_grafana_hostname: "grafana.{{ domaine_interne }}"
serveur_grafana_root_url: "https://{{ serveur_grafana_hostname }}/"
# Datasources (Prometheus + Loki, co-localises sur obs-01).
serveur_grafana_prometheus_url: "http://localhost:9090"
serveur_grafana_loki_url: "http://localhost:3100"
# Dashboards provisionnés (fichiers) — répertoire lu par le provider Grafana.
serveur_grafana_dashboards_dir: "/var/lib/grafana/dashboards"
# Secret OBLIGATOIRE (Ansible Vault).
serveur_grafana_admin_password: "{{ vault_grafana_admin | default('') }}" # rempli depuis la voute (vault_grafana_admin)
authentification : SSO Keycloak devant, secours par sudo, formulaire local fermé Directive : toute authentification web passe par Keycloak, LDAP est la source unique des comptes, chaque service garde un accès de secours par sudo sur l'hôte. Les trois sont indissociables — la chaîne service → Keycloak → LDAP est en série, donc sans secours une panne exclut tout le monde, y compris pour réparer. Portée : le web seulement ; IMAP/SMTP se lient à LDAP directement et SSH est en clé seule. Posture <rôle>_connexion_locale, false par défaut. Le compte local existe — il ne peut pas dépendre de Keycloak — mais son formulaire n'est plus proposé au repos : ouvert en permanence, il contourne la politique de mot de passe, le MFA et surtout la révocation centrale. Vérifié auprès de l'amont, puis par rendu réel des gabarits dans les deux postures : - Grafana GF_AUTH_DISABLE_LOGIN_FORM → ferme ; - Forgejo ENABLE_INTERNAL_SIGNIN + ENABLE_BASIC_AUTHENTICATION → ferme, API Basic comprise. N'existe que depuis la v10 (ticket amont 7476) ; le rôle épingle 10.0.0 et un assert refuse la fermeture en deçà, car le réglage serait ignoré sans erreur ; - Nextcloud hide_login_form → MASQUE seulement : ?direct=1 reste le chemin de secours documenté par l'amont. Écrit comme tel, sans prétendre à l'équivalence. Défaut attrapé par le rendu : la condition Forgejo sans `| bool` n'émettait rien dans aucune posture — une valeur en chaîne est vraie au sens Jinja, la connexion locale serait restée ouverte en silence. docs/authentification.md, décisions D-38 à D-41. ansible-lint (production) sans échec, 28 preuves OK. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 16:50:36 -04:00
# --- Connexion locale (accès de secours) ---
# `false` = le formulaire identifiant/mot de passe n'est PAS proposé au repos ; le SSO
# Keycloak est le seul chemin annoncé. Le compte local continue d'exister : on l'atteint
# par `sudo` sur l'hôte (voir docs/authentification.md), qui est le mécanisme de secours
# retenu. Une porte de connexion ouverte en permanence contournerait la politique de mot
# de passe, le MFA et surtout la révocation centrale — désactiver quelqu'un dans LDAP
# laisserait le compte local valide, sans que rien ne le signale.
serveur_grafana_connexion_locale: false
# --- SSO OIDC (Keycloak, realm applicatif) ---
# « Se connecter avec <organisation> » : Grafana délègue l'auth à Keycloak (client confidentiel).
# Requiert client_pki sur ce nœud (confiance step_ca pour les appels serveur→Keycloak) +
# résolution de l'hôte Keycloak (edge). Le client OIDC doit exister dans le realm.
serveur_grafana_oidc_actif: true
serveur_grafana_oidc_nom: "{{ organisation | default('Organisation') }}"
serveur_grafana_oidc_client_id: "grafana"
serveur_grafana_oidc_client_secret: "{{ vault_grafana_oidc | default('') }}" # voûte (vault_grafana_oidc)
serveur_grafana_oidc_realm: "{{ identite_realm | default('chezlepro') }}"
# DERIVE de l'exposition declaree au plan (role `resoudre_idp`) ; repli seulement.
serveur_grafana_oidc_repli: >-
https://keycloak.{{ domaine_interne }}/realms/{{ serveur_grafana_oidc_realm }}
serveur_grafana_oidc_base: >-
{{ (resoudre_idp_base | default(serveur_grafana_oidc_repli)) }}/protocol/openid-connect
serveur_grafana_oidc_scopes: "openid email profile"
# RBAC via SSO : mappe le claim 'roles' (rôles de realm Keycloak) vers le niveau Grafana.
# Défaut : grafana-admin→Admin, grafana-editor→Editor, sinon Viewer. Vider pour désactiver.
serveur_grafana_oidc_role_path: "contains(roles[*], 'grafana-admin') && 'Admin' || contains(roles[*], 'grafana-editor') && 'Editor' || 'Viewer'"
# Depot apt officiel Grafana (partage avec serveur_loki).
les depots tiers passent par le cache, et le tenant n a plus le sien Deux mouvements d une seule doctrine : le site fournit tout ce dont un tenant a besoin pour venir au monde. 1. LES DEPOTS TIERS. Grafana, Icinga, Smallstep et Collabora ne publient qu en HTTPS ; apt-cacher-ng ne relaie pas un tunnel, et le socle pose donc Acquire::https::Proxy DIRECT. Chaque machine sortait elle-meme sur Internet. Le cache declare desormais un Remap par fournisseur, et chaque role demande en {{ ..._depot_schema }}:// - http des qu un cache est declare, https sinon. Le TLS n est rompu nulle part : il est TERMINE au cache, qui est notre machine, et l integrite vient des signatures. avant : 4 fournisseurs en HTTPS direct, 14 machines sortant seules apres : 0 source en HTTPS direct, 0 erreur apt sur 14 machines Trois lecons. Le remap appartient au cache qui SORT : pose sur un cache chaine, il tente le HTTPS a travers son amont et rend 503. apt_repository AJOUTE au lieu de remplacer, donc l ancienne ligne https sortait toujours. Et la liste des fournisseurs ne se devine pas - j en avais trois, l audit en a revele un quatrieme. 2. LE CACHE DU TENANT. Sa ligne portait son propre retrait depuis toujours - service MUTUALISABLE, un ecosysteme au premier age peut pointer sur celui de son hote. Retiree. Ce qu on perd, dit franchement : plus de trafic inter-zone et plus de charge sur site-cache-01, contre un service de moins a poser, superviser et reproduire. 3. UN ROLE QU ON RETIRE DOIT DEFAIRE CE QU IL A FAIT. Le retrait a montre que rien ne nettoie derriere. Le fichier apt visait un cache eteint en ecrasant le plancher qui fonctionnait - le defaut deja paye a quinze machines. Et les sondes du cache restaient, le porteur poussant pour des services qu Icinga ne definit plus (404). Le socle retire le premier, client_sante derive les sondes attendues et retire les orphelines. P65 refuse tout role visant un depot relaye en https ecrit en dur. Sa limite est dite : elle empeche une regression sur ce qui est connu, elle ne decouvre pas l inconnu. Mesure : Icinga 87 OK sur 96, prouver 65 OK, lint 0 defaut. Reste, et c est dit : apt-cacher-ng tourne toujours sur forge-01 que plus aucun plan ne declare. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 14:53:48 -04:00
serveur_grafana_depot_cle_url: "{{ serveur_grafana_depot_schema }}://apt.grafana.com/gpg-full.key"
serveur_grafana_depot_cle_fichier: "/etc/apt/keyrings/grafana.asc"
les depots tiers passent par le cache, et le tenant n a plus le sien Deux mouvements d une seule doctrine : le site fournit tout ce dont un tenant a besoin pour venir au monde. 1. LES DEPOTS TIERS. Grafana, Icinga, Smallstep et Collabora ne publient qu en HTTPS ; apt-cacher-ng ne relaie pas un tunnel, et le socle pose donc Acquire::https::Proxy DIRECT. Chaque machine sortait elle-meme sur Internet. Le cache declare desormais un Remap par fournisseur, et chaque role demande en {{ ..._depot_schema }}:// - http des qu un cache est declare, https sinon. Le TLS n est rompu nulle part : il est TERMINE au cache, qui est notre machine, et l integrite vient des signatures. avant : 4 fournisseurs en HTTPS direct, 14 machines sortant seules apres : 0 source en HTTPS direct, 0 erreur apt sur 14 machines Trois lecons. Le remap appartient au cache qui SORT : pose sur un cache chaine, il tente le HTTPS a travers son amont et rend 503. apt_repository AJOUTE au lieu de remplacer, donc l ancienne ligne https sortait toujours. Et la liste des fournisseurs ne se devine pas - j en avais trois, l audit en a revele un quatrieme. 2. LE CACHE DU TENANT. Sa ligne portait son propre retrait depuis toujours - service MUTUALISABLE, un ecosysteme au premier age peut pointer sur celui de son hote. Retiree. Ce qu on perd, dit franchement : plus de trafic inter-zone et plus de charge sur site-cache-01, contre un service de moins a poser, superviser et reproduire. 3. UN ROLE QU ON RETIRE DOIT DEFAIRE CE QU IL A FAIT. Le retrait a montre que rien ne nettoie derriere. Le fichier apt visait un cache eteint en ecrasant le plancher qui fonctionnait - le defaut deja paye a quinze machines. Et les sondes du cache restaient, le porteur poussant pour des services qu Icinga ne definit plus (404). Le socle retire le premier, client_sante derive les sondes attendues et retire les orphelines. P65 refuse tout role visant un depot relaye en https ecrit en dur. Sa limite est dite : elle empeche une regression sur ce qui est connu, elle ne decouvre pas l inconnu. Mesure : Icinga 87 OK sur 96, prouver 65 OK, lint 0 defaut. Reste, et c est dit : apt-cacher-ng tourne toujours sur forge-01 que plus aucun plan ne declare. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 14:53:48 -04:00
serveur_grafana_depot_source: "deb [signed-by=/etc/apt/keyrings/grafana.asc] {{ serveur_grafana_depot_schema }}://apt.grafana.com stable main"
# Empreinte du mot de passe admin APPLIQUE — permet la rotation sans lire le secret
# en place (impossible : il est hache). Voir tasks/main.yml.
serveur_grafana_marqueur_admin: "/etc/grafana/.setops-admin-sha256"
# Chemins du paquet Debian — la CLI ne les devine pas (voir tasks/main.yml).
serveur_grafana_homepath: "/usr/share/grafana"
serveur_grafana_donnees: "/var/lib/grafana"
sondes : les six premieres, et le patron qui les rend eprouvables Ajout de meta/supervision.yml a six roles, chacun deposant sa propre sonde selon le contrat des greffons Nagios. DEUX PRINCIPES POSES AU DOCUMENT DE CONCEPTION, parce que la premiere sonde les a imposes : 1. UNE SONDE DOIT POUVOIR ETRE MISE EN DEFAUT PAR PARAMETRE. Cible et seuils sont des variables du role : on la prouve rouge avec un port ferme ou un seuil impossible, sur une machine reelle, sans rien casser, et aussi souvent qu on veut. Une sonde qu on ne peut prouver qu en cassant un service ne sera prouvee qu une fois. 2. LA SONDE VIT LA OU VIT LA VERITE. « Ce noeud est-il collecte ? » est une sonde de serveur_prometheus, pas de client_metrique : une seule y voit les N noeuds, et surtout elle voit le cas SILENCIEUX — celui qui a cesse d etre collecte ne peut pas s en plaindre. LES SIX : cache-apt (artefacts, repond + place), resolution (resolveur, zone interne ET Internet — deux chemins distincts), forge (forgejo, son propre /api/healthz), collecte (prometheus, 15/15 cibles), tableaux (grafana, base ok), ingestion (loki, PRET a ingerer, pas seulement en ecoute). TROIS FOIS J AI ECRIT LA SONDE AVANT DE MESURER, ET TROIS FOIS ELLE A EU TORT. La forge : port 443 et chemin des depots INVENTES — elle ecoute en 3000 derriere l edge et n a legitimement aucun depot. Loki : j ai conclu « panne persistante » sur deux lectures prises a quelques secondes d intervalle, juste apres un redemarrage ; l anneau etait ACTIVE et la reponse est passee a ready moins d une minute plus tard. Le delai de stabilisation est desormais un AVERTISSEMENT nomme, pas une panne. On demande au service ce qu il pense de lui-meme quand il sait le dire (healthz, /ready, /api/health) plutot que d inventer un critere de l exterieur. make prouver : CONFORME. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 02:48:55 -04:00
# --- Sonde de supervision -----------------------------------------------------------
serveur_grafana_sonde_url: "http://127.0.0.1:{{ serveur_grafana_port }}"
les depots tiers passent par le cache, et le tenant n a plus le sien Deux mouvements d une seule doctrine : le site fournit tout ce dont un tenant a besoin pour venir au monde. 1. LES DEPOTS TIERS. Grafana, Icinga, Smallstep et Collabora ne publient qu en HTTPS ; apt-cacher-ng ne relaie pas un tunnel, et le socle pose donc Acquire::https::Proxy DIRECT. Chaque machine sortait elle-meme sur Internet. Le cache declare desormais un Remap par fournisseur, et chaque role demande en {{ ..._depot_schema }}:// - http des qu un cache est declare, https sinon. Le TLS n est rompu nulle part : il est TERMINE au cache, qui est notre machine, et l integrite vient des signatures. avant : 4 fournisseurs en HTTPS direct, 14 machines sortant seules apres : 0 source en HTTPS direct, 0 erreur apt sur 14 machines Trois lecons. Le remap appartient au cache qui SORT : pose sur un cache chaine, il tente le HTTPS a travers son amont et rend 503. apt_repository AJOUTE au lieu de remplacer, donc l ancienne ligne https sortait toujours. Et la liste des fournisseurs ne se devine pas - j en avais trois, l audit en a revele un quatrieme. 2. LE CACHE DU TENANT. Sa ligne portait son propre retrait depuis toujours - service MUTUALISABLE, un ecosysteme au premier age peut pointer sur celui de son hote. Retiree. Ce qu on perd, dit franchement : plus de trafic inter-zone et plus de charge sur site-cache-01, contre un service de moins a poser, superviser et reproduire. 3. UN ROLE QU ON RETIRE DOIT DEFAIRE CE QU IL A FAIT. Le retrait a montre que rien ne nettoie derriere. Le fichier apt visait un cache eteint en ecrasant le plancher qui fonctionnait - le defaut deja paye a quinze machines. Et les sondes du cache restaient, le porteur poussant pour des services qu Icinga ne definit plus (404). Le socle retire le premier, client_sante derive les sondes attendues et retire les orphelines. P65 refuse tout role visant un depot relaye en https ecrit en dur. Sa limite est dite : elle empeche une regression sur ce qui est connu, elle ne decouvre pas l inconnu. Mesure : Icinga 87 OK sur 96, prouver 65 OK, lint 0 defaut. Reste, et c est dit : apt-cacher-ng tourne toujours sur forge-01 que plus aucun plan ne declare. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 14:53:48 -04:00
# --- SCHEMA DES DEPOTS TIERS (2026-09-10) --------------------------------------------
#
# `http` DES QU'UN CACHE EST DANS LE CHEMIN, `https` sinon. Ce n'est pas un relachement :
# le cache RELAIE ces depots en https vers le fournisseur (voir `serveur_artefacts`,
# `Remap-*`), et l'integrite vient des SIGNATURES du depot, qu'apt verifie de toute facon.
# Le meme raisonnement vaut deja pour `deb.debian.org` depuis toujours.
#
# Sans cette derivation, chaque machine sortait elle-meme sur Internet : le mandataire ne
# vaut que pour `http`, et le socle pose deliberement `Acquire::https::Proxy "DIRECT"`
# parce qu'un cache sans remap refuse les tunnels. Le remap leve ce refus ; encore
# faut-il DEMANDER en http.
#
# DEGRADE, JAMAIS DEVINE : pas de cache d'amorcage declare, pas de reecriture.
serveur_grafana_depot_schema: >-
{{ 'http' if (artefacts_amorcage | default('') | string | length > 0) else 'https' }}