Cómo ejecutar Grafana en Docker con Google SSO

El objetivo de este laboratorio es aprender cómo configurar la autenticación de SSO de Google en Grafana y también demostrar cuan rápido podemos activar una nueva instancia de Grafana usando el contenedor oficial de docker (no es necesario crear imágenes personalizadas). Si lo que buscas es cómo configurar la autenticación LDAP puedes echar un vistazo a este otro post.

En Geko decidimos implementar SSO en la mayoría de nuestros servicios internos, ya que ya trabajamos con cuentas Gsuite, por lo que era el camino obvio. De todos modos, puedes mantener funcional la administración de usuarios predeterminada si aún deseas usarla.

El uso de SSO también nos hace mucho más fácil las nuevas incorporaciones en nuestro equipo, ya que pueden registrarse directamente y solo tenemos que establecer roles para ellos. Incluso para nuestros clientes, y les podemos permitir que sus dominios establezcan cuentas para ellos, si es necesario.

Tiempo estimado para terminar este laboratorio: 20-30 minutos.

Setup Google Cloud account

Para configurar SSO, necesitamos crear algunas credenciales en Google Cloud. Si no tiene un proyecto creado en GCP, deberás crear uno: https://console.cloud.google.com

GCP New Project

Pantalla de consentimiento Oauth

La pantalla de consentimiento es lo que los usuarios verán cuando intenten iniciar sesión en su aplicación (Grafana). Puedes usar este enlace para llegar a la configuración: https://console.cloud.google.com/apis/credentials/consent/edit?

Aquí podemos establecer algunos parámetros para personalizar la pantalla de consentimiento. Vamos a establecer los siguientes valores para este laboratorio:

  • Application name: Grafana
  • Support email: Tu correo electrónico o cualquier correo asociado a tu cuenta
  • Authorized domains: Estos son los dominios contra los cuales los usuarios podrán autenticarse. Por lo general, se usará el nombre de dominio de la organización, pero es posible que también estés interesado en permitir otros.

Como puedes ver, la configuración es bastante sencilla. Si deseas establecer cualquier otro parámetro, siéntete libre, depende de como lo quieras configurar tu.

Crear credenciales

Ahora configuraremos las credenciales que se utilizarán en Grafana para autenticarse en nuestro proyecto Google Cloud: https://console.cloud.google.com/apis/credentials?

  • Haz clic en «CREATE CREDENTIALS» y luego en «Oauth Client ID».
  • Selecciona «Web application», establece el nombre en «Grafana» y haga clic en «Create»

A continuación aparece un popup con la información siguiente:

GCP Oauth2 client created

Warning! Guarda tu ID de cliente y el secret client en un lugar seguro.

Setup Grafana

Supongo que ya tienes el servicio de configuración docker en tu máquina local. Si no lo has hecho, empieza aquí: https://docs.docker.com/get-docker/

Persistent volume

Incluso si usamos Docker querremos tener datos persistentes para que cualquier modificación en la configuración o paneles no se pierda, incluso si eliminamos el contenedor. Esto hace que las actualizaciones a versiones más nuevas sean realmente fáciles y menos dolorosas. Así que adelante y crea un volume para Grafana:

docker volume create grafana-data

Prepara los argumentos para configurar Grafana

Vamos a darle una vuelta al contenedor de Grafana usando algunas variables de entorno para configurar Grafana. Aquí describiremos para qué es cada uno:

  • GF_SECURITY_ADMIN_PASSWORD: Strong random password Contraseña aleatoria segura
  • GF_SERVER_ROOT_URL:  Configura esto si deseas anular la raíz del servidor. De lo contrario, puedes eliminar este parámetro. Es útil si ejecutas Grafana detrás de un proxy inverso (por ejemplo, nginx) y necesita acceder a una url específica.
  • GF_AUTH_GOOGLE_ENABLED:  Habilita el SSO de Google
  • GF_AUTH_GOOGLE_AUTH_URL: Auto explicativo
  • GF_AUTH_GOOGLE_TOKEN_URL: Auto explicativo
  • GF_AUTH_GOOGLE_CLIENT_SECRET: Secret client que se obtiene cuando creamos las credenciales en GCP
  • GF_AUTH_GOOGLE_CLIENT_ID: ID de cliente que se obtiene cuando creamos las credenciales en GCP
  • GF_ALLOWED_DOMAINS:  El dominio de tu empresa y todos los demás dominios a los que quieres otorgar acceso (por ejemplo, tus clientes)

Por supuesto, podemos establecer todos estos parámetros en grafana.ini en lugar de usar variables de entorno, es de tu elección el método que quieres usar.

Inicia el contenedor Grafana con nuestros argumentos personalizados

Ahora podemos girar el contenedor. Ten en cuenta que estamos asignando el puerto Grafana a nuestro puerto host 8081:

docker run -d --rm -p 8081:3000 --name grafana 
    -e "GF_SECURITY_ADMIN_PASSWORD=<some_password>" 
    -e "GF_SERVER_ROOT_URL=http://" 
    -e "GF_AUTH_BASIC_ENABLED=<disable_default_auth>" 
    -e "GF_AUTH_GOOGLE_ENABLED=<enable_google_auth>" 
    -e "GF_AUTH_GOOGLE_AUTH_URL=https://accounts.google.com/o/oauth2/auth" 
    -e "GF_AUTH_GOOGLE_TOKEN_URL=https://accounts.google.com/o/oauth2/token" 
    -e "GF_AUTH_GOOGLE_CLIENT_SECRET=<your_client_secret>" 
    -e "GF_AUTH_GOOGLE_CLIENT_ID=<your_client_id>" 
    -e “GF_ALLOWED_DOMAINS=<your_company_domain>”
    -v grafana-storage:/var/lib/grafana 
grafana/grafana

Si todo está bien, deberías poder acceder a grafana en http: // localhost: 8081 y ver un botón para autenticarse con Google:

GrafanaSSO

 

Si intentas iniciar sesión con una cuenta de gmail que pertenece a un dominio permitido, deberías poder acceder a Grafana fácilmente.


Espero que hayas disfrutado de este post y te animo a que revises nuestro blog para leer otrosposts que puedan ser de tu interés, por ejemplo «Qué es Kubernetes?«. No dudes en contactarnos si deseas que te ayudemos en tus proyectos.

¡Nos vemos en la próxima entrada!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *