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.
