2 PostgreSQL/TimescaleDBのセキュリティ保護

概要

このセクションでは、PostgreSQLデータベースを保護するためのベストプラクティスについて説明します。

基本的なセットアップについては、デフォルトのPostgreSQLデータベースの作成手順を参照してください。この手順には、Zabbixデータベースに対する完全な権限を持つ'zabbix'ユーザーの作成が含まれます。 このユーザーは、Zabbixをアップグレードするときにデータベース構造を変更するために必要な権限も持つデータベース所有者です。

セキュリティを強化するには、安全なスキーマ使用パターンを構成し、最小限の権限を持つ追加のデータベースロールとユーザーを作成することをお勧めします。 これらのロールとユーザーは、[最小権限の原則]((/manual/best_practices/security/access_control#principle-of-least-privilege)に基づいて、つまり、意図した機能を実行するために必要な権限のみを設定する必要があります。

データベースのセットアップ

データベース所有者となるユーザーを作成し、Zabbixデータベースを作成します。 データベースの所有者は、データベースの作成で指定されているユーザーです。

createuser -U postgres -h localhost --pwprompt usr_owner
       createdb -U postgres -h localhost -O usr_owner -E Unicode -T template0 zabbix

データベースのクリーンなインストールまたはアップグレードは、データベース所有者が実行する必要があります。 これは、データベースオブジェクトをドロップする、あるいはその定義を変更する権限がデータベース所有者に固有の特権であり、許可または取り消されることができないためです。

このページの次のコマンドは、PostgreSQLへの接続がzabbixデータベースに作成されている間に実行する必要があります。

zabbixスキーマを作成し、データベースの所有者(usr_owner)をこのスキーマの所有者に設定します。

CREATE SCHEMA zabbix AUTHORIZATION usr_owner;

安全なスキーマ使用パターンを設定します。

REVOKE CREATE ON SCHEMA public FROM PUBLIC;
       REVOKE ALL ON DATABASE zabbix FROM PUBLIC;
       -- Note: search_path should point to the "zabbix" schema:
       ALTER ROLE ALL IN DATABASE zabbix SET search_path = "zabbix";

データベースを設定した後、ユーザーロールの作成に進みます。

ユーザーロールの作成

対応する権限を持つ次の役割を作成します。

  • zbx_srv - Zabbixサーバーとプロキシの実行の役割:
CREATE ROLE zbx_srv;
       GRANT CONNECT ON DATABASE zabbix TO zbx_srv;
       GRANT USAGE ON SCHEMA zabbix TO zbx_srv;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT DELETE, INSERT, SELECT, UPDATE ON TABLES TO zbx_srv;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT, UPDATE, USAGE ON sequences TO zbx_srv;
  • zbx_web - ZabbixフロントエンドとAPIを実行するための役割:
CREATE ROLE zbx_web;
       GRANT CONNECT ON DATABASE zabbix TO zbx_web;
       GRANT USAGE ON SCHEMA zabbix TO zbx_web;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT DELETE, INSERT, SELECT, UPDATE ON TABLES TO zbx_web;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT, UPDATE, USAGE ON sequences TO zbx_web;
  • zbx_bckp - テーブルバックアップの役割:
CREATE ROLE zbx_bckp;
       GRANT CONNECT ON DATABASE zabbix TO zbx_bckp;
       GRANT USAGE ON SCHEMA zabbix TO zbx_bckp;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT ON TABLES TO zbx_bckp;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT, UPDATE, USAGE ON sequences TO zbx_bckp;

テーブルの復元は、データベースの所有者によってのみ可能です。

役割を作成した後、ユーザーに割り当てることができます。

ユーザーロールの割り当て

作成されたユーザーロールを割り当てるには、ユーザーを作成し関連するロールを割り当てます。 <user><role><password>は適切に置き換えてください。

CREATE USER <user> WITH ENCRYPTED password '<password>';
       GRANT <role> TO <user>;

たとえば、Zabbixサーバーとプロキシを実行するロールを作成して割り当てるには、

CREATE USER usr_srv WITH ENCRYPTED password 'password';
       GRANT zbx_srv TO usr_srv;

TimescaleDBを使用したデータベースパーティショニング

データベースパーティショニングは、TimescaleDBによって促進されます。 TimescaleDBを利用するには、Zabbixサーバーにはデータベース所有者の権限が必要です。

PostgreSQL zabbixスキーマが既にzabbixデータベースを作成していた場合、次のコマンドでTimescaleDB を有効にすることができます。

echo "CREATE EXTENSION IF NOT EXISTS timescaledb WITH SCHEMA zabbix CASCADE;" | sudo -u postgres psql zabbix