[comment]: # translation:outdated

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

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

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

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

|データベース|Zabbixコンポーネント|
|--------|-----------------|
|MySQL|Zabbix Webインターフェース、Zabbix サーバー、Zabbix プロキシ|
|PostgreSQL|Zabbix Webインターフェース、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]: # ({5af34b43-5af34b43})
##### 要件

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

- デベロッパーサポートされているOSとOpenSSL1.1.X以上 または OpenSSLの代用品。

::: noteclassic
特に新規インストールの場合は、サポート終了したOSは避けることをお勧めします。
:::

- デベロッパーが提供する公式リポジトリからインストールおよび保守されるデータベースエンジン（RDBMS）やオペレーティングシステムには、暗号化サポートが実装されていない古いバージョンのデータベースソフトウェアが付属していることがよくあります。たとえば、RHEL7ベースのシステムでのPostgreSQL9.2や暗号化サポートのないMariaDB5.5などです。

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

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

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

-   `required` - IDの検証を行わず、転送モードとしてTLSを使用して接続します
-   `verify_ca` - TLSを使用して接続し、証明書を検証します
-   `verify_full` - TLSを使用して接続し、証明書を検証し、さらにDBHostで指定されたデータベースのID（CN）がその証明書と一致することを検証します

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

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

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

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

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

- トランスポート暗号化を有効にするには[データベース接続設定](/manual/installation/frontend#configure_db_connection)ステップで*データベースのTLS暗号化*チェックボックスをオンにします。
- 証明書による暗号化を有効にするには、*TLS暗号化*フィールドがオンになっている場合に表示される*データベースの証明書確認*チェックボックスをオンにします。

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

次のパラメータは、証明書モードのTLS暗号化で使用可能になります。（両方のチェックボックスがマークされている場合）

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

::: noteimportant
TLSパラメータは有効なファイルを指している必要があります。存在しないファイルまたは無効なファイルを指している場合は、認証エラーが発生します。
証明書ファイルが書き込み可能である場合、Webインターフェースは[システム情報](/manual/web_interface/frontend_sections/reports/status_of_zabbix)レポートに「データベースのTLS証明書ファイルは読み込み専用にしてください」という警告を表示します。 （PHPユーザーが証明書の所有者である場合にのみ表示されます）。

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

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

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

ZabbixのWebインターフェースでは、GUIインターフェースを使用して、利用可能なオプション `required`、`verify_ca`、`verify_full` を定義します。必要なオプションは、インストールウィザードの *Configure DB connections* ステップで指定します。これらのオプションは、次のように設定ファイル (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>...|*Database TLS encryption* をチェックする<br>*Verify database certificate* は未チェックのままにする|`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\. *Database TLS encryption* と *Verify database certificate* をチェックする<br>2. *Database TLS CA file* のパスを指定する|`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\. *Database TLS encryption* と *Verify database certificate* をチェックする<br>2. *Database TLS key file* のパスを指定する<br>3. *Database TLS CA file* のパスを指定する<br>4. *Database TLS certificate file* のパスを指定する<br>5. *Database TLS cipher list* を指定する（任意）|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\. *Database TLS encryption* と *Verify database certificate* をチェックする<br>2. *Database TLS key file* のパスを指定する<br>3. *Database TLS CA file* のパスを指定する<br>4. *Database TLS certificate file* のパスを指定する<br>5. *Database host verification* をチェックする|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の[server](/manual/appendix/config/zabbix_server)および/または[proxy](/manual/appendix/config/zabbix_proxy)設定ファイル内のそれぞれの
パラメータで設定できます。

|Configuration|Result|
|--|--|
|なし|暗号化なしでデータベースに接続します。|
|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までのTLSプロトコルを使用する接続で許可する暗号スイートの一覧<br><br>または `DBTLSCipher13` - クライアントがTLS 1.3プロトコルを使用する接続で許可する暗号スイートの一覧|(MySQL) 提供された一覧の暗号スイートを使用してTLS接続が確立されます。<br>(PostgreSQL) このオプションを設定するとエラーと見なされます。|

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