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 - IDの検証を行わず、転送モードとしてTLSを使用して接続します
  • verify_ca - TLSを使用して接続し、証明書を検証します
  • verify_full - TLSを使用して接続し、証明書を検証し、さらにDBHostで指定されたデータベースのID(CN)がその証明書と一致することを検証します

Zabbixの設定

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

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

  • トランスポート暗号化を有効にするにはデータベース接続設定ステップでデータベースのTLS暗号化チェックボックスをオンにします。
  • 証明書による暗号化を有効にするには、TLS暗号化フィールドがオンになっている場合に表示されるデータベースの証明書確認チェックボックスをオンにします。

MySQLの場合、データベースホストがlocalhostに設定されていると、ソケットファイル(Unixの場合)または共有メモリ(Windowsの場合)を使用する接続を暗号化できないため、データベースのTLS暗号化チェックボックスが無効になります。 PostgreSQLの場合、データベースホストフィールドの値がスラッシュで始まるか、フィールドが空の場合、TLS暗号化チェックボックスは無効になります。

次のパラメータは、証明書モードのTLS暗号化で使用可能になります。(両方のチェックボックスがマークされている場合)

パラメータ 説明
データベースのTLS CAファイル 有効なTLS認証局(CA)ファイルへのフルパスを指定します。
データベースのTLSキーファイル 有効なTLSキーファイルへのフルパスを指定します。
データベースのTLS証明書ファイル 有効なTLS証明書ファイルへのフルパスを指定します。
データベースのホスト検証 このチェックボックスをオンにすると、ホスト検証がアクティブになります。
PHP MySQLライブラリではピア証明書の検証手順をスキップできないため、MySQLでは無効になっています。
データベースのTLS暗号化方式リスト 有効な暗号のカスタムリストを指定します。暗号リストの形式は、OpenSSL標準に準拠している必要があります。
MySQLでのみ使用できます。

TLSパラメータは有効なファイルを指している必要があります。存在しないファイルまたは無効なファイルを指している場合は、認証エラーが発生します。 証明書ファイルが書き込み可能である場合、Webインターフェースはシステム情報レポートに「データベースのTLS証明書ファイルは読み込み専用にしてください」という警告を表示します。 (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設定ファイル内のそれぞれの パラメータで設定できます。

Configuration Result
なし 暗号化なしでデータベースに接続します。
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) このオプションを設定するとエラーと見なされます。