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

概要

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

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

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

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

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

要件

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

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

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

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

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

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

Zabbixの設定

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

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

  • Configure DB connection ステップで 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フロントエンドは、GUIインターフェースを使用して可能なオプションを定義します: requiredverify_caverify_full。インストールウィザードのDB接続の設定ステップで必要なオプションを指定します。これらのオプションは、設定ファイル(zabbix.conf.php)に次のようにマッピングされます:

GUI設定 設定ファイル 説明 結果
...
// TLS接続に使用。
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
データベースTLS暗号化をチェック
データベース証明書の検証はチェックしない
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. データベースTLS暗号化データベース証明書の検証をチェック
2. データベースTLS CAファイルのパスを指定
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. データベースTLS暗号化データベース証明書の検証をチェック
2. データベースTLSキー・ファイルのパスを指定
3. データベースTLS CAファイルのパスを指定
4. データベースTLS証明書ファイルのパスを指定
5. データベースTLS暗号スイートリストを指定(任意)
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. データベースTLS暗号化データベース証明書の検証をチェック
2. データベースTLSキー・ファイルのパスを指定
3. データベースTLS CAファイルのパスを指定
4. データベースTLS証明書ファイルのパスを指定
5. データベースホストの検証をチェック
PostgreSQLのverify_fullモードを有効化

関連情報: MySQLの暗号化設定例PostgreSQLの暗号化設定例

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

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

設定 結果
なし 暗号化なしでデータベースに接続します。
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までのプロトコルでの接続に許可する暗号スイートのリスト

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