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.

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-bcryp
t 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.
Comentarios