DBAtlas · データベース運用アトラス

pgauditでロールおよびオブジェクトレベルの監査ログを記録

PostgreSQLセキュリティ

コマンド

-- Prerequisite: shared_preload_libraries = 'pgaudit' + restart, then:
CREATE EXTENSION pgaudit;

-- Session auditing: server-wide, only DDL and role/privilege changes
ALTER SYSTEM SET pgaudit.log = 'ddl, role';
ALTER SYSTEM SET pgaudit.log_relation = on;
ALTER SYSTEM SET pgaudit.log_parameter = off;
SELECT pg_reload_conf();

-- All reads/writes of a specific application role
ALTER ROLE web_app SET pgaudit.log = 'read, write';

-- Object auditing: privileges granted to the auditor role = operations to log
CREATE ROLE auditor NOLOGIN;
ALTER SYSTEM SET pgaudit.role = 'auditor';
SELECT pg_reload_conf();
GRANT SELECT, DELETE ON customer TO auditor;
GRANT UPDATE (balance) ON customer TO auditor;

概要

サーバー全体のDDLと権限変更、特定ロールのすべての読み取り/書き込み、監査ロールに付与された機密表/列へのアクセスを、'AUDIT:'で始まる構造化されたログ行として記録する。

使用する場面

GDPR、PCI-DSS、SOXなどのコンプライアンス監査で、誰が機密データにアクセスしたかを証明するため。

注意

サーバー全体でpgaudit.log = 'all'または'read'を有効にすると、ログ量とI/Oが大幅に増加する。ロールまたはオブジェクトの監査で範囲を絞り込む。スーパーユーザーは監査を無効にできる(ALTER SYSTEM/ALTER ROLE)ため、レコードを中央ログシステム(syslog/SIEM)に送信し、データベースサーバーとは独立して保管する。log_parameter = onはバインドパラメータ(個人データ)もログに記録する。ロールの設定は新しいセッションで有効になる。pgauditのメジャーバージョンはPostgreSQLのメジャーバージョンと一致する必要がある(pgaudit 17.x = PG17)。

DBAtlas で開く →

関連項目