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 Datenbankanmeldedaten aus dem Vault abruft, entweder während der Installation des Frontends oder durch Aktualisieren der Frontend-Konfigurationsdatei (zabbix.conf.php).

Wenn sich die Vault-Anmeldedaten seit der vorherigen Frontend-Installation geändert haben, führen Sie die Frontend-Installation erneut aus oder aktualisieren Sie zabbix.conf.php. Siehe auch: Vorhandene Konfiguration aktualisieren.

Während der Frontend-Installation müssen die Verbindungsparameter im Schritt DB-Verbindung konfigurieren 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 nicht angegeben, wird der Standardwert verwendet.
Beispiel: /v1/secret/data/zabbix/
Vault secret path yes Ein Pfad zum Secret, aus dem die Datenbankanmeldedaten über die 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.
Siehe die HashiCorp-Dokumentation für Informationen zum Erstellen von Tokens und Vault-Richtlinien.
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.
Siehe die HashiCorp-Dokumentation für Informationen zu AppRoles.
Dieses Feld ist nur verfügbar, wenn AppRole als Vault-Authentifizierungstyp ausgewählt ist.
Vault authentication secret ID yes Geben Sie die Secret-ID an, die für die AppRole ausgestellt wurde.
Siehe die HashiCorp-Dokumentation für Informationen zu AppRoles.
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

Aktualisierung einer bestehenden Konfiguration

Um eine bestehende Konfiguration zum Abrufen von Geheimnissen aus einem HashiCorp Vault zu aktualisieren:

  1. Aktualisieren Sie die Parameter der Konfigurationsdatei des Zabbix Server oder Proxy wie im Abschnitt Database credentials beschrieben.

  2. Aktualisieren Sie die DB-Verbindungseinstellungen, indem Sie das Zabbix Frontend neu konfigurieren und die erforderlichen Parameter angeben, wie im Abschnitt Frontend beschrieben. Um das Zabbix Frontend neu zu konfigurieren, öffnen Sie die Setup-URL des Frontend im Browser:

  • für Apache: http://<server_ip_or_name>/zabbix/setup.php
  • für Nginx: http://<server_ip_or_name>/setup.php

Alternativ können diese Parameter in der Frontend-Konfigurationsdatei (zabbix.conf.php) gesetzt werden.

Verwendung des 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 mit 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 Benutzer-Makros wie im Abschnitt User macro values beschrieben.

Um eine bestehende Konfiguration zum Abrufen von Geheimnissen aus einem CyberArk Vault zu aktualisieren, siehe CyberArk configuration.

Fehlerbehebung

  1. In der Logdatei von Zabbix Server/Proxy:
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 entsperrt (in der Standardkonfiguration erforderlich, bei konfiguriertem Auto Unseal nicht erforderlich).

  1. In der Logdatei von Zabbix Server/Proxy:
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.