5 データベースへの安全な接続

概要

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

データベース Zabbixコンポーネント
MySQL Zabbix Webインターフェース、Zabbix サーバー、Zabbix プロキシ
PostgreSQL Zabbix Webインターフェース、Zabbix サーバー、Zabbix プロキシ

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

  • MySQL: ソースおよびレプリカのレプリケーション用データベースサーバー。
  • MySQL: グループレプリケーションなどのデータベースサーバー。
  • PostgreSQL 暗号化オプション。

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

要件

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

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

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

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

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

  • required - 識別情報の検証を行わず、トランスポートモードとしてTLSを使用して接続します
  • verify_ca - TLSを使用して接続し、証明書を検証します
  • verify_full - TLSを使用して接続し、証明書を検証するとともに、DBHostで指定されたデータベースの識別情報(CN)がその証明書と一致することを検証します

Zabbixの設定

Webインターフェースからデータベースへ

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

  • DB接続の設定 ステップで Database TLS encryption チェックボックスをオンにすると、通信の暗号化が有効になります。
  • TLS encryption フィールドがチェックされている場合に表示される Verify database certificate チェックボックスをオンにすると、証明書を使用した暗号化が有効になります。

MySQL では、Database host が localhost に設定されている場合、Database TLS encryption チェックボックスは無効になります。これは、ソケットファイル(Unix)または共有メモリ(Windows)を使用する接続は暗号化できないためです。
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 このチェックボックスをオンにすると、ホスト検証が有効になります。
PHP の MySQL ライブラリではピア証明書の検証手順をスキップできないため、MYSQL では無効です。
Database TLS cipher list 有効な暗号スイートのカスタムリストを指定します。暗号スイートリストの形式は OpenSSL 標準に準拠している必要があります。
MySQL でのみ利用可能です。

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

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

ユースケース

ZabbixのWebインターフェースでは、GUIインターフェースを使用して、使用可能なオプション requiredverify_caverify_full を定義します。必要なオプションは、インストール ウィザードの Configure DB connections ステップで指定します。これらのオプションは、 以下のように設定ファイル (zabbix.conf.php) にマッピングされます。

GUI設定 設定ファイル 説明 結果
...
// TLS接続に使用。
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
Database TLS encryption をチェックする
Verify database certificate は未チェックのままにする
required モードを有効にします。
...
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
1. Database TLS encryptionVerify database certificate をチェックする
2. Database TLS CA file へのパスを指定する
verify_ca モードを有効にします。
...
// 厳密に定義されたCipherリストを使用するTLS接続に使用。
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = '<cipher_list>';
...

または:

...
// Cipherリストを定義しないTLS接続に使用 - MySQLサーバーによって選択される
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = '';
...
1. Database TLS encryptionVerify database certificate をチェックする
2. Database TLS key file へのパスを指定する
3. Database TLS CA file へのパスを指定する
4. Database TLS certificate file へのパスを指定する
5. Database TLS cipher list を指定する(任意)
MySQLで verify_full モードを有効にします。
...
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '<key_file_path>';
$DB['CERT_FILE'] = '<key_file_path>';
$DB['CA_FILE'] = '<key_file_path>';
$DB['VERIFY_HOST'] = true;
$DB['CIPHER_LIST'] = ' ';
...
1. Database TLS encryptionVerify database certificate をチェックする
2. Database TLS key file へのパスを指定する
3. Database TLS CA file へのパスを指定する
4. Database TLS certificate file へのパスを指定する
5. Database host verification をチェックする
PostgreSQLで verify_full モードを有効にします。

関連項目: MySQLの暗号化設定例, PostgreSQLの暗号化設定例

Zabbix サーバー/プロキシの設定

データベースへのセキュアな接続は、Zabbixのserverおよび/またはproxy設定ファイル内の対応する パラメータで設定できます。

設定 結果
なし 暗号化なしでデータベースに接続します。
1. DBTLSConnect=required を設定 サーバー/プロキシはデータベースにTLS接続します。暗号化されていない接続は許可されません。
1. DBTLSConnect=verify_ca を設定
2. DBTLSCAFile を設定 - TLS認証局ファイルを指定
サーバー/プロキシは、データベース証明書を検証した後にデータベースへTLS接続します。
1. DBTLSConnect=verify_full を設定
2. DBTLSCAFile を設定 - TLS認証局ファイルを指定
サーバー/プロキシは、データベース証明書とデータベースホストの識別情報を検証した後にデータベースへTLS接続します。
1. DBTLSCAFile を設定 - TLS認証局ファイルを指定
2. DBTLSCertFile を設定 - クライアント公開鍵証明書ファイルを指定
3. DBTLSKeyFile を設定 - クライアント秘密鍵ファイルを指定
サーバー/プロキシは、データベースへの接続時にクライアント証明書を提供します。
1. DBTLSCipher を設定 - クライアントがTLS 1.2までのTLSプロトコルを使用する接続で許可する暗号スイートの一覧

または DBTLSCipher13 - クライアントがTLS 1.3プロトコルを使用する接続で許可する暗号スイートの一覧
(MySQL) 提供された一覧の暗号スイートを使用してTLS接続が行われます。
(PostgreSQL) このオプションを設定するとエラーと見なされます。