[comment]: # ({22b96536-5407a56a})
# 5 データベースへの安全な接続

[comment]: # ({/22b96536-5407a56a})

[comment]: # ({b38f1bac-7cadd09e})
#### 概要

このセクションでは、以下の間で安全なTLS接続を行うためのZabbixのセットアップ手順と設定例を提供します。

|データベース|Zabbixコンポーネント|
|--------|-----------------|
|MySQL|Zabbixフロントエンド、Zabbixサーバー、Zabbixプロキシ|
|PostgreSQL|Zabbixフロントエンド、Zabbixサーバー、Zabbixプロキシ|

DBMS内での接続暗号化の設定については、詳細は公式ベンダーのドキュメントを参照してください。

-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/replication-encrypted-connections.html):
    ソースおよびレプリカのレプリケーションデータベースサーバー。
-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/group-replication-security.html):
    グループレプリケーションなどのデータベースサーバー。
-   [PostgreSQL](https://www.postgresql.org/docs/current/encryption-options.html)
    暗号化オプション。

すべての例は、CentOS 8の公式リポジトリで利用可能なMySQL CE（8.0）およびPgSQL（13）のGAリリースに基づいています。

[comment]: # ({/b38f1bac-7cadd09e})

[comment]: # ({b7e9dcca-5af34b43})
##### 要件

暗号化を設定するには、以下が必要です。

-   OpenSSL >=1.1.X または代替手段を備えた、開発元がサポートするオペレーティングシステム

::: noteclassic
 サポート終了（EOL）状態のOSは、特に新規インストールの場合、使用を避けることを推奨します。
:::

-   開発元が提供する公式リポジトリからインストールされ、保守されているデータベースエンジン（RDBMS）。オペレーティングシステムには、暗号化サポートが実装されていない古いバージョンのデータベースソフトウェアが同梱されていることが多く、たとえば RHEL 7 ベースのシステムや、暗号化をサポートしない PostgreSQL 9.2、MariaDB 5.5 などがあります。

[comment]: # ({/b7e9dcca-5af34b43})

[comment]: # ({53676bc9-9801ac5b})
##### 用語

このオプションを設定すると、Zabbixサーバー/プロキシおよびフロントエンドからデータベースへのTLS接続が強制されます。

-   `required` - アイデンティティチェックなしでTLSをトランスポートモードとして接続
-   `verify_ca` - TLSで接続し、証明書を検証
-   `verify_full` - TLSで接続し、証明書を検証し、DBHostで指定されたデータベースのアイデンティティ（CN）が証明書と一致することを検証

[comment]: # ({/53676bc9-9801ac5b})

[comment]: # ({84f30836-84f30836})
#### Zabbixの設定

[comment]: # ({/84f30836-84f30836})

[comment]: # ({fbdb2d57-b1071a8a})
##### Webインターフェースからデータベースへ

データベースへの安全な接続は、Webインターフェースのインストール時に設定できます。

-   [Configure DB connection](/manual/installation/frontend#configure_db_connection) ステップで *Database TLS encryption* チェックボックスをオンにすると、通信の暗号化が有効になります。
-   *TLS encryption* フィールドがチェックされている場合に表示される *Verify database certificate* チェックボックスをオンにすると、証明書を使用した暗号化が有効になります。

::: noteclassic
 MySQL では、*Database host* が localhost に設定されている場合、*Database TLS encryption* チェックボックスは無効になります。これは、ソケットファイル（Unix 上）または共有メモリ（Windows 上）を使用する接続は暗号化できないためです。<br>
PostgreSQL では、*Database host* フィールドの値がスラッシュで始まる場合、またはフィールドが空の場合、*TLS encryption* チェックボックスは無効になります。

:::

両方のチェックボックスをオンにすると、証明書モードの TLS 暗号化で以下のパラメータが使用可能になります。

|Parameter|Description|
|--|--------|
|*Database TLS CA file*|有効な TLS 証明書認証局（CA）ファイルへのフルパスを指定します。|
|*Database TLS key file*|有効な TLS キーファイルへのフルパスを指定します。|
|*Database TLS certificate file*|有効な TLS 証明書ファイルへのフルパスを指定します。|
|*Database host verification*|このチェックボックスをオンにすると、ホスト検証が有効になります。<br>PHP の MySQL ライブラリではピア証明書の検証手順をスキップできないため、MYSQL では無効です。|
|*Database TLS cipher list*|有効な暗号スイートのカスタムリストを指定します。暗号スイートリストの形式は OpenSSL 標準に準拠している必要があります。<br>MySQL でのみ使用できます。|

::: noteimportant
TLS パラメータは有効なファイルを指している必要があります。存在しないファイルまたは無効なファイルを指している場合、認証エラーの原因となります。<br>
証明書ファイルに書き込み権限がある場合、Webインターフェースは [System information](/manual/web_interface/frontend_sections/reports/status_of_zabbix) レポートに「TLS certificate files must be read-only.」という警告を生成します（PHP ユーザーが証明書の所有者である場合にのみ表示されます）。

パスワードで保護された証明書はサポートされていません。 
:::

[comment]: # ({/fbdb2d57-b1071a8a})

[comment]: # ({18fae872-d4fd87a2})
##### 使用例

Zabbixフロントエンドは、GUIインターフェースを使用して可能なオプションを定義します: `required`、`verify_ca`、`verify_full`。インストールウィザードの*DB接続の設定*ステップで必要なオプションを指定します。これらのオプションは、設定ファイル(zabbix.conf.php)に次のようにマッピングされます:

|GUI設定|設定ファイル|説明|結果|
|----|----|----|----|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_transport.png)|...<br>// TLS接続に使用。<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '';<br>$DB\['CERT\_FILE'\] = '';<br>$DB\['CA\_FILE'\] = '';<br>$DB\['VERIFY\_HOST'\] = false;<br>$DB\['CIPHER\_LIST'\] = '';<br>...|*データベースTLS暗号化*をチェック<br>*データベース証明書の検証*はチェックしない|`required`モードを有効化|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_ca.png)|...<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '';<br>$DB\['CERT\_FILE'\] = '';<br>$DB\['CA\_FILE'\] = '/etc/ssl/mysql/ca.pem';<br>$DB\['VERIFY\_HOST'\] = false;<br>$DB\['CIPHER\_LIST'\] = '';<br>...|1. *データベースTLS暗号化*と*データベース証明書の検証*をチェック<br>2. *データベースTLS CAファイル*のパスを指定|`verify_ca`モードを有効化|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_full1.png)|...<br>// 厳密に定義されたCipherリストでTLS接続に使用。<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\_FILE'\] = '<key\_file\_path>';<br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\_HOST'\] = true;<br>$DB\['CIPHER\_LIST'\] = '<cipher\_list>';<br>...<br><br>または:<br><br>...<br>// Cipherリストが定義されていないTLS接続に使用 - MySQLサーバーによって選択される<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\_FILE'\] = '<key\_file\_path>';<br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\_HOST'\] = true;<br>$DB\['CIPHER\_LIST'\] = '';<br>...|1. *データベースTLS暗号化*と*データベース証明書の検証*をチェック<br>2. *データベースTLSキー・ファイル*のパスを指定<br>3. *データベースTLS CAファイル*のパスを指定<br>4. *データベースTLS証明書ファイル*のパスを指定<br>5. *データベースTLS暗号スイートリスト*を指定(任意)|MySQLの`verify_full`モードを有効化|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_full2.png)|...<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\_FILE'\] = '<key\_file\_path>';<br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\_HOST'\] = true;<br>$DB\['CIPHER\_LIST'\] = ' ';<br>...<br>|1. *データベースTLS暗号化*と*データベース証明書の検証*をチェック<br>2. *データベースTLSキー・ファイル*のパスを指定<br>3. *データベースTLS CAファイル*のパスを指定<br>4. *データベースTLS証明書ファイル*のパスを指定<br>5. *データベースホストの検証*をチェック|PostgreSQLの`verify_full`モードを有効化|

**関連情報:** [MySQLの暗号化設定例](/manual/appendix/install/db_encrypt/mysql)、[PostgreSQLの暗号化設定例](/manual/appendix/install/db_encrypt/postgres)

[comment]: # ({/18fae872-d4fd87a2})

[comment]: # ({b504a368-9cfb91d1})
#### Zabbixサーバー/プロキシの設定

データベースへの安全な接続は、Zabbixの[サーバー](/manual/appendix/config/zabbix_server)および/または[プロキシ](/manual/appendix/config/zabbix_proxy)の設定ファイルで、それぞれのパラメータを使用して設定できます。

|設定|結果|
|--|--|
|なし|暗号化なしでデータベースに接続します。|
|1. `DBTLSConnect=required`を設定|サーバー/プロキシはデータベースにTLS接続を行います。暗号化されていない接続は許可されません。|
|1. `DBTLSConnect=verify_ca`を設定<br>2. `DBTLSCAFile`を設定 - TLS証明書認証局ファイルを指定|サーバー/プロキシは、データベース証明書を検証した後、データベースにTLS接続を行います。|
|1. `DBTLSConnect=verify_full`を設定<br>2. `DBTLSCAFile`を設定 - TLS証明書認証局ファイルを指定|サーバー/プロキシは、データベース証明書およびデータベースホストの識別を検証した後、データベースにTLS接続を行います。|
|1. `DBTLSCAFile`を設定 - TLS証明書認証局ファイルを指定<br>2. `DBTLSCertFile`を設定 - クライアント公開鍵証明書ファイルを指定<br>3. `DBTLSKeyFile`を設定 - クライアント秘密鍵ファイルを指定|サーバー/プロキシは、データベースに接続する際にクライアント証明書を提供します。|
|1. `DBTLSCipher`を設定 - クライアントがTLS 1.2までのプロトコルでの接続に許可する暗号スイートのリスト<br><br>または`DBTLSCipher13` - クライアントがTLS 1.3プロトコルでの接続に許可する暗号スイートのリスト|(MySQL) 提供されたリストから暗号スイートを使用してTLS接続が行われます。<br>(PostgreSQL) このオプションを設定するとエラーとみなされます。|

[comment]: # ({/b504a368-9cfb91d1})
