AWSRDSMysql是如何开启数据库审计功能
下面一起来了解下AWS RDS MySQL是如何开启数据库审计功能,相信大家看完肯定会受益匪浅,文字在精不在多,希望AWS RDS Mysql是如何开启数据库审计功能这篇短内容是你想要的。
成都创新互联专业提供成都主机托管四川主机托管成都服务器托管四川服务器托管,支持按月付款!我们的承诺:贵族品质、平民价格,机房位于中国电信/网通/移动机房,绵阳电信机房服务有保障!
由于不同的安全需求,数据库审计,也是很多客户关心的话题。针对RDS Mysql,我们能审计每个用户的登录,和操作信息吗?答案是肯定的。
MySQL企业版有此功能,属于收费组件。社区版的Mysql,常见的审计插件就是“MariaDB 审核插件”和Percona审计插件。
1. AWS的RDS Mysql是社区版,审计方式,使用的是“MariaDB 审核插件”,使用方法,详见官方文档。本文就不赘述设置方法了。需要注意的是以下参数的设置。
https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html
选项设置 | 有效值 | 默认值 | 描述 |
SERVER_AUDIT_FILE_PATH | /rdsdbdata/log/audit/ | /rdsdbdata/log/audit/ | 日志文件的位置。日志文件包含 SERVER_AUDIT_EVENTS 中指定的活动记录。有关更多信息,请参阅 查看和列出数据库日志文件 和 MySQL 数据库日志文件。 |
SERVER_AUDIT_FILE_ROTATE_SIZE | 1–1000000000 | 1000000 | 达到该字节大小时,会导致文件轮换。有关更多信息,请参阅 日志文件大小。 |
SERVER_AUDIT_FILE_ROTATIONS | 0–100 | 9 | 要保存的日志轮换数量。有关更多信息,请参阅 日志文件大小 和 下载数据库日志文件。 |
SERVER_AUDIT_EVENTS | CONNECT、QUERY | CONNECT、QUERY | 要在日志中记录的活动类型。安装 MariaDB 审核插件可自行登录。 CONNECT:记录成功和失败的数据库连接以及数据库断开连接。 QUERY:记录针对数据库运行的所有查询文本。 TABLE:记录针对数据库运行查询时受查询影响的表。 对于 MariaDB,支持 CONNECT、QUERY 和 TABLE。 对于 MySQL,支持 CONNECT 和 QUERY。 |
SERVER_AUDIT_INCL_USERS | 多个逗号分隔值 | 无 | 仅包括指定用户的活动。默认情况下,会记录所有用户的活动。如果 SERVER_AUDIT_EXCL_USERS 和 SERVER_AUDIT_INCL_USERS 中均指定了某位用户,则会记录该用户的活动。 |
SERVER_AUDIT_EXCL_USERS | 多个逗号分隔值 | 无 | 排除指定用户的活动。默认情况下,会记录所有用户的活动。如果 SERVER_AUDIT_EXCL_USERS 和 SERVER_AUDIT_INCL_USERS 中均指定了某位用户,则会记录该用户的活动。 rdsadmin 用户会每秒查询一次数据库,以检查数据库的运行状况。根据您的其他设置,此活动可能导致您的日志文件大小非常快速地增长。如果您不需要记录此活动,请将 rdsadmin 用户添加到 SERVER_AUDIT_EXCL_USERS 列表。 注意 会始终为所有用户记录 CONNECT 活动,即使是该选项设置指定的用户。 |
SERVER_AUDIT_LOGGING | ON | ON | 日志记录处于活动状态。唯一有效的值为 ON。Amazon RDS 不支持停用日志记录。如果您要停用日志记录,请删除 MariaDB 审核插件。有关更多信息,请参阅 删除 MariaDB 审核插件。 |
2. 开启审计功能后,我们就可以在console中看到audit log了。
3. 下面,我们看一下,audit log到底记录了什么信息。
3.1. 我前台操作的记录如下:
3.1.1 使用管理员用户,登录数据库
# mysql -hmysql-rds.cq7qaukj3smd.rds.cn-northwest-1.amazonaws.com.cn -uadmin -pxxxxx
3.1.2 创建用户test2,并赋予一些全新
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES ON *.* TO 'test2'@'ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn' identified by 'xxxxx' WITH GRANT OPTION; Query OK, 0 rows affected, 1 warning (0.02 sec)
3.1.3 使用新建的用户连接数据库
# mysql -hmysql-rds.cq7qaukj3smd.rds.cn-northwest-1.amazonaws.com.cn -utest2 -pxxxxx
3.1.4 执行数据库切换,创建表等命令
mysql> use tests; mysql> create table xx as select * from liang; mysql> commit; -----注释:create 是DDL语句,默认提交,所以这里commit没有意义。
3.2 audit log如下,可以看到以下几点信息
3.2.1. 谁访问和执行的,来至于哪里?
--test2,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn
3.2.2. 执行的全部操作信息记录
20190726 15:10:01,ip-10-4-2-104,admin,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,13,883,QUERY,,'GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES ON *.* TO \'test2\'@\'ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn\' IDENTIFIED WITH \'mysql_native_password\' AS \'*01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C\' WITH GRANT OPTION',0 20190726 15:10:03,ip-10-4-2-104,admin,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,13,0,DISCONNECT,,,0 ...... 20190726 15:10:10,ip-10-4-2-104,test2,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,14,0,CONNECT,,,0 20190726 15:10:10,ip-10-4-2-104,test2,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,14,893,QUERY,,'select @@version_comment limit 1',0 20190726 15:10:19,ip-10-4-2-104,test2,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,14,894,QUERY,,'SELECT DATABASE()',0 20190726 15:10:19,ip-10-4-2-104,test2,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,14,896,QUERY,tests,'show databases',0 20190726 15:10:19,ip-10-4-2-104,test2,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,14,897,QUERY,tests,'show tables',0 20190726 15:10:31,ip-10-4-2-104,test2,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,14,913,QUERY,tests,'create table as select * from liang',1064 ...... 20190726 15:10:39,ip-10-4-2-104,test2,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,14,922,QUERY,tests,'create table xx as select * from liang',0 20190726 15:10:43,ip-10-4-2-104,test2,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,14,923,QUERY,tests,'commit',0
4. 当然审计日志会记录数据库的全部操作,自然也就有一些我们不需要的信息参杂其中。例如RDS后台操作用户rdsadmin的全部操作记录。
突然意识到,audit log,也可以用来研究AWS RDS后面实现的一些自动化运维的原理。
20190726 15:10:20,ip-10-4-2-104,rdsadmin,localhost,2,900,QUERY,,'SELECT 1',0 20190726 15:10:20,ip-10-4-2-104,rdsadmin,localhost,2,901,QUERY,,'SELECT 1',0 20190726 15:10:20,ip-10-4-2-104,rdsadmin,localhost,2,902,QUERY,,'SELECT 1',0 20190726 15:10:20,ip-10-4-2-104,rdsadmin,localhost,2,903,QUERY,,'SELECT count(*) from information_schema.TABLES WHERE TABLE_SCHEMA = \'mysql\' AND TABLE_NAME = \'rds_heartbeat2\'',0 20190726 15:10:20,ip-10-4-2-104,rdsadmin,localhost,2,904,QUERY,,'SELECT 1',0 20190726 15:10:20,ip-10-4-2-104,rdsadmin,localhost,2,905,QUERY,,'SELECT value FROM mysql.rds_heartbeat2',0 20190726 15:10:20,ip-10-4-2-104,rdsadmin,localhost,2,906,QUERY,,'SELECT 1',0 20190726 15:10:20,ip-10-4-2-104,rdsadmin,localhost,2,907,QUERY,,'SELECT @@GLOBAL.read_only',0 20190726 15:10:25,ip-10-4-2-104,rdsadmin,localhost,2,908,QUERY,,'SELECT 1',0 20190726 15:10:25,ip-10-4-2-104,rdsadmin,localhost,2,909,QUERY,,'SELECT NAME, VALUE FROM mysql.rds_configuration',0 20190726 15:10:25,ip-10-4-2-104,rdsadmin,localhost,2,910,QUERY,,'SELECT 1',0 20190726 15:10:25,ip-10-4-2-104,rdsadmin,localhost,2,911,QUERY,,'SELECT @@session.transaction_read_only',0 20190726 15:10:25,ip-10-4-2-104,rdsadmin,localhost,2,912,QUERY,,'PURGE BINARY LOGS TO \'mysql-bin-changelog.008941\'',0
5. 但是真的rdsadmin的操作信息,是不需要做审计的。我们可以考虑不记录rdsadmin用户的审计信息,只需修改“选项组”的参数SERVER_AUDIT_EXCL_USERS=rdsadmin即可
5.1 关闭之后的audit log输出:
20190727 14:24:54,ip-10-4-0-205,rdsadmin,localhost,19,0,CONNECT,,,0 20190727 14:24:54,ip-10-4-0-205,rdsadmin,localhost,19,0,DISCONNECT,,,0
---正常情况下,rdsadmin 用户会每秒查询一次数据库,以检查数据库的运行状况。不记录rdsadmin的信息之后,世界立即清净了许多
20190727 14:25:04,ip-10-4-0-205,admin,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,18,2689,QUERY,,'create database user',0 20190727 14:25:06,ip-10-4-0-205,admin,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,18,2690,QUERY,,'SELECT DATABASE()',0 20190727 14:25:06,ip-10-4-0-205,admin,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,18,2692,QUERY,user,'show databases',0 20190727 14:25:06,ip-10-4-0-205,admin,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,18,2693,QUERY,user,'show tables',0 20190727 14:25:26,ip-10-4-0-205,admin,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,18,2715,QUERY,user,'create table xx (id int)',0 20190727 14:25:29,ip-10-4-0-205,admin,ec2-52-80-168-237.cn-north-1.compute.amazonaws.com.cn,18,2716,QUERY,user,'commit',0
6. 针对数据库的审计,加密等操作,在增加安全性的同时,也要付出性能损耗的成本。
下文是AWS官方blog,其中讨论到RDS Mysql在开启审计之后,还是有比较大的性能损耗的。
https://aws.amazon.com/cn/blogs/china/cloudwatch-logs-kinesis-firehose-athena-quicksight-amazon-aurora/?nc1=b_rp
7. 开启audit之后,会有大量的audit log产生,但是RDS的日志会滚动删除,不能长久的保存。如果为了长时间审计的需求,将audit保存下来,还可以做更多的统计和分析。
通过RDS的Modify页面,将audit log输出到cloudwatch。
至此,RDS Mysql数据库审计功能如何使用已经了解了。后续,我会继续分享,如何利用audit作为数据源。
通过数据处理,汇总到数据集/湖 中,以进一步分析使用。
看完AWS RDS Mysql是如何开启数据库审计功能这篇文章后,很多读者朋友肯定会想要了解更多的相关内容,如需获取更多的行业信息,可以关注我们的行业资讯栏目。
分享名称:AWSRDSMysql是如何开启数据库审计功能
网页地址:http://myzitong.com/article/gcgeso.html