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インターフェースのインストール時に設定できます。

  • トランスポート暗号化を有効にするには、DB接続の設定の手順でDatabase TLS encryptionチェックボックスをオンにします。
  • 証明書を使用した暗号化を有効にするには、TLS encryptionフィールドをオンにしたときに表示されるVerify database certificateチェックボックスをオンにします。

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

TLS証明書暗号化モード(両方のチェックボックスをオンにした場合)では、次のパラメータを使用できます。

パラメータ 説明
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フロントエンドは、GUIインターフェースを使用して可能なオプションを定義します: required、verify_ca、verify_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) このオプションを設定するとエラーとみなされます。