HashiCorp設定

概要

このセクションでは、HashiCorp Vault KV Secrets Engine - Version 2 からシークレットを取得するための Zabbix の設定方法について説明します。

Vault は、公式の HashiCorp ドキュメント に記載されているとおりにデプロイおよび設定してください。

Zabbix での TLS の設定については、シークレットの保存を参照してください。

データベース認証情報の取得

データベース認証情報を含むシークレットを正常に取得するには、次の両方を設定する必要があります。

  • Zabbix サーバー/プロキシ
  • Zabbix Webインターフェース

サーバー/プロキシ

Zabbix サーバーまたはプロキシを設定するには、設定ファイルで次の設定パラメータを指定します。

  • Vault - 使用する vault プロバイダー。
  • VaultToken - vault 認証トークン(詳細は Zabbix サーバー/プロキシの設定ファイルを参照)。VaultAppRoleID とは併用できません。
  • VaultAppRoleID および VaultAppSecretID - vault 認証のロール ID およびシークレット ID(詳細は Zabbix サーバー/プロキシの設定ファイルを参照)。VaultToken とは併用できません。
  • VaultURL - vault サーバーの HTTP(S) URL。
  • VaultDBPath - データベース認証情報を含む vault シークレットへのパス(このオプションは、DBUser と DBPassword が指定されていない場合にのみ使用できます)。 Zabbix サーバーまたはプロキシは、キー "password" および "username" を使用して認証情報を取得します。
  • VaultPrefix - vault に応じた、vault パスまたはクエリのカスタムプレフィックス。指定しない場合は、最適なデフォルト値が使用されます。 プレフィックスは / で始まり、/ で終わる必要があります。

Vault、VaultToken(または VaultAppRoleID/VaultAppSecretID)、VaultURL、および VaultPrefix の設定パラメータは、Zabbix サーバー(および設定されている場合は Zabbix プロキシ)がシークレット vault マクロを処理する際の vault 認証にも使用されます。Zabbix サーバーおよびプロキシは、VaultDBPath のデータベース認証情報を含む vault シークレットマクロを展開しません。

プロキシごとに異なるトークンを使用することを強く推奨します。

Zabbix サーバーおよび Zabbix プロキシは、起動時に zabbix_server.conf および zabbix_proxy.conf から vault 関連の設定パラメータを読み取ります。 さらに、Zabbix サーバーおよび Zabbix プロキシは起動時に VAULT_TOKEN 環境変数を一度読み取り、fork されたスクリプトから利用できないように unset します。VaultToken と VAULT_TOKEN の両方のパラメータに値が含まれている場合はエラーになります。

例
  1. Zabbixサーバーのパラメータを設定します。

本番環境では、ドキュメントに記載されている例のトークン、ロールID、シークレットIDの値を使用しないでください。

  • VAULT_TOKEN 環境変数を使用する場合は、Zabbixのサーバー設定ファイル(zabbix_server.conf)で次のパラメータを指定し、変数を設定します。
Vault=HashiCorp
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/

Zabbixサーバーの起動前に、VAULT_TOKEN 環境変数を設定します。

export VAULT_TOKEN=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
zabbix_server -c /etc/zabbix/zabbix_server.conf
  • VaultToken パラメータを使用する場合は、Zabbixサーバー設定ファイルで次のパラメータを指定します。

VaultToken パラメータを使用すると、トークンは設定ファイルにプレーンテキストで保存されます。 Zabbixサーバーまたはプロキシを実行するユーザーだけが読み取れるように、ファイルの権限を 0600 に設定してください。

Vault=HashiCorp
VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/
  • VaultAppRoleID パラメータを使用する場合は、Zabbixサーバー設定ファイルで次のパラメータを指定します。

VaultAppSecretID パラメータを使用すると、シークレットIDは設定ファイルにプレーンテキストで保存されます。 Zabbixサーバーまたはプロキシを実行するユーザーだけが読み取れるように、ファイルの権限を 0600 に設定してください。

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. 次のCLIコマンドを実行して、Vaultに必要なシークレットを作成します。
# まだ有効になっていない場合は、"secret/" マウントポイントを有効にします。"kv-v2" を使用する必要があります。
vault secrets enable -path=secret/ kv-v2

# マウントポイント "secret/" のパス "zabbix/database" に、キー username と password を持つ新しいシークレットを登録します。
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
  1. その結果、Zabbixサーバーはデータベース認証用に次の認証情報を取得します。
  • ユーザー名: zabbix
  • パスワード: <password>

Webインターフェース

Zabbix Webインターフェースは、Webインターフェースのインストール時、またはWebインターフェースの設定ファイル(zabbix.conf.php)を更新することで、vaultからデータベース認証情報を取得するように設定できます。

前回のWebインターフェースのインストール以降にvaultの認証情報が変更された場合は、既存の設定を更新してください。

Webインターフェースのインストール時には、Configure DB Connectionの手順で接続パラメータを指定する必要があります。

トークン認証を使用した設定例:

AppRole認証を使用した設定例:

パラメータ 必須 デフォルト値 説明
Store credentials in いいえ HashiCorp Vaultを選択します。
Vault API endpoint はい https://localhost:8200 vaultへの接続に使用するURLをscheme://host:port形式で指定します。
Vault prefix いいえ /v1/secret/data/ vaultのパスまたはクエリに使用するカスタムプレフィックスを指定します。指定しない場合はデフォルト値が使用されます。
例: /v1/secret/data/zabbix/
Vault secret path はい データベースの認証情報をキー「password」および「username」で取得するシークレットへのパスを指定します。
例: database
Vault authentication type いいえ vaultの認証タイプを選択します。
Token - トークン認証を使用します。
AppRole - AppRole認証方式を使用します。
Vault authentication token はい シークレットパスへの読み取り専用アクセスに使用する認証トークンを指定します。
トークンおよびvaultポリシーの作成方法については、HashiCorpのドキュメントを参照してください。
このフィールドは、vaultの認証タイプとしてTokenを選択した場合のみ使用できます。
Vault authentication role ID はい AppRoleのロールIDを指定します。
AppRoleの詳細については、HashiCorpのドキュメントを参照してください。
このフィールドは、vaultの認証タイプとしてAppRoleを選択した場合のみ使用できます。
Vault authentication secret ID はい AppRoleに対して発行されたシークレットIDを指定します。
AppRoleの詳細については、HashiCorpのドキュメントを参照してください。
このフィールドは、vaultの認証タイプとしてAppRoleを選択した場合のみ使用できます。

ユーザーマクロ値の取得

Vault secret ユーザーマクロ値の保存に HashiCorp Vault を使用するには、以下を確認してください。

  • Zabbix サーバー/プロキシが HashiCorp Vault と連携するように設定されている。
  • 管理 > 一般設定 > その他 の Vault プロバイダー パラメータが「HashiCorp Vault」(デフォルト)に設定されている。

Zabbix サーバー(および設定されている場合は Zabbix プロキシ)には、Vault から Vault secret マクロ値へのアクセスが必要です。 Zabbix Webインターフェースには、このアクセスは必要ありません。

マクロ値には、参照パス(path:key 形式。例: macros:password)を指定する必要があります。 Zabbix サーバー/プロキシの設定時に VaultToken パラメータで指定した認証トークンには、このパスへの読み取り専用アクセス権が必要です。

Zabbix によるマクロ値の処理について詳しくは、Vault secret マクロを参照してください。

パス構文

スラッシュ("/")とコロン(":")の記号は予約されています。

スラッシュは、マウントポイントとパスを区切るためにのみ使用できます(例: secret/zabbix。この場合、マウントポイントは "secret"、パスは "zabbix" です)。Vaultマクロの場合、コロンはパス/クエリとキーを区切るためにのみ使用できます。

スラッシュとコロンの記号は、スラッシュで区切られる名前のマウントポイントを作成する必要がある場合(例: foo/bar/zabbix。この場合、マウントポイントは "foo/bar"、パスは "zabbix" であり、"foo%2Fbar/zabbix" としてエンコードできます)、またはマウントポイント名やパスにコロンを含める必要がある場合に、URLエンコードできます。

例

  1. Zabbix で、タイプが "Vault secret" で値が macros:password のユーザーマクロ {$PASSWORD} を追加します。

  1. 次の CLI コマンドを実行して、vault に必要な secret を作成します。
# "secret/" マウントポイントがまだ有効でない場合は有効化します。なお、"kv-v2" を使用する必要があります。
vault secrets enable -path=secret/ kv-v2

# マウントポイント "secret/" とパス "zabbix/macros" の下に、キー "password" を持つ新しい secret を追加します。
vault kv put -mount=secret zabbix/macros password=<password>

# secret が正常に追加されたことを確認します。
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
  1. その結果、Zabbix はマクロ {$PASSWORD} を次の値に解決します: <password>

既存の設定の更新

HashiCorp Vault からシークレットを取得するための既存の設定を更新するには、次の手順を実行します。

  1. データベース認証情報 セクションの説明に従って、Zabbix サーバーまたはプロキシの設定ファイルのパラメータを更新します。

  2. Zabbix の Webインターフェース設定ファイル のパラメータを更新します。

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

または、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. 必要に応じて、ユーザーマクロの値 セクションの説明に従ってユーザーマクロを設定します。

CyberArk Vault からシークレットを取得するための既存の設定を更新する方法については、CyberArk の設定 を参照してください。

トラブルシューティング

  1. Zabbixサーバー/プロキシのログファイルに、次のメッセージが表示される場合:
237839:20260729:130916.425 Vault token renew started to fail: cannot login into HashiCorp vault with AppRole method: unsuccessful response code "503"

考えられる原因: HashiCorp Vaultが(再)起動されたものの、unsealされていません(デフォルト設定ではunsealが必要です。Auto Unsealが設定されている場合は必要ありません)。

  1. Zabbixサーバー/プロキシのログファイルに、次のメッセージが表示される場合:
235545:20260729:125617.944 Vault token renew started to fail: cannot login into HashiCorp vault with AppRole method: unsuccessful response code "400"

または

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

考えられる原因: HashiCorp VaultでVaultAppSecretIDの有効期限が切れているか、使用回数の上限に達しています。