为Aurora MySQL启用审计日志(Audit Log)

一、背景

在数据库RDS创建界面中,点击Addional额外设置之后可以展开日志设置,有四个选项,分别是:

Select the log types to publish to Amazon CloudWatch Logs:

  • Audit log
  • Error log
  • General log
  • Slow query log

这几个选项打开后,Cloudwatch会输出General log和Error log,可以看到失败的登录记录,但是无法看到Audit log,也就是无法看到每一条SQL查询、更新级别的日志。

这是由于,RDS日志需要额外打开选项。

如果是RDS MySQL,请参考这里:

https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html

如果是Aurora MySQL,请参考这里:

https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Auditing.html#AuroraMySQL.Auditing.Enable

需要注意的是,RDS MySQL和Aurora之间的区别是RDS MySQL需要通过Option Gourp的配置组启用审计插件,而Aurora不需要这一个步骤。

本文以Aurora为基础进行编写。

二、创建Aurora数据库

本文假设数据库已经创建完成。

三、创建参数组并应用到Aurora

1、新建参数组

进入RDS界面,点击创建参数组。注意,参数组(Parameter Group)和选项组(Options Group)是不同的设定。这里需要进入参数组。

点击新建参数,选择DB Cluster Parameter Group。请注意参数组分成DB参数组和DB Cluster参数组,这里选择的是Cluster参数组。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/audit01

在参数搜索框中,输入关键字Audit,可以看到搜索出来多个配置项。找到其中的server_audit_logging,将其值改为1。再找到server_audit_events,将其值改为QUERY。修改完成后保存参数组。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/audit02

以上修改表示启用Aurora的SQL审计。其中server_audit_events配置项的各参数含义是:

  • CONNECT – 记录成功和失败的连接以及断开连接。此事件包括用户信息。
  • QUERY – 以纯文本记录所有查询,包括由于语法或权限错误而失败的查询。
  • QUERY_DCL – 类似于 QUERY 事件,不过仅返回数据控制语言 (DCL) 查询 (GRANT、REVOKE 等)。
  • QUERY_DDL – 类似于 QUERY 事件,不过仅返回数据定义语言 (DDL) 查询 (CREATE、ALTER 等)。
  • QUERY_DML – 类似于 QUERY 事件,但仅返回数据操作语言 (DML) 查询(INSERT、UPDATE 等,也包括 SELECT)。
  • TABLE – 记录受查询执行影响的表。

2、修改参数组

现在为Aurora修改正在使用的参数组。点击Aurora的集群。注意,点击集群和点击单个节点时候,修改按钮会加载出来不同的设置。https://blogimg.bitipcman.com/wp-content/uploads/2021/07/audit03

在修改配置界面中,将页面向下滚动,找到参数组位置,修改为前一步新创建的参数组。同时,找到下方的审计日志选项,将其打开。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/audit04

修改完成后,保存退出。

当提示是否等待下一个维护窗口,还是立刻生效时候,选择立刻生效。

配置完成。

四、查看SQL审计

1、通过CloudWatch查看日志

进入Cloudwatch服务。从左侧选择Logs菜单下的Log groups,在右侧找到对应的Aurora名字,以及Audit日志组。点击进入。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/audit05在下方的日志组中,先选择要查看的节点,确认是查看写入节点还是只读节点,然后找到时间是最新的一个(文件后缀.0表示最新),点击查看。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/audit06

由此即可看到审计结果。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/audit07

2、导出日志

CloudWatch可批量导出日志,也可以持续的流式方式导出日志。

如果需要全量导出,可以进入Log groups之后,点击右上角的Actions按钮,找到Export data to Amazon S3,即可选择要导出的时间,并将日志导出到指定的S3存储桶。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/audit08

如果需要持续的日志导出,可以点击页面中间标签页Subscription Rules标签页。点击右侧按钮Create,即可选择多种导出选项。其中可选择导出到托管服务Elastic Search,也可以选择导出到Kinesis Firehose将流式数据持续不断的保存到S3存储桶。如下截图。

https://blogimg.bitipcman.com/wp-content/uploads/2021/07/audit09

五、参考文档

参考文档:

https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Auditing.html#AuroraMySQL.Auditing.Enable