このセクションでは、HashiCorp Vault KV Secrets Engine バージョン 2 からシークレットを取得するための Zabbix の設定方法について説明します。
Vault は、HashiCorp 公式ドキュメント の説明に従ってデプロイおよび設定する必要があります。
Zabbix での TLS 設定については、シークレットの保存 を参照してください。
データベース認証情報を含むシークレットを正常に取得するには、以下の両方を設定する必要があります。
Zabbix の サーバー または プロキシ を設定するには、 設定ファイルで以下の設定パラメータを指定します。
Vault
- 使用する Vault プロバイダーVaultToken
- Vault 認証トークン (詳細は Zabbix サーバー/プロキシ設定ファイルを参照)VaultURL
- Vault サーバーの HTTP[S] URLVaultDBPath
- データベース認証情報を含む 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
の両方のパラメータに値が含まれている場合はエラーになります。
例
Vault=HashiCorp
VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/
# まだ有効になっていない場合は、マウントポイント"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.conf.php
) を更新することで、データベースの認証情報を Vault から取得するように設定できます。
前回のフロントエンドのインストール以降に Vault の認証情報が変更されている場合は、フロントエンドのインストールを再実行するか、zabbix.conf.php
を更新してください。既存の設定の更新 も参照してください。
フロントエンドのインストール 中は、DB 接続の設定 ステップで設定パラメータを指定する必要があります。
パラメータ | 必須 | デフォルト値 | 説明 |
---|---|---|---|
Vault APIエンドポイント | はい | https://localhost:8200 | Vaultへの接続用URLをscheme://host:port の形式で指定します。 |
|Vaultプレフィックス|いいえ|/v1/secret/data/|Vaultパスまたはクエリにカスタムプレフィックスを指定します。指定しない場合はデフォルトが使用されます。
例: /v1/secret/data/zabbix/
| |Vaultシークレットパス|いいえ| |「password」および「username」キーを使用してデータベースの認証情報を取得するシークレットへのパス。
例: database
| |Vault認証トークン|いいえ| |シークレット パスへの読み取り専用アクセス用の認証トークンを提供します。
トークンとボールト ポリシーの作成については、HashiCorp のドキュメント を参照してください。|
Vault シークレット ユーザーマクロ値の保存に HashiCorp Vault を使用するには、以下の点を確認してください。
Vault から Vault シークレット マクロ値にアクセスする必要があるのは Zabbix サーバーのみです。
その他の Zabbix コンポーネント (プロキシ、フロントエンド) は、このようなアクセスを必要としません。
マクロ値には参照パス(path:key
形式、例: macros:password
)を含める必要があります。 Zabbix サーバー設定時に指定された認証トークン(VaultToken
パラメータ)は、このパスへの読み取り専用アクセスを提供する必要があります。
Zabbix によるマクロ値の処理の詳細については、Vault シークレット マクロ を参照してください。
パス構文
スラッシュ ("/") とコロン (":") は予約語です。
スラッシュは、マウントポイントとパスを区切る場合にのみ使用できます (例: secret/zabbix の場合、マウントポイントは"secret"、パスは"zabbix"です)。Vault マクロの場合、コロンはパス/クエリとキーを区切る場合にのみ使用できます。
マウントポイント名をスラッシュで区切って作成する必要がある場合 (例: foo/bar/zabbix の場合、マウントポイントは"foo/bar"、パスは"zabbix"です)、およびマウントポイント名またはパスにコロンを含める必要がある場合は、スラッシュとコロンを URL エンコードできます。
例
macros:password
であるユーザーマクロ {$PASSWORD} を追加します。# マウントポイント"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
HashiCorp Vault からシークレットを取得するための既存の設定を更新するには、以下の手順に従います。
データベース認証情報 セクションの説明に従って、Zabbix サーバーまたはプロキシの設定ファイルのパラメータを更新します。
フロントエンド セクションの説明に従って、Zabbix フロントエンドを再設定し、必要なパラメータを指定して、DB 接続設定を更新します。 Zabbix フロントエンドを再設定するには、ブラウザでフロントエンドのセットアップ URL を開きます。
または、以下のパラメータを フロントエンド設定ファイル (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 の設定 を参照してください。