Aunque desde la versión 7 de ELK el módulo X-Pack permite configurar autenticación de usuarios para el stack securizando entre ellos la capa de presentación en Kibana, normalmente no la expondremos directamente al exterior sino que accederemos a través de un frontal web.
Similar a la opción que vimos con Grafana hace tiempo, podemos utilizar Apache o Nginx. Además los servidores web nos permitirán añadir más capas de seguridad si lo deseamos como basic auth, certificado de cliente o filtro de IP de origen entre otros.
Frontal Apache
Si vamos a utilizar Apache, un ejemplo sería la siguiente configuración que añade verificación con certificado de cliente para el contexto /kibana
que más tarde redirigimos a nuestra instancia local de Kibana:
... <Location /kibana> SSLVerifyClient require SSLVerifyDepth 3 SSLRequire %{SSL_CLIENT_I_DN_C} eq "ES" and \ %{SSL_CLIENT_I_DN_O} eq "MyCorp" and \ %{SSL_CLIENT_S_DN_CN} eq "mail@example.com" and \ %{SSL_CLIENT_S_DN_Email} eq "mail@example.com" </Location> ProxyPass /kibana http://localhost:5601 ProxyPassReverse /kibana http://localhost:5601 ...
Otro ejemplo con basic auth y restringiendo el acceso sólo a la red 192.168.1.0/24
:
... <Location /kibana> Require ip 192.168.1.0/24 AuthType Basic AuthName "Kibana Basic Auth Files" AuthBasicProvider file AuthUserFile "/etc/apache2/.htpasswd" </Location> ProxyPass /kibana http://localhost:5601 ProxyPassReverse /kibana http://localhost:5601 ...
Frontal Nginx
Si utilizamos Nginx como frontal, una configuración válida también con certificado de cliente podría ser:
... # SSL Client Cert ssl_client_certificate /etc/nginx/ssl/client-jota-ca-chain.pem; ssl_verify_client on; location /kibana { if ($ssl_client_verify != SUCCESS) { return 403; } proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } ...
Otro ejemplo con autenticación básica y restricción por IP de origen permitiendo sólo la red 192.168.1.2/24:
... location /kibana { satisfy all; allow 192.168.1.0/24; deny all; auth_basic “Kibana Basic Auth”; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } ...
Configuración Kibana
Tanto si elegimos Apache como Nginx como frontales, en /etc/kibana/kibana.yml
añadimos el contexto de aplicación del que estemos haciendo proxy desde los frontales, en este caso /kibana
:
server.basePath: "/kibana"
Y ya podremos acceder desde nuestro dominio con alguna capa más de seguridad que X-Pack si queremos.