审计数据库对象
在 RDS for PostgreSQL 数据库实例上设置 pgAudit 并根据您的要求进行配置后,将在 PostgreSQL 日志中捕获更多详细信息。例如,虽然默认 PostgreSQL 日志记录配置标识数据库表中发生更改的日期和时间,但使用 pgAudit 扩展后,日志条目可以包括模式、进行更改的用户和其他详细信息,具体取决于扩展参数的配置方式。您可以设置审计以通过以下方法跟踪更改。
对于每个会话,按用户进行跟踪。对于会话级别,您可以捕获完全限定的命令文本。
对于每个对象,按用户和数据库进行跟踪。
当您在系统上创建 rds_pgaudit
角色,然后将此角色添加到自定义参数组中的 pgaudit.role
参数时,将激活对象审计功能。默认情况下,pgaudit.role
参数处于未设置状态,唯一允许的值是 rds_pgaudit
。以下步骤假设 pgaudit
已初始化,并且您已按照设置 pgAudit 扩展中的步骤创建了 pgaudit
扩展。
如本示例所示,“LOG: AUDIT: SESSION”行提供了有关表及其架构的信息以及其他详细信息。
设置对象审计
使用
psql
连接到 RDS for PostgreSQL 数据库实例。psql --host=
your-instance-name
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
postgres --password --dbname=labdb
-
使用以下命令创建名为
rds_pgaudit
的数据库角色。labdb=>
CREATE ROLE rds_pgaudit;
CREATE ROLE
labdb=>
关闭
psql
会话。labdb=>
\q
在接下来的几步中,使用 Amazon CLI 修改自定义参数组中的审计日志参数。
-
使用以下 Amazon CLI 命令将
pgaudit.role
参数设置为rds_pgaudit
。默认情况下,此参数为空,rds_pgaudit
是唯一允许的值。aws rds modify-db-parameter-group \ --db-parameter-group-name
custom-param-group-name
\ --parameters "ParameterName=pgaudit.role,ParameterValue=rds_pgaudit,ApplyMethod=pending-reboot" \ --regionaws-region
-
使用以下 Amazon CLI 命令重启 RDS for PostgreSQL 数据库实例,以使对参数的更改生效。
aws rds reboot-db-instance \ --db-instance-identifier
your-instance
\ --regionaws-region
运行以下命令确认
pgaudit.role
设置为rds_pgaudit
。SHOW pgaudit.role;
pgaudit.role ------------------ rds_pgaudit
要测试 pgAudit 日志记录,您可以运行几条要审计的示例命令。例如,您可以运行以下命令。
CREATE TABLE t1 (id int); GRANT SELECT ON t1 TO rds_pgaudit; SELECT * FROM t1;
id ---- (0 rows)
数据库日志应包含类似于以下内容的条目。
...
2017-06-12 19:09:49 UTC:...:rds_test@postgres:[11701]:LOG: AUDIT:
OBJECT,1,1,READ,SELECT,TABLE,public.t1,select * from t1;
...
有关查看日志的信息,请参阅监控 Amazon RDS 日志文件。
要了解关于 pgAudit 扩展的更多信息,请参阅 GitHub 上的 pgAudit