[comment]: # translation:outdated

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

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

[comment]: # ({a2f8fc5d-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-solutions-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):暗号化オプション

すべての例は、AlmaLinux 8の公式リポジトリから入手できるMySQL CE（8.0）およびPgSQL（13）のGAリリースに基づいています。

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

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

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

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

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

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

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

[comment]: # ({9801ac5b-9801ac5b})
##### 専門用語

このオプションを設定すると、Zabbixサーバー/プロキシやフロントエンドからのデータベース接続にはTLS接続を使用します。

- required - IDチェックなしでトランスポートモードとしてTLSを使用して接続します。
- verify\_ca - TLSを使用して接続し、証明書を検証します。
- verify\_full - TLSを使用して接続し、証明書を検証し、DBHostによって指定されたデータベースID（CN）がその証明書と一致することを確認します。

[comment]: # ({/9801ac5b-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]: # ({d4fd87a2-d4fd87a2})
##### ユースケース

ZabbixフロントエンドはGUIインターフェースを使用してオプションを定義します:required,verify\_ca, verify\_full. 
インストールウィザードの*DB接続設定*で必要なオプションを指定します。
これらのオプションは設定ファイル（zabbix.conf.php）に次のようにマップされます。

|GUIの設定|設定ファイル|説明|結果|
|------------|------------------|-----------|------|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_transport.png)|...<br>// Used for TLS connection.<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暗号化*を確認する*データベース証明書の確認*をオフのままにします|'required' モードが有効|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_ca.png)|...<br>$DB\['ENCRYPTION'\] = true;\\\\ $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\.*データベースTLSCAファイル*へのパスを指定します。|'verify\_ca'モードが有効|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_full1.png)|...<br>// Used for TLS connection with strictly defined Cipher list.<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>Or:<br><br>...<br>// Used for TLS connection without Cipher list defined - selected by MySQL server<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\.*データベースTLSCAファイル*へのパスを指定します。<br>4\.*データベースTLS証明書ファイル*へのパスを指定します<br>6\. 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\.*データベースTLSCAファイル*へのパスを指定します<br>4\.*データベースTLS証明書ファイル*へのパスを指定します<br>6\.*データベースホストの検証*をチェックします|PostgreSQLで 'verify\_full' モードが有効|

**関連項目：**  [Encryption configuration examples for MySQL](/manual/appendix/install/db_encrypt/mysql), [Encryption configuration examples for PostgreSQL](/manual/appendix/install/db_encrypt/postgres).

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

[comment]: # ({2d8949fc-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認証局ファイルを指定|サーバー/プロキシは、データベース証明書とデータベースホストIDを確認した後、データベースへTLS接続します。|
|1\. DBTLSCAFileにTLS認証局ファイルを指定<br>2\. DBTLSCertFileにクライアントの公開鍵証明書ファイルを指定<br>3.\ DBTLSKeyFileに クライアントの秘密鍵ファイルを指定|サーバー/プロキシは、データベースへの接続中にクライアント証明書を提供します。|
|1\.1.DBTLSCipherにクライアントがTLS1.2までのTLSプロトコルを使用した接続を許可する暗号化暗号のリストをセット<br>または<br>
DBTLSCipher13にクライアントがTLS1.3プロトコルを使用した接続に許可する暗号化暗号のリストをセット|（MySQL）TLS接続は、提供されたリストの暗号を使用して行われます。<br>（PostgreSQL）このオプションを設定すると、エラーと見なされます。|

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