You are viewing documentation for the development version, it may be incomplete.
Join our translation project and help translate Zabbix documentation into your native language.

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リリースに基づいています。

要件

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

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

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

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

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

  • required - アイデンティティチェックなしでTLSをトランスポートモードとして接続
  • verify_ca - TLSで接続し、証明書を検証
  • verify_full - TLSで接続し、証明書を検証し、DBHostで指定されたデータベースのアイデンティティ(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フロントエンドは、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) このオプションを設定するとエラーとみなされます。