Configuration HashiCorp

Vue d'ensemble

Cette section explique comment configurer Zabbix pour récupérer des secrets depuis HashiCorp Vault KV Secrets Engine - Version 2.

Le vault doit être déployé et configuré comme décrit dans la documentation officielle de HashiCorp.

Pour en savoir plus sur la configuration de TLS dans Zabbix, consultez Stockage des secrets.

Récupération des identifiants de base de données

Pour récupérer avec succès un secret contenant des identifiants de base de données, il est nécessaire de configurer les deux éléments suivants :

  • Zabbix serveur/proxy
  • Zabbix interface
Serveur/proxy

Pour configurer Zabbix serveur ou proxy, spécifiez les paramètres de configuration suivants dans le fichier de configuration :

  • Vault - quel fournisseur de coffre-fort doit être utilisé ;
  • VaultToken - jeton d'authentification du coffre-fort (voir le fichier de configuration du serveur/proxy Zabbix pour plus de détails) ; ne peut pas être utilisé avec VaultAppRoleID ;
  • VaultAppRoleID et VaultAppSecretID - ID de rôle et ID secret d'authentification du coffre-fort (voir le fichier de configuration du serveur/proxy Zabbix pour plus de détails) ; ne peut pas être utilisé avec VaultToken ;
  • VaultURL - URL HTTP[S] du serveur du coffre-fort ;
  • VaultDBPath - chemin vers le secret du coffre-fort contenant les identifiants de base de données (cette option ne peut être utilisée que si DBUser et DBPassword ne sont pas spécifiés) ; le serveur ou le proxy Zabbix récupérera les identifiants à l'aide des clés "password" et "username" ;
  • VaultPrefix - préfixe personnalisé pour le chemin ou la requête du coffre-fort, selon le coffre-fort ; s'il n'est pas spécifié, la valeur par défaut la plus appropriée sera utilisée.

Les paramètres de configuration Vault, VaultToken (ou VaultAppRoleID/VaultAppSecretID), VaultURL et VaultPrefix sont également utilisés pour l'authentification au coffre-fort lors du traitement des macros de coffre-fort de secrets par le serveur Zabbix (et par le proxy Zabbix, s'il est configuré). Le serveur Zabbix et les proxies n'ouvriront pas les macros de secrets du coffre-fort qui contiennent des identifiants de base de données provenant de VaultDBPath.

Il est fortement recommandé d'utiliser des jetons différents pour différents proxies.

Le serveur Zabbix et le proxy Zabbix lisent les paramètres de configuration liés au coffre-fort depuis zabbix_server.conf et zabbix_proxy.conf au démarrage. De plus, le serveur Zabbix et le proxy Zabbix liront la variable d'environnement VAULT_TOKEN une seule fois au démarrage et la désactiveront afin qu'elle ne soit pas disponible via les scripts forkés ; c'est une erreur si les paramètres VaultToken et VAULT_TOKEN contiennent tous deux une valeur.

Exemple

  1. Dans zabbix_server.conf, spécifiez les paramètres suivants.

En utilisant VaultToken :

Vault=HashiCorp
VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/

Ou, en utilisant VaultAppRoleID :

Vault=HashiCorp
VaultAppRoleID=6f1567f1-538d-7d70-e8e4-5d3e59471b2e
VaultAppSecretID=89dac8b1-f7d6-96a7-2ecf-f94d2de3d6f1
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/
  1. Exécutez les commandes CLI suivantes pour créer le secret requis dans le vault :
# Activer le point de montage "secret/" s'il n'est pas déjà activé ; notez que "kv-v2" doit être utilisé.
vault secrets enable -path=secret/ kv-v2

# Ajouter de nouveaux secrets avec les clés username et password sous le point de montage "secret/" et le chemin "zabbix/database".
vault kv put -mount=secret zabbix/database username=zabbix password=<password>

# Vérifier que le secret a bien été ajouté.
vault kv get secret/zabbix/database

# Enfin, tester avec Curl ; notez que "data" doit être ajouté manuellement après le point de montage et "/v1" avant le point de montage, voir aussi le paramètre --capath.
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/database
  1. En conséquence, le serveur Zabbix récupérera les identifiants suivants pour l'authentification à la base de données :
  • Nom d'utilisateur : zabbix
  • Mot de passe : <password>
Interface

L'interface Zabbix peut être configurée pour récupérer les identifiants de base de données depuis le coffre-fort soit lors de l'installation de l'interface, soit en mettant à jour le fichier de configuration de l'interface (zabbix.conf.php).

Si les identifiants du coffre-fort ont été modifiés depuis la précédente installation de l'interface, relancez l'installation de l'interface ou mettez à jour zabbix.conf.php. Voir aussi: Mise à jour de la configuration existante.

Lors de l'installation de l'interface, les paramètres de connexion doivent être spécifiés à l'étape Configure DB Connection.

Exemple de configuration utilisant l'authentification par jeton:

Exemple de configuration utilisant l'authentification AppRole:

Parameter Mandatory Default value Description
Store credentials in no Sélectionnez HashiCorp Vault.
Vault API endpoint yes https://localhost:8200 Spécifiez l'URL de connexion au coffre-fort au format scheme://host:port
Vault prefix no /v1/secret/data/ Indiquez un préfixe personnalisé pour le chemin ou la requête du coffre-fort. Si aucun n'est spécifié, la valeur par défaut est utilisée.
Exemple: /v1/secret/data/zabbix/
Vault secret path yes Chemin vers le secret à partir duquel les identifiants de la base de données doivent être récupérés à l'aide des clés "password" et "username".
Exemple: database
Vault authentication type no Sélectionnez le type d'authentification du coffre-fort:
Token - utiliser l'authentification par jeton;
AppRole - utiliser la méthode d'authentification AppRole.
Vault authentication token yes Fournissez un jeton d'authentification pour un accès en lecture seule au chemin du secret.
Voir la documentation HashiCorp pour des informations sur la création de jetons et de politiques du coffre-fort.
Ce champ est disponible uniquement si Token est sélectionné comme type d'authentification du coffre-fort.
Vault authentication role ID yes Fournissez l'ID de rôle de l'AppRole.
Voir la documentation HashiCorp pour des informations sur les AppRoles.
Ce champ est disponible uniquement si AppRole est sélectionné comme type d'authentification du coffre-fort.
Vault authentication secret ID yes Fournissez l'ID secret émis pour l'AppRole.
Voir la documentation HashiCorp pour des informations sur les AppRoles.
Ce champ est disponible uniquement si AppRole est sélectionné comme type d'authentification du coffre-fort.

Récupération des valeurs des macros utilisateur

Pour utiliser HashiCorp Vault pour stocker les valeurs des macros utilisateur Vault secret, assurez-vous que :

Zabbix serveur (et Zabbix proxy, si configuré) nécessite un accès aux valeurs des macros Vault secret depuis le coffre-fort. L'interface Zabbix n'a pas besoin d'un tel accès.

La valeur de la macro doit contenir un chemin de référence (au format path:key, par exemple macros:password). Le jeton d'authentification spécifié lors de la configuration de Zabbix serveur/proxy (via le paramètre VaultToken) doit fournir un accès en lecture seule à ce chemin.

Consultez Vault secret macros pour des informations détaillées sur le traitement des valeurs de macro par Zabbix.

Syntaxe du chemin

Les symboles barre oblique ("/") et deux-points (":") sont réservés.

Une barre oblique ne peut être utilisée que pour séparer un point de montage d'un chemin (par exemple, secret/zabbix, où le point de montage est "secret" et le chemin est "zabbix"). Dans le cas des macros Vault, un deux-points ne peut être utilisé que pour séparer un chemin/requête d'une clé.

Il est possible d'encoder en URL les symboles barre oblique et deux-points s'il est nécessaire de créer un point de montage dont le nom contient une barre oblique (par exemple, foo/bar/zabbix, où le point de montage est "foo/bar" et le chemin est "zabbix", peut être encodé en "foo%2Fbar/zabbix") et si le nom d'un point de montage ou un chemin doit contenir un deux-points.

Exemple

  1. Dans Zabbix, ajoutez une macro utilisateur {$PASSWORD} de type "Vault secret" et avec la valeur macros:password

  1. Exécutez les commandes CLI suivantes pour créer le secret requis dans le vault :
# Activer le point de montage "secret/" s'il n'est pas déjà activé ; notez que "kv-v2" doit être utilisé.
vault secrets enable -path=secret/ kv-v2

# Ajouter un nouveau secret avec la clé "password" sous le point de montage "secret/" et le chemin "zabbix/macros".
vault kv put -mount=secret zabbix/macros password=<password>

# Vérifier que le secret a bien été ajouté.
vault kv get secret/zabbix/macros

# Enfin, tester avec Curl ; notez que "data" doit être ajouté manuellement après le point de montage et "/v1" avant le point de montage, voir aussi le paramètre --capath.
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/macros
  1. En conséquence, Zabbix résoudra la macro {$PASSWORD} en la valeur : <password>

Mise à jour d'une configuration existante

Pour mettre à jour une configuration existante afin de récupérer des secrets depuis un HashiCorp Vault :

  1. Mettez à jour les paramètres du fichier de configuration du serveur Zabbix ou du proxy comme décrit dans la section Database credentials.

  2. Mettez à jour les paramètres de connexion à la base de données en reconfigurant l'interface Zabbix et en spécifiant les paramètres requis comme décrit dans la section Frontend. Pour reconfigurer l'interface Zabbix, ouvrez l'URL de configuration de l'interface dans le navigateur :

  • pour Apache : http://<server_ip_or_name>/zabbix/setup.php
  • pour Nginx : http://<server_ip_or_name>/setup.php

Sinon, ces paramètres peuvent être définis dans le fichier de configuration de l'interface (zabbix.conf.php).

En utilisant le jeton Vault :

$DB['VAULT']                    = 'HashiCorp';
$DB['VAULT_URL']                = 'https://localhost:8200';
$DB['VAULT_DB_PATH']            = 'database';
$DB['VAULT_TOKEN']              = 'hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg';
$DB['VAULT_PREFIX']             = '/v1/secret/data/zabbix/';

Ou, en utilisant la méthode Vault AppRole :

$DB['VAULT']                    = 'HashiCorp';
$DB['VAULT_URL']                = 'https://localhost:8200';
$DB['VAULT_DB_PATH']            = 'database';
$DB['VAULT_APP_ROLE_ID']        = '6f1567f1-538d-7d70-e8e4-5d3e59471b2e';
$DB['VAULT_APP_SECRET_ID']      = '89dac8b1-f7d6-96a7-2ecf-f94d2de3d6f1';
$DB['VAULT_PREFIX']             = '/v1/secret/data/zabbix/';
  1. Configurez les macros utilisateur comme décrit dans la section User macro values, si nécessaire.

Pour mettre à jour une configuration existante afin de récupérer des secrets depuis un CyberArk Vault, consultez CyberArk configuration.

Dépannage

  1. Dans le fichier journal du serveur/proxy Zabbix :
237839:20260729:130916.425 Vault token renew started to fail: cannot login into HashiCorp vault with AppRole method: unsuccessful response code "503"

Cause probable : HashiCorp Vault a été (redémarré), mais n’a pas été déverrouillé (requis dans la configuration par défaut, non requis si Auto Unseal est configuré).

  1. Dans le fichier journal du serveur/proxy Zabbix :
235545:20260729:125617.944 Vault token renew started to fail: cannot login into HashiCorp vault with AppRole method: unsuccessful response code "400"

ou

235545:20260729:125718.537 Vault token renew failed: cannot login into HashiCorp vault with AppRole method: unsuccessful response code "400"

Cause probable : VaultAppSecretID a expiré ou a atteint sa limite d’utilisation dans HashiCorp vault.