[comment]: # ({4dc10e58-317d63e9})
# 2 HashiCorpの設定

[comment]: # ({/4dc10e58-317d63e9})

[comment]: # ({8d9b38bd-fdcfe831})
#### 概要

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

Vault は、公式の [HashiCorp ドキュメント](https://www.vaultproject.io/docs/secrets/kv/kv-v2) に記載されているとおりにデプロイおよび設定する必要があります。

Zabbix で TLS を設定する方法については、[*シークレットの保存*](/manual/config/secrets#configuring-tls) を参照してください。

[comment]: # ({/8d9b38bd-fdcfe831})

[comment]: # ({4abbcd52-9c0ce526})
#### データベース認証情報の取得

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

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

##### サーバー/プロキシ

Zabbix [サーバー](/manual/concepts/server/server_params) または [プロキシ](/manual/concepts/proxy/proxy_params) を設定するには、  
設定ファイルで次の設定パラメータを指定します。

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

:::noteimportant
`Vault`、`VaultToken`、`VaultURL`、および `VaultPrefix` の設定パラメータは、Zabbix サーバーが secret vault マクロを処理する際の vault 認証にも使用されます（また、[設定済み](/manual/web_interface/frontend_sections/administration/general#other) の場合は Zabbix プロキシも同様です）。Zabbix サーバーおよびプロキシは、VaultDBPath から DB 認証情報を含む vault secret マクロを開きません。<br><br>
異なるプロキシごとに異なるトークンを使用することを強く推奨します。
:::

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

[comment]: # ({/4abbcd52-9c0ce526})

[comment]: # ({901bf5bb-19842818})
**例**

1. *zabbix_server.conf*で、以下のパラメータを指定します。

```ini
Vault=HashiCorp
VaultToken=hvs.CAESIIG_PILmULFYOsEyWHxkZ2mF2a8VPKNLE8eHqd4autYGGh4KHGh2cy5aeTY0NFNSaUp3ZnpWbDF1RUNjUkNTZEg
VaultURL=https://127.0.0.1:8200
VaultDBPath=database
VaultPrefix=/v1/secret/data/zabbix/
```

2. 必要なシークレットをボールトに作成するために、以下のCLIコマンドを実行します。

```bash
# まだ有効化されていない場合は "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
```

3. その結果、Zabbixサーバーはデータベース認証のために以下の認証情報を取得します。

-   ユーザー名: zabbix
-   パスワード: <password>

[comment]: # ({/901bf5bb-19842818})

[comment]: # ({26ba1bdc-0cae9564})
##### Webインターフェース

ZabbixのWebインターフェースは、vaultからデータベース認証情報を取得するよう設定できます。これは、Webインターフェースの[インストール](/manual/installation/frontend)時、またはWebインターフェース設定ファイル（`zabbix.conf.php`）を更新することで行えます。 

:::noteimportant
前回のWebインターフェースのインストール以降にvault認証情報が変更されている場合は、Webインターフェースのインストールを再実行するか、`zabbix.conf.php`を更新してください。あわせて[既存設定の更新](#updating-existing-configuration)も参照してください。
:::
  
**Webインターフェースのインストール中**は、設定パラメータを*Configure DB Connection*ステップで指定する必要があります。

![](../../../../assets/en/manual/config/hashicorp_setup.png){width="600"}
  
-   *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のパスまたはクエリに使用するカスタムプレフィックスを指定します。指定しない場合はデフォルト値が使用されます。<br>例: `/v1/secret/data/zabbix/`|
|*Vault secret path*|no| |データベースの認証情報を取得するシークレットへのパスです。認証情報はキー"password"および"username"から取得されます。<br>例: `database`|
|*Vault authentication token*|no| |シークレットパスへの読み取り専用アクセス用の認証トークンを指定します。<br>トークンおよびvaultポリシーの作成方法については、[HashiCorp documentation](https://learn.hashicorp.com/tutorials/vault/tokens)を参照してください。|

[comment]: # ({/26ba1bdc-0cae9564})

[comment]: # ({9d96212b-2e69e703})
#### ユーザーマクロ値の取得

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

- Zabbixサーバー/プロキシが、HashiCorp Vaultと連携するように[設定](/manual/config/secrets/hashicorp#serverproxy)されていること。
- [*管理 → 一般 → その他*](/manual/web_interface/frontend_sections/administration/general#other)の *Vault provider* パラメータが「HashiCorp Vault」（デフォルト）に設定されていること。

![](../../../../assets/en/manual/config/provider_hashicorp.png)

:::noteclassic
Zabbixサーバー（および、[設定](/manual/web_interface/frontend_sections/administration/general#other)されている場合はZabbixプロキシ）は、vaultから *Vault secret* マクロ値にアクセスできる必要があります。  
Zabbix Webインターフェースには、そのようなアクセスは必要ありません。
:::

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

マクロ値のZabbixによる処理の詳細については、[*Vault secret macros*](/manual/config/macros/secret_macros#vault-secret)を参照してください。

[comment]: # ({/9d96212b-2e69e703})

[comment]: # ({0481f8ba-b5cf890a})
**パス構文**

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

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

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

[comment]: # ({/0481f8ba-b5cf890a})

[comment]: # ({9f72277f-0c64c650})
**例**

1. Zabbixで、タイプ「Vaultシークレット」のユーザーマクロ{$PASSWORD}を追加し、値を`macros:password`に設定します。

![](../../../../assets/en/manual/config/hashi_macro.png)

2. 必要なシークレットをVaultに作成するために、以下のCLIコマンドを実行します。

```bash
# まだ有効化されていない場合は、"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
```

3. その結果、Zabbixはマクロ{$PASSWORD}を値<password>に解決します。

[comment]: # ({/9f72277f-0c64c650})

[comment]: # ({e1678ca3-d8c23996})
#### 既存の設定の更新

HashiCorp Vault からシークレットを取得するための既存の設定を更新するには:

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

2. [*フロントエンド*](#frontend) セクションで説明されているように、Zabbix フロントエンドを再設定し、必要なパラメーターを指定して DB 接続設定を更新します。
Zabbix フロントエンドを再設定するには、ブラウザでフロントエンドセットアップ URL を開きます:

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

または、これらのパラメーターは [フロントエンド設定ファイル](/manual/installation/frontend#install) (*zabbix.conf.php*) で設定できます:

```ini
$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/';
```

3. 必要に応じて、[*ユーザーマクロ値*](#frontend) セクションで説明されているようにユーザーマクロを設定します。

CyberArk Vault からシークレットを取得するための既存の設定を更新するには、[*CyberArk の設定*](/manual/config/secrets/cyberark#update-existing-configuration) を参照してください。

[comment]: # ({/e1678ca3-d8c23996})
