HashiCorp設定

概要

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

Vault は、公式の HashiCorp documentation に記載されているとおりにデプロイおよび設定されている必要があります。

Zabbix での TLS の設定については、Storage of secrets を参照してください。

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

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

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

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

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

Vault, VaultToken, VaultURL, および VaultPrefix の設定パラメータは、Zabbix サーバー(および 設定済み の場合は Zabbix プロキシ)がシークレット vault マクロを処理する際の vault 認証にも使用されます。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 vault に接続するための URL を scheme://host:port 形式で指定します
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 と連携するように 設定 されている。
  • Administration > General > OtherVault 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. 次の 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. Database credentials セクションの説明に従って、サーバーまたはプロキシの設定ファイルのパラメータを更新します。

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

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

    あるいは、これらのパラメータは frontend configuration file (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. 必要に応じて、User macro values セクションの説明に従ってユーザーマクロを設定します。

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