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

概要

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

Database Zabbix components
MySQL Zabbix Webインターフェース, Zabbix サーバー, Zabbix プロキシ
PostgreSQL Zabbix Webインターフェース, Zabbix サーバー, Zabbix プロキシ

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

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

すべての例は、CentOS 8 を使用し、公式リポジトリから入手できる MySQL CE (8.0) および PgSQL (13) の GA リリースを基にしています。

要件

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

  • 開発元がサポートするオペレーティングシステムで、OpenSSL >=1.1.X または 代替手段が利用できること。

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

  • 開発元が提供する公式リポジトリからインストールされ、保守されている データベースエンジン(RDBMS)。オペレーティングシステムには、暗号化 サポートが実装されていない古いデータベースソフトウェアのバージョンが 同梱されていることがよくあります。たとえば、RHEL 7 ベースのシステムや、 暗号化サポートのない PostgreSQL 9.2、MariaDB 5.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インターフェースは システム情報 レポートに「TLS certificate files must be read-only.」という警告を生成します。(これは PHP ユーザーが証明書の所有者である場合にのみ表示されます。)

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

使用例

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

GUI設定 設定ファイル 説明 結果
...
// TLS接続に使用。
$DB['ENCRYPTION'] = true;
$DB['KEY_FILE'] = '';
$DB['CERT_FILE'] = '';
$DB['CA_FILE'] = '';
$DB['VERIFY_HOST'] = false;
$DB['CIPHER_LIST'] = '';
...
1. データベースTLS暗号化をチェック
2. データベース証明書の検証をチェックしない
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リストを定義せず、MySQLサーバーによって選択される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'] = '';
...
1. データベースTLS暗号化データベース証明書の検証をチェック
2. データベースTLSキーファイルへのパスを指定
3. データベースTLS CAファイルへのパスを指定
4. データベースTLS証明書ファイルへのパスを指定
5. データベースTLS Cipherリストを指定(任意)
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 サーバーおよび/またはプロキシの設定ファイルで、それぞれのパラメータを使用して設定できます。

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

または DBTLSCipher13 - TLS 1.3 プロトコルを使用する接続でクライアントが許可する暗号化暗号のリスト
(MySQL) TLS 接続は、指定されたリスト内の暗号化暗号を使用して確立されます。
(PostgreSQL) このオプションを設定すると、エラーとして扱われます。