[comment]: # translation:outdated

[comment]: # ({f745f323-f745f323})
# 1 MySQLの暗号化設定

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

[comment]: # ({f87c5964-f87c5964})
### 概要

このセクションはCentOS8.2およびMySQL8.0.21の暗号化設定の例をいくつか示し、データベースへの接続を暗号化するためのクイックスタートガイドとして使用できます。

::: noteimportant
MySQLホストがlocalhostに設定されている場合、暗号化オプションは使用できません。この場合、Zabbixフロントエンドとデータベース間の接続はソケットファイル（Unixの場合）または共有メモリ（Windowsの場合）を使用し、暗号化できません。
:::

::: noteclassic
暗号化の組み合わせのリストは、このページにリストされているものに限定されません。利用できる組み合わせはもっとたくさんあります。
:::

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

[comment]: # ({30b5ee7b-30b5ee7b})
### 前提条件

[公式リポジトリ](https://dev.mysql.com/downloads/repo/yum/)からMySQLデータベースをインストールします。

MySQLリポジトリの使用方法詳細については[MySQLのドキュメント](https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/)を参照してください。

MySQLサーバーは、自己署名証明書を使用して安全な接続を受け入れる準備ができています。

暗号化された接続を使用しているユーザーを確認するには、次のクエリを実行します（パフォーマンススキーマをオンにする必要があります）：

    mysql> SELECT sbt.variable_value AS tls_version, t2.variable_value AS cipher, processlist_user AS user, processlist_host AS host 
                FROM performance_schema.status_by_thread  AS sbt
                JOIN performance_schema.threads AS t ON t.thread_id = sbt.thread_id
                JOIN performance_schema.status_by_thread AS t2 ON t2.thread_id = t.thread_id
                WHERE sbt.variable_name = 'Ssl_version' and t2.variable_name = 'Ssl_cipher'
                ORDER BY tls_version;

[comment]: # ({/30b5ee7b-30b5ee7b})

[comment]: # ({fda36821-fda36821})
### Required モード

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

[comment]: # ({eee25646-9ebeae19})
#### MySQLの設定

最新バージョンのデータベースは、'required'[暗号化モード](/manual/appendix/install/db_encrypt#terminology).ですぐに使用できます。サーバー側の証明書は、初期設定と起動後に作成されます。

主要コンポーネントのユーザーとロールを作成します：

    mysql> CREATE USER   
       'zbx_srv'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>',   
       'zbx_web'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>'
       REQUIRE SSL   
       PASSWORD HISTORY 5; 
       
       mysql> CREATE ROLE 'zbx_srv_role', 'zbx_web_role'; 
       
       mysql> GRANT SELECT, UPDATE, DELETE, INSERT, CREATE, DROP, ALTER, INDEX, REFERENCES ON zabbix.* TO 'zbx_srv_role'; 
       mysql> GRANT SELECT, UPDATE, DELETE, INSERT ON zabbix.* TO 'zbx_web_role'; 
       
       mysql> GRANT 'zbx_srv_role' TO 'zbx_srv'@'%'; 
       mysql> GRANT 'zbx_web_role' TO 'zbx_web'@'%'; 
       
       mysql> SET DEFAULT ROLE 'zbx_srv_role' TO 'zbx_srv'@'%'; 
       mysql> SET DEFAULT ROLE 'zbx_web_role' TO 'zbx_web'@'%';

X.509プロトコルはIDのチェックには使用されませんが、ユーザーは暗号化された接続のみを使用するように構成されていることに注意してください。ユーザーの構成の詳細については、[MySQLのドキュメント](https://dev.mysql.com/doc/refman/8.0/en/create-user.html#create-user-tls)を参照してください。

接続確認のため次を実行（ソケット接続を使用して安全な接続をテストすることはできません）：

    $ mysql -u zbx_srv -p -h 10.211.55.9 --ssl-mode=REQUIRED 

現在のステータスと利用可能な暗号スイートを確認：

    mysql> status
       --------------
       mysql Ver 8.0.21 for Linux on x86_64 (MySQL Community Server - GPL)
       
       Connection id: 62
       Current database:
       Current user: zbx_srv@bfdb.local
       SSL: Cipher in use is TLS_AES_256_GCM_SHA384
       
       
       mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher_list'\G;
       *************************** 1. row ***************************
       Variable_name: Ssl_cipher_list
       Value: TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-DSS-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES256-SHA:CAMELLIA256-SHA:CAMELLIA128-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA
       1 row in set (0.00 sec)
       
       ERROR:
       No query specified

[comment]: # ({/eee25646-9ebeae19})

[comment]: # ({68afdcc8-68afdcc8})
#### フロントエンド

Zabbixフロントエンドとデータベース間の接続でトランスポートのみの暗号化を有効にするには：

- *データベースのTLS暗号化*をチェック
- *データベース証明書の確認*をチェックしない

![](../../../../../assets/en/manual/appendix/install/encrypt_db_transport.png){width="600"}

[comment]: # ({/68afdcc8-68afdcc8})

[comment]: # ({99c0e65b-99c0e65b})
#### サーバ

サーバーとデータベース間の接続でトランスポートのみの暗号化を有効にするには、 */etc/zabbix/zabbix\_server.conf*を設定します。

    ...
    DBHost=10.211.55.9
    DBName=zabbix
    DBUser=zbx_srv
    DBPassword=<strong_password>
    DBTLSConnect=required
    ...

[comment]: # ({/99c0e65b-99c0e65b})

[comment]: # ({0c07a495-fa9ec203})
### Verify CA モード

必要なMySQLCAをZabbixフロントエンドサーバーにコピーし、Webサーバーがこのファイルを読み取れるように適切な権限を割り当てます。

::: noteclassic
古いMySQLライブラリが原因で、*Verify CA*モードはSLES12およびRHEL7で機能しません。
:::

[comment]: # ({/0c07a495-fa9ec203})

[comment]: # ({7a17ba03-9776435f})
#### フロントエンド

Zabbixフロントエンドとデータベース間接続の証明書検証による暗号化を有効にするには：

- *データベースTLS暗号化*と*データベース証明書の確認*をチェック
- データベースTLSCAファイルへのパスを指定

![](../../../../../assets/en/manual/appendix/install/encrypt_db_verify_ca.png){width="600"}

または*/etc/zabbix/web/zabbix.conf.php*で設定：

    ...
    $DB['ENCRYPTION'] = true;
    $DB['KEY_FILE'] = '';
    $DB['CERT_FILE'] = '';
    $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
    $DB['VERIFY_HOST'] = false;
    $DB['CIPHER_LIST'] = '';
    ...

コマンドラインツールを使用してユーザーのトラブルシューティングを行い、必要なユーザーが接続できるかどうかを確認します：

    $ mysql -u zbx_web -p -h 10.211.55.9 --ssl-mode=REQUIRED --ssl-ca=/var/lib/mysql/ca.pem

[comment]: # ({/7a17ba03-9776435f})

[comment]: # ({a7a54f92-a7a54f92})
#### サーバ

Zabbixサーバーとデータベース間の証明書検証による暗号化接続を有効にするには*/etc/zabbix/zabbix\_server.conf*を設定します：

    ...
    DBHost=10.211.55.9
    DBName=zabbix
    DBUser=zbx_srv
    DBPassword=<strong_password>
    DBTLSConnect=verify_ca
    DBTLSCAFile=/etc/ssl/mysql/ca.pem
    ...

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

[comment]: # ({fa5d4760-fa5d4760})
### Verify Full モード

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

[comment]: # ({95cd1995-22fb0ddd})
#### MySQLの設定

MySQL CEサーバー構成オプション(*/etc/my.cnf.d/server-tls.cnf*) を次のように設定します：

    [mysqld]
    ...
    #この例では、キーはMySQLCEdatadirディレクトリにあります
    ssl_ca=ca.pem
    ssl_cert=server-cert.pem
    ssl_key=server-key.pem
       
    require_secure_transport=ON
    tls_version=TLSv1.3
    ...

MySQL CEサーバーとクライアント（Zabbixフロントエンド）のキーは、MySQL CEのドキュメントに従って手動で作成する必要があります：[MySQLを使用したSSLおよびRSA証明書とキーの作成](https://dev.mysql.com/doc/refman/8.0/en/creating-ssl-rsa-files-using-mysql.html)または[opensslを使用したSSL証明書とキーの作成](https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-files-using-openssl.html)

::: noteimportant
ZabbixフロントエンドはDNS名を使用してデータベースまたはデータベースホストのIPアドレスと通信するため、MySQLサーバー証明書にはFQDN名に設定された共通名フィールドが含まれている必要があります。
:::

MySQLユーザーの作成：

    mysql> CREATE USER
         'zbx_srv'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>',
         'zbx_web'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>'
         REQUIRE X509
         PASSWORD HISTORY 5;

作成したユーザーでログインできるかを確認します。:

    $ mysql -u zbx_web -p -h 10.211.55.9 --ssl-mode=VERIFY_IDENTITY --ssl-ca=/var/lib/mysql/ca.pem --ssl-cert=/var/lib/mysql/client-cert.pem --ssl-key=/var/lib/mysql/client-key.pem

[comment]: # ({/95cd1995-22fb0ddd})

[comment]: # ({17934895-2f3a5c57})
#### フロントエンド

Zabbixフロントエンドとデータベース間の接続を完全に検証して暗号化を有効にするには：

- データベースTLS暗号化とデータベース証明書の確認をチェック
- データベースTLSキーファイルへのパスを指定
- データベースTLSCAファイルへのパスを指定
- データベースTLS証明書ファイルへのパスを指定

*データベースホストの検証*がチェックされ、グレーアウトされていることに注意してください。MySQLではこの手順をスキップできません。

::: notewarning
フロントエンドとサーバーが両方でサポートされているものから必要なものをネゴシエートできるように、暗号リストは空にする必要があります。
:::

![](../../../../../assets/en/manual/appendix/install/encrypt_db_verify_full1.png)

または*/etc/zabbix/web/zabbix.conf.php*で設定します：

       ...
       // Used for TLS connection with strictly defined Cipher list.
       $DB['ENCRYPTION'] = true;
       $DB['KEY_FILE'] = '/etc/ssl/mysql/client-key.pem';
       $DB['CERT_FILE'] = '/etc/ssl/mysql/client-cert.pem';
       $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
       $DB['VERIFY_HOST'] = true;
       $DB['CIPHER_LIST'] = 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GC';
       ...
       // or
       ...
       // Used for TLS connection without Cipher list defined - selected by MySQL server
       $DB['ENCRYPTION'] = true;
       $DB['KEY_FILE'] = '/etc/ssl/mysql/client-key.pem';
       $DB['CERT_FILE'] = '/etc/ssl/mysql/client-cert.pem';
       $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
       $DB['VERIFY_HOST'] = true;
       $DB['CIPHER_LIST'] = '';
       ...

[comment]: # ({/17934895-2f3a5c57})

[comment]: # ({c0090000-c0090000})
#### サーバー

Zabbixサーバーとデータベース間の接続を完全に検証して暗号化を有効にするには、*/etc/zabbix/zabbix\_server.conf*を設定します：

    ...
    DBHost=10.211.55.9
    DBName=zabbix
    DBUser=zbx_srv
    DBPassword=<strong_password>
    DBTLSConnect=verify_full
    DBTLSCAFile=/etc/ssl/mysql/ca.pem
    DBTLSCertFile=/etc/ssl/mysql/client-cert.pem
    DBTLSKeyFile=/etc/ssl/mysql/client-key.pem
    ...

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