From 379af6d0ccbcd5d9982a2b8b8c7ca137dd2f5a32 Mon Sep 17 00:00:00 2001 From: chemavx Date: Wed, 22 Jul 2026 08:55:01 +0000 Subject: [PATCH] monitoring: recupera el SSO de Grafana con Authentik MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Grafana llevaba ~15 días sin SSO: ignoraba la cabecera X-authentik-username, de modo que Authentik te dejaba pasar y Grafana te pedía credenciales igual. El último acceso de akadmin (el usuario que crea auto_sign_up) es de hace 15 días. El bloque [auth.proxy] estaba en el ConfigMap vivo en abril — así consta en el export de git de aquel momento — pero el chart NUNCA lo ha generado en ninguna de sus 7 revisiones, así que era un retoque a mano que se perdió por el camino. Ahora va declarado en values y sobrevive a una reconstrucción. Aparecida al arreglarlo, otra pieza del mismo tipo: la anotación router.middlewares que engancha el forward-auth de Authentik al Ingress. Vivía sólo por el three-way merge de Helm, igual que el montaje de alerting (0501aab) y el token de Telegram (28f1631). Reconstruir el release habría dejado Grafana en internet SIN autenticación de Authentik, con sólo su formulario delante. NO se restaura disable_login_form, que sí traía la config de abril: el formulario local se queda como puerta de emergencia, con la contraseña del secret grafana-admin. Que el SSO fallara en silencio es justo lo que pasó aquí. Verificado: con la cabecera, autentica como akadmin; sin ella sigue dando 401; una petición externa a grafana.chemavx.xyz redirige (302) al authorize de Authentik; el formulario local responde 200 y la contraseña de emergencia entra; 0 errores en el arranque. Exports regenerados: el auditor deja monitoring en 2 hallazgos, ambos conocidos (una anotación del controlador y el tag de uptime-kuma, pendiente de decidir con el resto de tags flotantes). Co-Authored-By: Claude Opus 4.8 --- ...nfigmap-kube-prometheus-stack-grafana.yaml | 52 ++++++------------- ...loyment-kube-prometheus-stack-grafana.yaml | 4 +- ...ingress-kube-prometheus-stack-grafana.yaml | 1 - monitoring/values-kube-prometheus-stack.yaml | 24 +++++++++ 4 files changed, 42 insertions(+), 39 deletions(-) diff --git a/monitoring/configmap-kube-prometheus-stack-grafana.yaml b/monitoring/configmap-kube-prometheus-stack-grafana.yaml index 64920f6..5598618 100644 --- a/monitoring/configmap-kube-prometheus-stack-grafana.yaml +++ b/monitoring/configmap-kube-prometheus-stack-grafana.yaml @@ -1,44 +1,25 @@ apiVersion: v1 data: - grafana.ini: '[analytics] - + grafana.ini: | + [analytics] check_for_updates = true - - [log] - - mode = console - - [paths] - - data = /var/lib/grafana/ - - logs = /var/log/grafana - - plugins = /var/lib/grafana/plugins - - provisioning = /etc/grafana/provisioning - - [server] - - domain = grafana.chemavx.xyz - - root_url = https://grafana.chemavx.xyz - - [unified_storage] - - index_path = /var/lib/grafana-search/bleve - - [auth] - - disable_login_form = true - [auth.proxy] - + auto_sign_up = true enabled = true - header_name = X-authentik-username - - auto_sign_up = true' + header_property = username + [log] + mode = console + [paths] + data = /var/lib/grafana/ + logs = /var/log/grafana + plugins = /var/lib/grafana/plugins + provisioning = /etc/grafana/provisioning + [server] + domain = grafana.chemavx.xyz + root_url = https://grafana.chemavx.xyz + [unified_storage] + index_path = /var/lib/grafana-search/bleve kind: ConfigMap metadata: annotations: @@ -52,4 +33,3 @@ metadata: helm.sh/chart: grafana-11.5.0 name: kube-prometheus-stack-grafana namespace: monitoring - diff --git a/monitoring/deployment-kube-prometheus-stack-grafana.yaml b/monitoring/deployment-kube-prometheus-stack-grafana.yaml index c5e8731..201e0d9 100644 --- a/monitoring/deployment-kube-prometheus-stack-grafana.yaml +++ b/monitoring/deployment-kube-prometheus-stack-grafana.yaml @@ -2,7 +2,7 @@ apiVersion: apps/v1 kind: Deployment metadata: annotations: - deployment.kubernetes.io/revision: '16' + deployment.kubernetes.io/revision: '17' meta.helm.sh/release-name: kube-prometheus-stack meta.helm.sh/release-namespace: monitoring labels: @@ -29,7 +29,7 @@ spec: template: metadata: annotations: - checksum/config: b835787868e1c1e3616db22add4a94b4f3a7b8ccedf24d3e48c323334a2b023c + checksum/config: a6301dce6c406cc2f76aa94d5b1ea97e65ba7ab52b6cd5b7c57ee4787a91977a checksum/sc-dashboard-provider-config: e70bf6a851099d385178a76de9757bb0bef8299da6d8443602590e44f05fdf24 kubectl.kubernetes.io/default-container: grafana kubectl.kubernetes.io/restartedAt: '2026-07-22T08:00:01Z' diff --git a/monitoring/ingress-kube-prometheus-stack-grafana.yaml b/monitoring/ingress-kube-prometheus-stack-grafana.yaml index cb3264f..da326f1 100644 --- a/monitoring/ingress-kube-prometheus-stack-grafana.yaml +++ b/monitoring/ingress-kube-prometheus-stack-grafana.yaml @@ -32,4 +32,3 @@ spec: - hosts: - grafana.chemavx.xyz secretName: grafana-tls - diff --git a/monitoring/values-kube-prometheus-stack.yaml b/monitoring/values-kube-prometheus-stack.yaml index 6bff493..c17cefb 100644 --- a/monitoring/values-kube-prometheus-stack.yaml +++ b/monitoring/values-kube-prometheus-stack.yaml @@ -29,6 +29,14 @@ # grafana.sidecar.datasources.alertmanager.enabled. Y quitarla del fichero de # provisioning NO la borra de grafana.db: hay que provisionar el borrado con # una directiva deleteDatasources de un solo uso (se hizo y se retiró). +# rev 7 (2026-07-22): recuperado el SSO de Authentik, roto desde hace ~15 días +# (último acceso de akadmin). Grafana ignoraba la cabecera X-authentik-username +# -> Authentik te dejaba pasar y Grafana te pedía credenciales igual. El bloque +# auth.proxy existía en el ConfigMap vivo en abril (está en el export de git), +# pero el chart NUNCA lo ha generado en ninguna de sus 6 revisiones, así que +# era otro retoque a mano que se perdió por el camino. Ahora va declarado. +# Junto con él, la anotación del middleware de Traefik: tampoco la generaba el +# chart, y sin ella Grafana queda expuesta sin Authentik delante. # rev 6 (2026-07-22): grafana.envValueFrom. Mismo caso que rev 3, encontrado al # auditar el Deployment contra el render: TELEGRAM_BOT_TOKEN y TELEGRAM_CHAT_ID # estaban puestas A MANO y el chart no las generaba. El contact point de @@ -61,11 +69,27 @@ grafana: mountPath: /etc/grafana/provisioning/alerting name: grafana-alerting grafana.ini: + # SSO con Authentik. Traefik autentica en el borde con el middleware de + # abajo y reenvía X-authentik-username; esto es lo que hace que Grafana se + # fíe de esa cabecera y no vuelva a pedir credenciales. Sin este bloque el + # SSO queda a medias: Authentik te deja pasar y Grafana te enseña SU + # formulario. auto_sign_up crea el usuario (así nació akadmin). + # El formulario local se deja habilitado a propósito, como puerta de + # emergencia: la contraseña vive en el secret grafana-admin. + auth.proxy: + auto_sign_up: true + enabled: true + header_name: X-authentik-username + header_property: username server: root_url: https://grafana.chemavx.xyz ingress: annotations: cert-manager.io/cluster-issuer: letsencrypt-prod + # Sin esta anotación Grafana queda expuesta sin Authentik delante. Estaba + # puesta a mano en el Ingress vivo y el chart no la generaba: sobrevivía + # sólo por el three-way merge, como el montaje de alerting (rev 3). + traefik.ingress.kubernetes.io/router.middlewares: authentik-authentik-forward-auth@kubernetescrd traefik.ingress.kubernetes.io/router.entrypoints: websecure enabled: true hosts: