13 Almacenamiento de secretos

Visión general

Es posible almacenar información confidencial en secreto en HashiCorp Vault KV Secrets Engine - Versión 2. Los secretos se pueden guardar para:

  • valores de macro de usuario
  • credenciales de acceso a la base de datos

Zabbix proporciona acceso de solo lectura a los secretos en Vault, suponiendo que los secretos son manejados por otra persona.

Valores de macro de usuario

Es posible almacenar valores de macros de usuario en secreto en Vault.

Un valor "Secreto de Vault" de una macro de usuario contiene una ruta de referencia (como 'ruta:clave', por ejemplo "secret/zabbix:contraseña").

Los siguientes comandos se pueden utilizar para establecer el valor de la ruta mencionado en el ejemplo:

# Habilite el punto de montaje "secret/" si aún no está habilitado, tenga en cuenta que se debe usar "kv-v2"
       vault secrets enable -path=secret/ kv-v2
       
       # Coloque un nuevo secreto con contraseña clave en el punto de montaje "secret/" y la ruta "secret/zabbix"
       vault kv put secret/zabbix password=<contraseña>
       
       # Pruebe que el secreto se haya agregado correctamente
       vault kv get secret/zabbix
       
       # Finalmente pruebe con Curl, tenga en cuenta que los "datos" deben agregarse manualmente después del punto de montaje y "/v1" antes del punto de montaje; consulte también el parámetro --capath
       curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix

El valor secreto es recuperado por el servidor Zabbix en cada actualización de datos de configuración y se almacena en la caché de configuración. El token de autenticación para un acceso de solo lectura a las rutas de referencia se proporcionará en la configuración del servidor (parámetro 'VaultToken'). Si el valor de la macro no se puede recuperar correctamente, la métrica correspondiente que usa el valor dejará de ser compatible.

También es posible activar la actualización de valores secretos desde Vault, usando una opción de línea de comando 'secrets_reload'.

El proxy Zabbix nunca se comunica con Vault para obtener secretos que no sean credenciales de la base de datos. Los valores secretos en el proxy Zabbix se recuperan del servidor Zabbix en cada configuración sincronizada y almacenada en la caché de configuración de la misma manera que en el servidor Zabbix.

Eso significa que un proxy Zabbix no puede iniciar la recopilación de datos después de reiniciar hasta que reciba la actualización de datos de configuración del servidor Zabbix por primera vez. El cifrado debe estar habilitado entre el servidor Zabbix y el proxy; de lo contrario, se registra un mensaje de advertencia del servidor.

Credenciales de base de datos

Es posible almacenar las credenciales de la base de datos utilizadas por el servidor Zabbix, proxies y frontend de forma secreta en Vault:

  • Los parámetros relacionados con Vault para recuperar las credenciales de la base de datos se pueden introducir opcionalmente en la interfaz asistente de instalación.

Las credenciales de la base de datos recuperadas de Vault serán almacenadas en caché por la Interfaz. Tenga en cuenta que el directorio de archivos temporales del sistema de archivos se utiliza para el almacenamiento en caché de credenciales de base de datos en la interfaz. Puede usar la constante ZBX_DATA_CACHE_TTL para controlar la frecuencia con la que se actualiza/invalida la caché de datos.

  • Para servidor/proxy se puede utilizar el parámetro de configuración VaultDBPath para especificar la ruta desde donde serán recuperadas las credenciales para la base de datos por las claves 'contraseña' y 'nombre de usuario' (por ejemplo: secret/zabbix/base de datos).

Los siguientes comandos se pueden utilizar para establecer los valores de la ruta mencionados en el ejemplo:

# Habilite el punto de montaje "secret/" si aún no está habilitado, tenga en cuenta que se debe usar "kv-v2"
       vault secrets enable -path=secret/ kv-v2
       
       # Coloque nuevos secretos con claves de nombre de usuario y contraseña en el punto de montaje "secret/" y la ruta "secret/zabbix/database"
       vault kv get secret/zabbix/database
       
       # Pruebe que el secreto se haya agregado correctamente
       vault kv get secret/zabbix/database
       
       # Finalmente pruebe con Curl, tenga en cuenta que los "datos" deben agregarse manualmente después del punto de montaje y "/v1" antes del punto de montaje; consulte también el parámetro --capath
       curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/database

Parámetros de configuración

Para el servidor/proxy Zabbix se han agregado nuevos parámetros de configuración para la autenticación Vault y recuperación de credenciales de base de datos:

  • VaultToken: token de autenticación de Vault (consulte el archivo de configuración del servidor/proxy Zabbix para más detalles)
  • VaultURL - URL HTTP[S] del servidor de Vault
  • VaultDBPath: ruta de Vault desde donde estarán las credenciales para la base de datos recuperadas por las claves 'contraseña' y 'nombre de usuario' (por ejemplo: secret/zabbix/database

El servidor Zabbix y el proxy Zabbix leen al inicio la configuración relacionada con Vault de los parámetros de zabbix_server.conf y zabbix_proxy.conf.

El servidor Zabbix y el proxy Zabbix leerán adicionalmente la variable de entorno "VAULT_TOKEN" una vez durante el inicio y la desinicializan para que no esté disponible a través de scripts bifurcados; es un error si ambos VaultToken y VAULT_TOKEN contienen valores.

La barra diagonal y los dos puntos son símbolos reservados. La barra inclinada sólo se puede utilizar para separar el punto de montaje de la ruta (por ejemplo, secret/zabbix donde el punto de montaje es "secret" y "zabbix" es la ruta) y, en caso de macros de Vault, los dos puntos solo se pueden usar para separar la ruta de la clave. Es posible codificar URL "/" y ":" si es necesario crear un punto de montaje con un nombre separado por una barra diagonal (por ejemplo, foo/bar/zabbix donde el punto de montaje es "foo/bar" y la ruta es "zabbix" como "foo%2Fbar/zabbix") y si el nombre del punto de montaje o la ruta deben contener colon.

Configuración de TLS

Se debe agregar el certificado firmado por una autoridad certificadora (CA) al almacén de CA predeterminado. Alternativamente, se puede crear una ubicación de almacenamiento de CA personalizada utilizando el parámetro de configuración SSLCALocation; tenga en cuenta que en este caso, el directorio de certificados debe prepararse utilizando la utilidad c_rehash de openssl, por ejemplo configure SSLCALocation y copie "ca.pem" dentro de ese directorio, luego ejecute el siguiente comando:

c_rehash .