2 HashiCorpの設定

概要

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

Vault は、HashiCorp 公式ドキュメント の説明に従ってデプロイおよび設定する必要があります。

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

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

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

  • 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 認証に VaultVaultTokenVaultURL、および VaultPrefix 設定パラメータも使用します。

Zabbix サーバーと Zabbix プロキシは、起動時に zabbix_server.confzabbix_proxy.conf から Vault 関連の設定パラメータを読み込みます。 さらに、Zabbix サーバーと Zabbix プロキシは起動時に VAULT_TOKEN 環境変数を一度読み取り、フォークされたスクリプトから使用できないように設定を解除します。 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. 以下の 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
  1. 結果として、Zabbixサーバーはデータベース認証のために以下の認証情報を取得します。
  • ユーザー名: zabbix
  • パスワード: <password>
フロントエンド

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

前回のフロントエンドのインストール以降に Vault の認証情報が変更されている場合は、フロントエンドのインストールを再実行するか、zabbix.conf.php を更新してください。既存の設定の更新 も参照してください。

フロントエンドのインストール 中は、DB 接続の設定 ステップで設定パラメータを指定する必要があります。

  • 認証情報の保存場所 パラメータを "HashiCorp Vault" に設定してください。
  • 接続パラメータを指定します。
パラメータ 必須 デフォルト値 説明
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 を使用するには、以下の点を確認してください。

  • Zabbix サーバーが HashiCorp Vault と連携するように 設定 されている。
  • 管理 → 一般 → その他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 エンコードできます。

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

  1. 以下の 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
  1. 結果として、Zabbix はマクロ {$PASSWORD} を <password> という値に解決します。

既存の設定の更新

HashiCorp Vault からシークレットを取得するための既存の設定を更新するには、以下の手順に従います。

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

  2. フロントエンド セクションの説明に従って、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/';
  1. 必要に応じて、ユーザーマクロの値 セクションの説明に従ってユーザーマクロを設定します。

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