Grafana Grafana

Configura la autenticación y el acceso mediante configuración

Configura el inicio de sesión, OAuth y el mapeo de roles en grafana.ini, y gestiona usuarios y equipos como código.

12 min Intermedio

Quién puede iniciar sesión, y con qué rol, es parte de la plataforma y pertenece al control de versiones tanto como los dashboards. La mayor parte vive en grafana.ini. El resto, como usuarios, equipos y service accounts, no tiene formato de archivo de provisioning, así que esta guía también muestra cómo gestionarlos como código. Los nombres de las opciones de abajo coinciden con la referencia de configuración de Grafana, pero verifícalos en defaults.ini de tu versión antes de confiar en ellos.

Ajustes básicos

[users]
allow_sign_up = false          # sin autorregistro
auto_assign_org = true
auto_assign_org_role = Viewer  # rol predeterminado para usuarios nuevos

[auth]
disable_login_form = false     # actívalo cuando SSO funcione y ya no necesites el formulario

[auth.anonymous]
enabled = false

Mantén allow_sign_up = false a menos que quieras deliberadamente una instancia abierta. Si habilitas el acceso anónimo, dale el rol mínimo posible:

[auth.anonymous]
enabled = true
org_role = Viewer

Inicio de sesión único con OAuth genérico

Cualquier proveedor OpenID Connect u OAuth 2 puede conectarse en el archivo. Los secretos vienen del entorno:

[server]
root_url = https://grafana.example.com/

[auth.generic_oauth]
enabled = true
name = Company SSO
allow_sign_up = true
client_id = grafana
client_secret = ${OAUTH_CLIENT_SECRET}
scopes = openid profile email groups
auth_url = https://sso.example.com/oauth2/authorize
token_url = https://sso.example.com/oauth2/token
api_url = https://sso.example.com/oauth2/userinfo
login_attribute_path = preferred_username
email_attribute_path = email
role_attribute_path = contains(groups[*], 'grafana-admins') && 'Admin' || contains(groups[*], 'grafana-editors') && 'Editor' || 'Viewer'

Qué conviene saber:

  • La URI de redirección del proveedor es <root_url>login/generic_oauth, así que root_url debe ser exacta.
  • role_attribute_path es una expresión JMESPath evaluada contra el token o el userinfo del usuario. Asigna los grupos del proveedor de identidad a roles de Grafana (Admin, Editor, Viewer), de modo que los cambios de rol ocurren en el proveedor de identidad, no en Grafana.
  • allow_sign_up aquí significa “crear un usuario de Grafana en el primer inicio de sesión SSO”, que es lo que quieres incluso cuando [users] allow_sign_up es false.
  • Existen secciones dedicadas para los proveedores comunes ([auth.github], [auth.google], [auth.azuread], [auth.gitlab] y otros), y SAML y LDAP están disponibles en Grafana Enterprise y Grafana Cloud. LDAP además lee un archivo aparte ldap.toml.

Una vez que SSO funcione, define disable_login_form = true y conserva la cuenta de admin solo como opción de emergencia, o deja el formulario habilitado pero protégelo con reglas de red.

Roles y lo que los archivos no pueden definir

Grafana tiene roles de organización (Admin, Editor, Viewer), y RBAC añade roles de grano fino en Enterprise y Cloud. Estos recursos no tienen formato de archivo de provisioning en Grafana de código abierto:

RecursoCómo gestionarlo como código
UsuariosCrear mediante SSO, o la Admin API en un script de bootstrap
Equipos y pertenencia a equiposTerraform (grafana_team), la API o la sincronización de equipos desde el proveedor de identidad
OrganizacionesTerraform (grafana_organization) o la API
Service accounts y tokensTerraform (grafana_service_account, grafana_service_account_token) o la API
Permisos de carpetas y dashboardsTerraform (grafana_folder_permission, grafana_dashboard_permission), el Operator o la API

La guía de Terraform muestra el patrón. Para una configuración pequeña, una alternativa razonable es un script puntual que llame a la API HTTP con una credencial de admin, guardado en el repositorio y ejecutado en CI.

Crea service accounts para la automatización

Herramientas como Terraform, el Operator y el CI necesitan una identidad no humana. Crea una service account una vez, con el rol más bajo que funcione, y guarda su token como secreto:

# crea la service account (Admin API, autenticación básica)
curl -s -X POST -u admin:$GRAFANA_ADMIN_PASSWORD \
  -H 'Content-Type: application/json' \
  -d '{"name":"terraform","role":"Admin"}' \
  http://localhost:3000/api/serviceaccounts

# crea un token para ella, usando el id devuelto arriba
curl -s -X POST -u admin:$GRAFANA_ADMIN_PASSWORD \
  -H 'Content-Type: application/json' \
  -d '{"name":"terraform-token"}' \
  http://localhost:3000/api/serviceaccounts/<id>/tokens

El token se muestra una sola vez. Colócalo directamente en tu almacén de secretos, y define una caducidad o rótalo según un calendario.

Ajustes de hardening que vale la pena versionar

[security]
cookie_secure = true
cookie_samesite = lax
disable_gravatar = true
allow_embedding = false

[auth]
login_maximum_lifetime_duration = 30d
login_maximum_inactive_lifetime_duration = 7d

Revísalos cuando actualices, y mantenlos idénticos entre entornos excepto donde un valor difiera genuinamente, como root_url.

Verifica sin la interfaz

curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/admin/settings | jq '."auth.generic_oauth" | {enabled, name}'
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/users | jq '.[] | {login, isAdmin}'
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/teams/search | jq '.teams[].name'

Para la lista completa de opciones por proveedor, consulta la documentación de autenticación de Grafana.

Guías populares