2 HashiCorpの設定

概要

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

vault は、公式の HashiCorp ドキュメント に記載されているとおりにデプロイおよび設定する必要があります。

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

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

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

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

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

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

VaultVaultTokenVaultURLVaultPrefix の各設定パラメータは、Zabbix サーバーがシークレット vault マクロを処理する際の vault 認証にも使用されます(設定されている 場合は Zabbix プロキシでも使用されます)。Zabbix サーバーおよび Zabbix プロキシは、VaultDBPath の DB 認証情報を含む vault シークレットマクロを展開しません。

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

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

  1. zabbix_server.conf で、以下のパラメータを指定します。
Vault=HashiCorp
VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/
  1. vault に必要なシークレットを作成するため、以下のCLIコマンドを実行します。
# まだ有効になっていない場合は "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インターフェースのインストールを再実行するか、zabbix.conf.phpを更新してください。あわせて既存設定の更新も参照してください。

Webインターフェースのインストール中は、Configure DB Connectionステップで設定パラメータを指定する必要があります。

  • Store credentials inパラメータを「HashiCorp Vault」に設定します。
  • 接続パラメータを指定します。
Parameter Mandatory Default value Description
Vault API endpoint yes https://localhost:8200 scheme://host:port形式で、vaultへの接続に使用するURLを指定します
Vault prefix no /v1/secret/data/ vaultのパスまたはクエリに使用するカスタムプレフィックスを指定します。指定しない場合は、デフォルト値が使用されます。
例: /v1/secret/data/zabbix/
Vault secret path no データベースの認証情報を取得するシークレットへのパスです。認証情報は、キー「password」および「username」から取得されます。
例: database
Vault authentication token no シークレットパスへの読み取り専用アクセス用の認証トークンを指定します。
トークンおよびvaultポリシーの作成方法については、HashiCorp documentationを参照してください。

ユーザーマクロ値の取得

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

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

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

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

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

パス構文

スラッシュ ("/") とコロン (":") は予約済みの記号です。

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

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

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

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

# マウントポイント "secret/"、パス "zabbix/macros" の下に、キー "password" を持つ新しいシークレットを登録します。
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
  1. その結果、Zabbixはマクロ {$PASSWORD} を次の値に解決します: <password>

既存の設定の更新

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

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

  2. Webインターフェース セクションで説明されているように、Zabbix Webインターフェースを再設定して必要なパラメータを指定し、DB 接続設定を更新します。
    Zabbix Webインターフェースを再設定するには、ブラウザで Webインターフェースのセットアップ URL を開きます。

  • Apache の場合: http://<server_ip_or_name>/zabbix/setup.php
  • Nginx の場合: http://<server_ip_or_name>/setup.php

または、これらのパラメータは Webインターフェース設定ファイル (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/';
  1. 必要に応じて、ユーザーマクロの値 セクションで説明されているように、ユーザーマクロを設定します。

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