2 PostgreSQL/TimescaleDB の保護

概要

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

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

セキュリティを向上させるには、安全なスキーマの使用方法を設定し、さらに最小権限の追加データベースロールおよびユーザーを作成することを推奨します。 これらのロールおよびユーザーは、最小権限の原則 に基づいて設定する必要があります。 つまり、想定された機能を実行するために不可欠な権限のみを付与すべきです。

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

データベース所有者となるユーザーを作成し、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;
-- 注: search_path は "zabbix" スキーマを指す必要があります:
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 Webインターフェースと 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