确认Amazon RDS(MySQL)的审计日志格式。【MARIADB_AUDIT_PLUGIN】
首先
(Note: “はじめに” means “first” or “to begin with” in Japanese. The paraphrased answer provided is in Simplified Chinese. If you need the translation in Traditional Chinese, please let me know.)
在Amazon RDS(MySQL)中,我启用了审计日志输出。以下是部分屏蔽后的输出示例。
20190707 20:30:55,ip-172-23-2-48,root,10.100.xx.xx,1234567,0,DISCONNECT,,,0
20190808 10:15:30,ip-10-7-1-52,testdbuser,172.16.xx.xx,2345678,23456789,QUERY,testdb02,'SET autocommit=1',0
20190909 05:25:25,ip-10-7-1-52,rdsadmin,localhost,3456789,98765432,QUERY,,'SELECT 1',0
我对所写的内容有一些概念,但因为想要确切地确认每个领域的信息,我进行了调查。
最終結論
以下是如下所示的。
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],[operation],[database],[object],[retcode]
以下文件中所述的内容与其一致。
在Amazon Aurora MySQL DB集群中使用高级审计-审计日志的详细信息。
監査日志文件的行中,以逗号分隔的信息按指定顺序包含在其中。
尽管结果是相同的,但需要明确的是上述内容是Amazon Aurora(MySQL)的文档,因此将其作为官方信息源来结束可能还存在些许疑虑。如果在Amazon RDS(MySQL)的文档中找到相同的描述就好了,但是我没有找到相关的描述。
等于公式的来源
我决定寻找除了AWS文档之外的来源,并使用MARIADB_AUDIT_PLUGIN作为起点。MARIADB_AUDIT_PLUGIN是在Amazon RDS(MySQL)中启用审计日志输出所必需的选项名称。
要访问审计日志,需要通过指定MARIADB_AUDIT_PLUGIN选项并使用自定义选项组来配置数据库实例。
[MySQL数据库日志文件 – 访问MySQL审计日志]
https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html#USER_LogAccess.MySQL.Auditlog
而MariaDB是一个开源的关系型数据库管理系统(RDBMS),它是作为MySQL的一个派生版本进行开发的。(来自维基百科。)
在查找MariaDB官方源代码时,我发现了一个叫做知识库的页面。在其中的一页上,我找到了我想要的内容。
[MariaDB 审计插件 – 日志格式]
https://mariadb.com/kb/en/library/mariadb-audit-plugin-log-format/
在Amazon Aurora(MySQL)的文件中,所述内容与大体相同。
本文中也包含了日志输出的示例。
[timestamp],[serverhost],[username],[host],[connectionid],0,CONNECT,[database],,0
[timestamp],[serverhost],[username],[host],[connectionid],0,DISCONNECT,,,0
[timestamp],[serverhost],[username],[host],[connectionid],0,FAILED_CONNECT,,,[retcode]
在上表的“操作类型”栏中仅写有“CONNECT”,但似乎也会记录“DISCONNECT”和“FAILED_CONNECT”。在例1的开头,我们可以确认“DISCONNECT”已被记录。
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],QUERY,[database],[object], [retcode]
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],CREATE,[database],[object],
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],READ,[database],[object],
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],WRITE,[database],[object],
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],ALTER,[database],[object],
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],RENAME,[database], [object_old]|[database_new].[object_new],
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],DROP,[database],[object],
与MariaDB Audit插件的区别
Amazon Aurora(MySQL)的文档中没有提到,但MariaDB的文档中有相关字段的描述。
这是与syslog相关的字段。顺便说一下,根据维基百科,syslog如下所述。
Syslog是一个在IP网络上传输日志消息的标准规范。”Syslog”这个术语不仅指代通信协议,也用于指代发送Syslog消息的应用程序和库。
通过更改MariaDB Audit Plugin的一个配置值,上述字段可以启用输出。
如果将 server_audit_output_type 变量设置为 syslog 而非默认的 file,则审计日志文件格式如下:
可以在以下页面上确认有哪些设置。
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| server_audit_events | CONNECT,QUERY,TABLE |
| server_audit_excl_users | |
| server_audit_file_path | server_audit.log |
| server_audit_file_rotate_now | OFF |
| server_audit_file_rotate_size | 1000000 |
| server_audit_file_rotations | 9 |
| server_audit_incl_users | |
| server_audit_logging | ON |
| server_audit_mode | 0 |
| server_audit_output_type | file | # syslogに変えるのはここ
| server_audit_query_log_limit | 1024 |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+-----------------------+
一方面,在Amazon RDS(MySQL)的MARIADB_AUDIT_PLUGIN中,可配置选项的详细信息在以下文档中提到。与MariaDB Audit Plugin可配置的参数进行比较,可以发现可配置项的种类较少。
[支持MariaDB审计插件]
https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html
RDS(包括Aurora在内)是提供关系型数据库管理系统(RDBMS)的PaaS,用户无法对操作系统等级的领域进行更改。因为无法接触各种RDBMS中的conf文件,所以可以通过参数组和选项组来进行配置,并进行与其等效的设置。然而,并不是所有的conf文件都可以接触,仅仅限于必需的关系型数据库管理系统功能的取舍选择。
根据以上例子中的syslog,可以说服务器和网络层是主战场,由AWS管理的领域,因此用户无需关注,这可能是为什么它不包含在选项组的设置目标中的原因。
[timestamp][syslog_host][syslog_ident]:[syslog_info][serverhost],[username],[host],[connectionid],[queryid],[operation],[database],[object],[retcode]
可以肯定,Aurora的审计日志也一定是通过MariaDB Audit插件实现的。
在Amazon Aurora(MySQL)中,我们使用参数组而不是选项组来进行审计日志输出设置。
在Amazon Aurora MySQL DB集群中使用高级审计 – 启用高级审计。
以下是可設定的參數。
-
server_audit_logging
server_audit_events
server_audit_excl_users
server_audit_incl_users
这个设置项目与MariaDB Audit插件的名称相同。虽然文档中没有明确说明,但很可能在背后使用。与Amazon RDS(MySQL)的MARIADB_AUDIT_PLUGIN相比,日志文件的输出目标和旋转相关的项目较少。由于RDS和Aurora的架构差异,让人再次意识到用户可以触及(指定)的范围是不同的。
日志文件采用UTF-8编码格式。日志会被写入多个文件中,文件数量根据实例大小而异。如果需要查看最新事件,可能需要检查所有审核日志文件。
日志文件在达到总计100MB时会进行轮转。该限制无法进行设置。
最后
本来我只是打算写下日志格式就算完成了,但是讨论起如何查找正式的来源时波及开来。我总是一不小心就去看AWS官方文档,但是为了不在EC2文档中确认Linux日志(例如/var/log/messages)的日志格式,我意识到需要意识到AWS提供的范围,并适当参考其他应该查找的来源。
我本来还想写一下关于最初的日志输出示例1~3让我感到疑惑的事情,但这将留待下次再写。