审计数据库对象 - Amazon Relational Database Service

审计数据库对象

RDS for PostgreSQL 数据库实例上设置 pgAudit 并根据您的要求进行配置后,将在 PostgreSQL 日志中捕获更多详细信息。例如,虽然默认 PostgreSQL 日志记录配置标识数据库表中发生更改的日期和时间,但使用 pgAudit 扩展后,日志条目可以包括模式、进行更改的用户和其他详细信息,具体取决于扩展参数的配置方式。您可以设置审计以通过以下方法跟踪更改。

  • 对于每个会话,按用户进行跟踪。对于会话级别,您可以捕获完全限定的命令文本。

  • 对于每个对象,按用户和数据库进行跟踪。

当您在系统上创建 rds_pgaudit 角色,然后将此角色添加到自定义参数组中的 pgaudit.role 参数时,将激活对象审计功能。默认情况下,pgaudit.role 参数处于未设置状态,唯一允许的值是 rds_pgaudit。以下步骤假设 pgaudit 已初始化,并且您已按照设置 pgAudit 扩展中的步骤创建了 pgaudit 扩展。

设置 pgAudit 后 PostgreSQL 日志文件的图像。

如本示例所示,“LOG: AUDIT: SESSION”行提供了有关表及其架构的信息以及其他详细信息。

设置对象审计
  1. 使用 psql 连接到 RDS for PostgreSQL 数据库实例

    psql --host=your-instance-name.aws-region.rds.amazonaws.com --port=5432 --username=postgrespostgres --password --dbname=labdb
  2. 使用以下命令创建名为 rds_pgaudit 的数据库角色。

    labdb=> CREATE ROLE rds_pgaudit; CREATE ROLE labdb=>
  3. 关闭 psql 会话。

    labdb=> \q

    在接下来的几步中,使用 AWS CLI 修改自定义参数组中的审计日志参数。

  4. 使用以下 AWS 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" \ --region aws-region
  5. 使用以下 AWS CLI 命令重启 RDS for PostgreSQL 数据库实例,以使对参数的更改生效。

    aws rds reboot-db-instance \ --db-instance-identifier your-instance \ --region aws-region
  6. 运行以下命令确认 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