Si tienes configurado Prometheus con un Nginx Proxy como explicamos en el siguiente tutorial de abajo, podrás utilizar el paquete apache2-utils para configurar una contraseña y securizar el espacio web.

Instalar Prometheus en GNU/Linux
Prometheus es una aplicación de Código Abierto utilizada para el seguimiento y alerta de eventos. Registra las métricas en tiempo real en una base de datos temporal construida mediante el modelo de atracción HTTP, con consultas flexibles y alertas en tiempo real.

De todas formas, dentro de la configuración de Prometheus, existe la posibilidad de configurar desde la propia configuración de Prometheus una autentificación básica.

Generar una contraseña Hash

Lo primero que necesitamos para configurar la autenticación básica para Prometheus, es una contraseña hash. Básicamente es una contraseña cifrada, para no tener que poner la contraseña en texto plano en un fichero de configuración.

Hay mil cosas para hacer esto, podéis usar Python para hacer esto con el paquete python3-bcrypt o podéis usar una interfaz web (con el punto negativo que al final estás poniendo tu contraseña en Internet).

Para hacerlo con Python, podemos escribir este código:

import getpass
import bcrypt

password = getpass.getpass("password: ")
hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
print(hashed_password.decode())

Y tras ejecutarlo, nos aparecerá lo siguiente:

$ python3 gen-pass.py
password:
$2b$12$hNf2lSsxfm0.i4a.1kVpSOVyBCfIB51VRjgBUyv6kdnyTlgWj81Ay

Genera tu hash de tu contraseña segura, para más tarde será necesario.

Crea el fichero web.yml

En la instalación de Prometheus en GNU/Linux que escribimos en este blog -y que el artículo lo tenéis al principio de este- configuramos lo básico para Prometheus.

En el tutorial no tuvimos en cuenta el fichero de configuración web.yml, es por eso que lo tenemos que crear y configurar después.

Creamos el fichero y le otorgamos permisos:

# touch /etc/prometheus/web.yml
# chown prometheus.prometheus /etc/prometheus/web.yml

Dentro del fichero, tenemos que añadir el usuario con el que queremos acceder y la contraseña -que es el hash que hemos creado antes-.

De la siguiente forma:

basic_auth_users:
    admin: $2b$12$hNf2lSsxfm0.i4a.1kVpSOVyBCfIB51VRjgBUyv6kdnyTlgWj81Ay

Tras guardar el fichero, podemos usar promtool para comprobar la integridad y sintaxis del fichero de configuración:

# promtool check web-config /etc/prometheus/web.yml
web.yml SUCCESS

Configurar el servicio de SystemD

A continuación, tendremos que modificar el fichero de configuración de SystemD para que tenga en cuenta el nuevo fichero que hemos creado.

Para ello, editamos el fichero /etc/systemd/system/prometheus.service y añadimos lo siguiente dentro del parámetro ExecStart:

--web.config.file=/etc/prometheus/web.yml

El resultado final debe de ser el siguiente:

ExecStart= /usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--web.config.file=/etc/prometheus/web.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries

Guardamos el fichero y reiniciamos el servicio:

# systemctl daemon-reload
# systemctl restart prometheus.service

Comprobación

Tras estos cambios, si accedemos vía web a nuestro Prometheus, podremos observar que nos piden usuario y contraseña para acceder. Si lo hacemos desde curl podemos observar que:

# curl --head https://prometheus.midominio.com
HTTP/1.1 401 Unauthorized
Date: Mon, 24 Oct 2022 13:20:29 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 13
Connection: keep-alive
Www-Authenticate: Basic
X-Content-Type-Options: nosniff

Si nos fichamos, nos da error 401 Unauthorized, eso significa que debemos de proporcionar un nombre de usuario y luego contraseña:

# curl -u admin https://prometheus.midominio.com
Enter host password for user 'admin':

De esta forma, tenemos nuestro Prometheus configurado con SSL y con una autenticación básica que nos permite securizar mejor nuestro servicio.

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación