This is a translation of the original English documentation page. Help us make it better.

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

概要

このセクションでは、以下の組み合わせでの安全なTLS接続のため、Zabbixセットアップ手順と構成例を提供します。

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

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

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

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

要件

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

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

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

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

このオプションを設定すると、Zabbixサーバー/プロキシやフロントエンドからのデータベース接続には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フロントエンドはGUIインターフェースを使用してオプションを定義します:required,verify_ca, verify_full. インストールウィザードのDB接続設定で必要なオプションを指定します。 これらのオプションは設定ファイル(zabbix.conf.php)に次のようにマップされます。

GUIの設定 設定ファイル 説明 結果
...
// Used for TLS connection.
$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.データベースTLSCAファイルへのパスを指定します。
'verify_ca'モードが有効
...
// Used for TLS connection with strictly defined Cipher list.
$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>';
...

Or:

...
// Used for TLS connection without Cipher list defined - selected by MySQL server
$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.データベースTLSCAファイルへのパスを指定します。
4.データベースTLS証明書ファイルへのパスを指定します
6. 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.データベースTLSCAファイルへのパスを指定します
4.データベースTLS証明書ファイルへのパスを指定します
6.データベースホストの検証をチェックします
PostgreSQLで 'verify_full' モードが有効

関連項目: Encryption configuration examples for MySQL, Encryption configuration examples for PostgreSQL.

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

データベースへの安全な接続は、Zabbixサーバープロキシの設定ファイルそれぞれのパラメータで設定できます。

設定 結果
無し 暗号化せずにデータベースに接続します。
1. 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に クライアントの秘密鍵ファイルを指定
サーバー/プロキシは、データベースへの接続中にクライアント証明書を提供します。
1.1.DBTLSCipherにクライアントがTLS1.2までのTLSプロトコルを使用した接続を許可する暗号化暗号のリストをセット
または
DBTLSCipher13にクライアントがTLS1.3プロトコルを使用した接続に許可する暗号化暗号のリストをセット (MySQL)TLS接続は、提供されたリストの暗号を使用して行われます。
(PostgreSQL)このオプションを設定すると、エラーと見なされます。