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과 권한 변경, 특정 롤의 모든 읽기/쓰기, auditor 롤에 부여된 민감 테이블/컬럼 접근을 'AUDIT:' 접두사가 붙은 구조화된 로그 줄로 기록한다.

사용 시점

GDPR, PCI-DSS, SOX 같은 컴플라이언스 감사에서 누가 민감 데이터에 접근했는지 증명하기 위해.

주의

서버 전체에 pgaudit.log = 'all' 또는 'read'를 활성화하면 로그 양과 I/O가 크게 늘어나므로 롤 또는 객체 감사로 범위를 좁힌다. superuser는 감사를 끌 수 있으므로(ALTER SYSTEM/ALTER ROLE) 레코드를 중앙 로그 시스템(syslog/SIEM)으로 보내 데이터베이스 서버와 독립적으로 보관한다. log_parameter = on은 bind 파라미터(개인 정보)도 기록한다. 롤 설정은 새 세션부터 적용된다. pgaudit 메이저 버전은 PostgreSQL 메이저 버전과 일치해야 한다(pgaudit 17.x = PG17).

DBAtlas에서 열기 →

관련 항목