En corto
| |
Eso te lleva al formulario de usuario y contraseña aunque auto_login = true te esté redirigiendo al proveedor OAuth. Si además no recuerdas la contraseña del admin local:
| |
Y si el formulario está desactivado ([auth] disable_login_form = true), primero GF_AUTH_DISABLE_LOGIN_FORM=false en el entorno y reinicia.
Roles que se deshacen solos
Le das Editor a alguien en Administration → Users, y al día siguiente vuelve a ser Viewer. No es un bug: en cada login OAuth Grafana sincroniza el rol de la organización con lo que diga el proveedor (o con auto_assign_org_role si el proveedor no dice nada) y pisa lo que pusiste a mano.
Dos formas de vivir con ello:
1. Que el proveedor mande de verdad. Mapea grupos o claims a roles con JMESPath y haz que sea estricto, para que un usuario sin grupo no entre como Viewer por defecto:
| |
2. Que Grafana no toque los roles. Si prefieres gestionarlos en la UI:
| |
skip_org_role_sync va por proveedor (auth.github, auth.google, auth.generic_oauth, auth.azuread, auth.okta, auth.gitlab, SAML). El antiguo interruptor global [auth] oauth_skip_org_role_update_sync está obsoleto; si todavía lo tienes en el .ini, cámbialo por el de cada proveedor.
Con Google, hosted_domain y allowed_domains limitan quién puede entrar; sin role_attribute_path todos entran con auto_assign_org_role (Viewer por defecto).
Datasources aprovisionados
Los datasources definidos en provisioning/datasources/*.yaml (en el chart de Helm, datasources.datasources.yaml) tienen tres propiedades que sorprenden:
- No se editan en la UI si llevan
editable: false: el formulario aparece bloqueado. Es lo correcto en producción; el cambio va en el YAML. - Los secretos van en
secureJsonData, no enjsonData: Grafana los cifra consecret_keyantes de guardarlos en su base de datos (/var/lib/grafana/grafana.db, SQLite por defecto) y no los devuelve por la API. Tokens, contraseñas y certificados de cliente van ahí; enjsonDataquedan en claro. - No desaparecen al quitarlos del YAML. Grafana solo inserta y actualiza; para borrar hay que decirlo:
| |
Las variables de entorno se expanden con $VAR o ${VAR}; un $ literal en un secreto se escribe $$.
Trampas
auto_logincon varios proveedores se ignora: solo funciona con uno configurado para auto-login.allow_sign_up = falsedeja fuera a cualquier usuario nuevo del proveedor, incluido el que acabas de dar de alta en el grupo; el error en el log es “user signup disabled”.role_attribute_strict = truesin grupo mapeado rechaza el login con “Role attribute not found”; es lo que quieres, pero avisa a la gente.- El admin local sigue existiendo con SSO: cámbiale la contraseña y guárdala en el gestor de secretos, es tu puerta de emergencia junto con
disableAutoLogin. secret_keypor defecto (SW2YcwTIb9zpOOhoPsMm) cifra lossecureJsonDatade cualquier Grafana igual; ponle el tuyo ([security] secret_key) antes de aprovisionar nada, porque cambiarlo después invalida lo cifrado.
Referencias: Configure authentication y Provisioning en la documentación de Grafana.
Ver también
- Proxmox con Keycloak (OpenID) — el mismo patrón de SSO, con Keycloak como proveedor.