2 HashiCorpの設定
概要
このセクションでは、HashiCorp Vault KV Secrets Engine - Version 2 からシークレットを取得するための Zabbix の設定方法について説明します。
Vault は、公式の HashiCorp documentation に記載されているとおりにデプロイおよび設定されている必要があります。
Zabbix での TLS の設定については、Storage of secrets を参照してください。
データベース認証情報の取得
データベース認証情報を含むシークレットを正常に取得するには、以下の両方を設定する必要があります。
- Zabbix サーバー/プロキシ
- Zabbix フロントエンド
サーバー/プロキシ
Zabbix の サーバー または プロキシ を設定するには、 設定ファイルで以下の設定パラメータを指定します。
Vault- 使用する Vault プロバイダー。VaultToken- Vault 認証トークン (詳細は Zabbix サーバー/プロキシ設定ファイルを参照)。VaultURL- Vault サーバーの HTTP[S] URL。VaultDBPath- データベース認証情報を含む Vault シークレットのパス (このオプションは、DBUser と DBPassword が指定されていない場合にのみ使用できます)。 Zabbix サーバーまたはプロキシは、キー"password" と "username" で認証情報を取得します。VaultPrefix- Vault パスまたはクエリのカスタムプレフィックス(Vault によって異なります)。指定されていない場合は、最も適切なデフォルトが使用されます。
Zabbix サーバーは、Vault シークレットマクロを処理する際に、Vault 認証に Vault、VaultToken、VaultURL、および VaultPrefix 設定パラメータも使用します。
Zabbix サーバーと Zabbix プロキシは、起動時に zabbix_server.conf と zabbix_proxy.conf から Vault 関連の設定パラメータを読み込みます。
さらに、Zabbix サーバーと Zabbix プロキシは起動時に VAULT_TOKEN 環境変数を一度読み取り、フォークされたスクリプトから使用できないように設定を解除します。 VaultToken と VAULT_TOKEN の両方のパラメータに値が含まれている場合はエラーになります。
Zabbix サーバーまたはプロキシは、サービストークンと定期サービストークンの自動更新をサポートしています。Zabbix がトークンが更新可能であることを検出すると、トークンの最大 TTL に達するまで、または定期サービストークンの場合は無期限に、トークンを自動的に更新し続けます。
例
- zabbix_server.conf で、以下のパラメータを指定します。
Vault=HashiCorp
VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/
- 以下の CLI コマンドを実行して、必要なシークレットをボールトに作成します。
# まだ有効になっていない場合は、マウントポイント"secret/"を有効にします。"kv-v2"を使用する必要があります。
vault secrets enable -path=secret/ kv-v2
# マウントポイント"secret/"、パス"zabbix/database"の下に、ユーザー名とパスワードをキーとする新しいシークレットを配置します。
vault kv put -mount=secret zabbix/database username=zabbix password=<password>
# シークレットが正常に追加されたことをテストします。
vault kv get secret/zabbix/database
# 最後にCurlでテストします。マウントポイントの後に"data"を手動で追加し、マウントポイントの前に"/v1"を追加する必要があることに注意してください。--capathパラメータも参照してください。
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/database
- 結果的に、Zabbixサーバーはデータベース認証のために以下の認証情報を取得します。
- ユーザー名: zabbix
- パスワード: <password>
Webインターフェース
Zabbix Webインターフェースは、Webインターフェースのインストール時、またはWebインターフェースの設定ファイル (zabbix.conf.php) を更新することで、データベース認証情報を vault から取得するように設定できます。
前回のWebインターフェースのインストール以降に vault の認証情報が変更された場合は、Webインターフェースのインストールを再実行するか、zabbix.conf.php を更新してください。あわせて 既存の設定の更新 も参照してください。
Webインターフェースのインストール中は、Configure DB Connection ステップで設定パラメータを指定する必要があります。

- Store credentials in パラメータを "HashiCorp Vault" に設定します。
- 接続パラメータを指定します。
| Parameter | Mandatory | Default value | Description |
|---|---|---|---|
| Vault API endpoint | yes | https://localhost:8200 | vault に接続するための URL を scheme://host:port 形式で指定します |
| Vault prefix | no | /v1/secret/data/ | vault のパスまたはクエリに対するカスタムプレフィックスを指定します。指定しない場合は、デフォルトが使用されます。 例: /v1/secret/data/zabbix/ |
| Vault secret path | no | "password" および "username" キーを使用して、データベースの認証情報を取得する secret へのパスです。 例: database |
|
| Vault authentication token | no | secret path への読み取り専用アクセス用の認証トークンを指定します。 トークンおよび vault ポリシーの作成方法については、HashiCorp documentation を参照してください。 |
ユーザーマクロ値の取得
Vault secret ユーザーマクロ値を保存するために HashiCorp Vault を使用するには、次の条件を満たしていることを確認してください。
- Zabbix サーバーが 設定済み で、HashiCorp Vault と連携できること。
- Administration → General → Other の Vault provider パラメータが "HashiCorp Vault"(デフォルト)に設定されていること。

Vault secret マクロ値に対して Vault へのアクセスが必要なのは Zabbix サーバーのみです。 他の Zabbix コンポーネント(プロキシ、Webインターフェース)にはそのようなアクセスは必要ありません。
マクロ値には参照パスを含める必要があります(path:key の形式。例: macros:password)。
Zabbix サーバーの設定時に指定した認証トークン(VaultToken パラメータ)は、このパスに対する読み取り専用アクセス権を持っていなければなりません。
Zabbix によるマクロ値の処理の詳細については、Vault secret macros を参照してください。
パス構文
スラッシュ ("/") とコロン (":") は予約語です。
スラッシュは、マウントポイントとパスを区切る場合にのみ使用できます (例: secret/zabbix の場合、マウントポイントは"secret"、パスは"zabbix"です)。Vault マクロの場合、コロンはパス/クエリとキーを区切る場合にのみ使用できます。
マウントポイント名をスラッシュで区切って作成する必要がある場合 (例: foo/bar/zabbix の場合、マウントポイントは"foo/bar"、パスは"zabbix"です)、およびマウントポイント名またはパスにコロンを含める必要がある場合は、スラッシュとコロンを URL エンコードできます。
例
- Zabbix で、タイプが"Vault secret"で値が
macros:passwordであるユーザーマクロ {$PASSWORD} を追加します。

- 以下の CLI コマンドを実行して、Vault に必要なシークレットを作成します。
# マウントポイント"secret/"がまだ有効になっていない場合は有効にします。"kv-v2"を使用する必要があります。
vault secrets enable -path=secret/ kv-v2
# キー"password"の新しい秘密文を、マウントポイント"secret/"、パス"zabbix/macros"に配置します。
vault kv put -mount=secret zabbix/macros password=<password>
# 秘密文が正常に追加されたことをテストします。
vault kv get secret/zabbix/macros
# 最後に Curl でテストします。マウントポイントの後に"data"を手動で追加し、マウントポイントの前に"/v1"を追加する必要があることに注意してください。--capath パラメータも参照してください。
curl --header "X-Vault-Token: <VaultToken>" https://127.0.0.1:8200/v1/secret/data/zabbix/macros
- 結果として、Zabbix はマクロ {$PASSWORD} を <password> という値に解決します。
既存の設定の更新
HashiCorp Vault からシークレットを取得するための既存の設定を更新するには、以下の手順に従います。
-
データベース認証情報 セクションの説明に従って、Zabbix サーバーまたはプロキシの設定ファイルのパラメータを更新します。
-
フロントエンド セクションの説明に従って、Zabbix フロントエンドを再設定し、必要なパラメータを指定して、DB 接続設定を更新します。 Zabbix フロントエンドを再設定するには、ブラウザでフロントエンドのセットアップ URL を開きます。
- Apache の場合: http://<server_ip_or_name>/zabbix/setup.php
- Nginx の場合: http://<server_ip_or_name>/setup.php
または、以下のパラメータを フロントエンド設定ファイル (zabbix.conf.php) で設定することもできます。
$DB['VAULT'] = 'HashiCorp';
$DB['VAULT_URL'] = 'https://localhost:8200';
$DB['VAULT_DB_PATH'] = 'database';
$DB['VAULT_TOKEN'] = '<mytoken>';
$DB['VAULT_CERT_FILE'] = '';
$DB['VAULT_KEY_FILE'] = '';
$DB['VAULT_PREFIX'] = '/v1/secret/data/zabbix/';
- 必要に応じて、ユーザーマクロの値 セクションの説明に従ってユーザーマクロを設定します。
CyberArk Vault からシークレットを取得するための既存の設定を更新するには、CyberArk の設定 を参照してください。