HashiCorp-Konfiguration

Übersicht

Dieser Abschnitt erklärt, wie Zabbix so konfiguriert wird, dass Geheimnisse aus der HashiCorp Vault KV Secrets Engine - Version 2 abgerufen werden.

Der Vault sollte wie in der offiziellen HashiCorp-Dokumentation beschrieben bereitgestellt und konfiguriert werden.

Informationen zur Konfiguration von TLS in Zabbix finden Sie unter Speicherung von Geheimnissen.

Abrufen von Datenbankanmeldedaten

Um ein Secret mit Datenbankanmeldedaten erfolgreich abzurufen, müssen beide Komponenten konfiguriert werden:

  • Zabbix Server/Proxy
  • Zabbix Frontend
Server/Proxy

Um Zabbix Server oder Proxy zu konfigurieren, geben Sie die folgenden Konfigurationsparameter in der Konfigurationsdatei an:

  • Vault - welcher Vault-Anbieter verwendet werden soll;
  • VaultToken - Authentifizierungstoken für den Vault (siehe Konfigurationsdatei des Zabbix Server/Proxy für Details); kann nicht zusammen mit VaultAppRoleID verwendet werden;
  • VaultAppRoleID und VaultAppSecretID - Rollen-ID und Secret-ID für die Vault-Authentifizierung (siehe Konfigurationsdatei des Zabbix Server/Proxy für Details); kann nicht zusammen mit VaultToken verwendet werden;
  • VaultURL - HTTP[S]-URL des Vault-Servers;
  • VaultDBPath - Pfad zum Vault-Secret, das die Datenbankanmeldedaten enthält (diese Option kann nur verwendet werden, wenn DBUser und DBPassword nicht angegeben sind); Zabbix Server oder Proxy ruft die Anmeldedaten über die Schlüssel "password" und "username" ab;
  • VaultPrefix - benutzerdefinierter Präfix für den Vault-Pfad oder die Abfrage, abhängig vom Vault; wenn nicht angegeben, wird der am besten geeignete Standardwert verwendet.

Die Konfigurationsparameter Vault, VaultToken (oder VaultAppRoleID/VaultAppSecretID), VaultURL und VaultPrefix werden auch für die Vault-Authentifizierung verwendet, wenn Zabbix Server Secret-Vault-Makros verarbeitet (und Zabbix Proxy, falls konfiguriert). Zabbix Server und Proxys öffnen keine Vault-Secret-Makros, die DB-Anmeldedaten aus VaultDBPath enthalten.

Es wird dringend empfohlen, unterschiedliche Tokens für verschiedene Proxys zu verwenden.

Zabbix Server und Zabbix Proxy lesen die vault-bezogenen Konfigurationsparameter beim Start aus zabbix_server.conf und zabbix_proxy.conf. Zusätzlich liest Zabbix Server und Zabbix Proxy die Umgebungsvariable VAULT_TOKEN einmal beim Start ein und entfernt sie anschließend, damit sie für geforkte Skripte nicht verfügbar ist; es ist ein Fehler, wenn sowohl VaultToken als auch VAULT_TOKEN einen Wert enthalten.

Beispiel

  1. Geben Sie in zabbix_server.conf die folgenden Parameter an.

Mit VaultToken:

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

Oder mit 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. Führen Sie die folgenden CLI-Befehle aus, um das erforderliche Secret im Vault zu erstellen:
# Aktivieren Sie den Mount-Punkt "secret/", falls er noch nicht aktiviert ist; beachten Sie, dass "kv-v2" verwendet werden muss.
vault secrets enable -path=secret/ kv-v2

# Legen Sie neue Secrets mit den Schlüsseln username und password unter dem Mount-Punkt "secret/" und dem Pfad "zabbix/database" an.
vault kv put -mount=secret zabbix/database username=zabbix password=<password>

# Prüfen Sie, ob das Secret erfolgreich hinzugefügt wurde.
vault kv get secret/zabbix/database

# Testen Sie abschließend mit Curl; beachten Sie, dass "data" nach dem Mount-Punkt und "/v1" vor dem Mount-Punkt manuell hinzugefügt werden muss, siehe auch den Parameter --capath.
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/database
  1. Dadurch ruft der Zabbix-Server die folgenden Anmeldedaten für die Datenbankauthentifizierung ab:
  • Benutzername: zabbix
  • Passwort: <password>
Frontend

Das Zabbix-Frontend kann so konfiguriert werden, dass es die Datenbankanmeldedaten entweder während der Installation des Frontends oder durch Aktualisieren der Frontend-Konfigurationsdatei (zabbix.conf.php) aus dem Vault abruft.

Wenn sich die Vault-Anmeldedaten seit der vorherigen Frontend-Installation geändert haben, aktualisieren Sie die vorhandene Konfiguration.

Während der Frontend-Installation müssen die Verbindungsparameter im Schritt Configure DB Connection angegeben werden.

Konfigurationsbeispiel mit Token-Authentifizierung:

Konfigurationsbeispiel mit AppRole-Authentifizierung:

Parameter Mandatory Default value Description
Store credentials in no Wählen Sie HashiCorp Vault aus.
Vault API endpoint yes https://localhost:8200 Geben Sie die URL für die Verbindung zum Vault im Format scheme://host:port an.
Vault prefix no /v1/secret/data/ Geben Sie ein benutzerdefiniertes Präfix für den Vault-Pfad oder die Abfrage an. Wenn kein Präfix angegeben wird, wird der Standardwert verwendet.
Beispiel: /v1/secret/data/zabbix/
Vault secret path yes Ein Pfad zum Secret, aus dem die Datenbankanmeldedaten anhand der Schlüssel „password“ und „username“ abgerufen werden sollen.
Beispiel: database
Vault authentication type no Wählen Sie den Vault-Authentifizierungstyp aus:
Token – Token-Authentifizierung verwenden;
AppRole – die AppRole-Authentifizierungsmethode verwenden.
Vault authentication token yes Geben Sie ein Authentifizierungstoken für den schreibgeschützten Zugriff auf den Secret-Pfad an.
Informationen zum Erstellen von Token und Vault-Richtlinien finden Sie in der HashiCorp-Dokumentation.
Dieses Feld ist nur verfügbar, wenn Token als Vault-Authentifizierungstyp ausgewählt ist.
Vault authentication role ID yes Geben Sie die Rollen-ID der AppRole an.
Informationen zu AppRoles finden Sie in der HashiCorp-Dokumentation.
Dieses Feld ist nur verfügbar, wenn AppRole als Vault-Authentifizierungstyp ausgewählt ist.
Vault authentication secret ID yes Geben Sie die für die AppRole ausgestellte Secret-ID an.
Informationen zu AppRoles finden Sie in der HashiCorp-Dokumentation.
Dieses Feld ist nur verfügbar, wenn AppRole als Vault-Authentifizierungstyp ausgewählt ist.

Abrufen von Benutzer-Makrowerten

Um HashiCorp Vault zum Speichern von Vault secret-Benutzermakrowerten zu verwenden, stellen Sie sicher, dass:

Der Zabbix-Server (und der Zabbix-Proxy, falls konfiguriert) benötigt Zugriff auf Vault secret-Makrowerte aus dem Vault. Das Zabbix-Frontend benötigt keinen solchen Zugriff.

Der Makrowert sollte einen Referenzpfad enthalten (als path:key, zum Beispiel macros:password). Das bei der Zabbix-Server/Proxy-Konfiguration angegebene Authentifizierungstoken (über den Parameter VaultToken) muss Lesezugriff auf diesen Pfad gewähren.

Weitere Informationen zur Verarbeitung von Makrowerten durch Zabbix finden Sie unter Vault secret macros.

Pfadsyntax

Die Symbole Schrägstrich ("/") und Doppelpunkt (":") sind reserviert.

Ein Schrägstrich kann nur verwendet werden, um einen Mountpoint von einem Pfad zu trennen (z. B. secret/zabbix, wobei der Mountpoint "secret" und der Pfad "zabbix" ist). Bei Vault-Makros kann ein Doppelpunkt nur verwendet werden, um einen Pfad/Query von einem Schlüssel zu trennen.

Es ist möglich, die Symbole Schrägstrich und Doppelpunkt per URL-Encoding zu kodieren, wenn ein Mountpoint mit einem Namen erstellt werden soll, der durch einen Schrägstrich getrennt ist (z. B. kann foo/bar/zabbix, wobei der Mountpoint "foo/bar" und der Pfad "zabbix" ist, als "foo%2Fbar/zabbix" kodiert werden) und wenn ein Mountpoint-Name oder Pfad einen Doppelpunkt enthalten muss.

Beispiel

  1. Fügen Sie in Zabbix ein Benutzermakro {$PASSWORD} vom Typ "Vault secret" mit dem Wert macros:password hinzu

  1. Führen Sie die folgenden CLI-Befehle aus, um das erforderliche Secret im Vault zu erstellen:
# Aktivieren Sie den Mount-Punkt "secret/", falls er noch nicht aktiviert ist; beachten Sie, dass "kv-v2" verwendet werden muss.
vault secrets enable -path=secret/ kv-v2

# Legen Sie ein neues Secret mit dem Schlüssel "password" unter dem Mount-Punkt "secret/" und dem Pfad "zabbix/macros" ab.
vault kv put -mount=secret zabbix/macros password=<password>

# Prüfen Sie, ob das Secret erfolgreich hinzugefügt wurde.
vault kv get secret/zabbix/macros

# Testen Sie abschließend mit Curl; beachten Sie, dass "data" nach dem Mount-Punkt und "/v1" vor dem Mount-Punkt manuell hinzugefügt werden muss, siehe auch den Parameter --capath.
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/macros
  1. Dadurch löst Zabbix das Makro {$PASSWORD} in den Wert <password> auf

Vorhandene Konfiguration aktualisieren

So aktualisieren Sie eine vorhandene Konfiguration zum Abrufen von Geheimnissen aus einem HashiCorp Vault:

  1. Aktualisieren Sie die Parameter der Konfigurationsdatei des Zabbix Servers oder Proxys wie im Abschnitt Datenbankanmeldeinformationen beschrieben.

  2. Aktualisieren Sie die Parameter der Frontend-Konfigurationsdatei von Zabbix:

Verwendung eines Vault-Tokens:

$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/';

Oder mithilfe der Vault-AppRole-Methode:

$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. Konfigurieren Sie bei Bedarf Benutzermakros wie im Abschnitt Werte von Benutzermakros beschrieben.

Informationen zum Aktualisieren einer vorhandenen Konfiguration zum Abrufen von Geheimnissen aus einem CyberArk Vault finden Sie unter CyberArk-Konfiguration.

Fehlerbehebung

  1. In der Zabbix Server/Proxy-Protokolldatei:
237839:20260729:130916.425 Vault token renew started to fail: cannot login into HashiCorp vault with AppRole method: unsuccessful response code "503"

Wahrscheinliche Ursache: HashiCorp Vault wurde (neu) gestartet, aber noch nicht entsiegelt (in der Standardkonfiguration erforderlich, bei konfiguriertem Auto Unseal nicht erforderlich).

  1. In der Zabbix Server/Proxy-Protokolldatei:
235545:20260729:125617.944 Vault token renew started to fail: cannot login into HashiCorp vault with AppRole method: unsuccessful response code "400"

oder

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

Wahrscheinliche Ursache: VaultAppSecretID ist in HashiCorp Vault abgelaufen oder hat sein Nutzungslimit erreicht.