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

CONNECTQUERY

CONNECTQUERY

要在日誌中記錄的活動類型。安裝 MariaDB 審覈插件可自行登錄。

CONNECT:記錄成功和失敗的數據庫連接以及數據庫斷開連接。

QUERY:記錄針對數據庫運行的所有查詢文本。

TABLE:記錄針對數據庫運行查詢時受查詢影響的表。

對於 MariaDB,支持 CONNECTQUERYTABLE

對於 MySQL,支持 CONNECTQUERY

SERVER_AUDIT_INCL_USERS

多個逗號分隔值

僅包括指定用戶的活動。默認情況下,會記錄所有用戶的活動。如果 SERVER_AUDIT_EXCL_USERSSERVER_AUDIT_INCL_USERS 中均指定了某位用戶,則會記錄該用戶的活動。

SERVER_AUDIT_EXCL_USERS

多個逗號分隔值

排除指定用戶的活動。默認情況下,會記錄所有用戶的活動。如果 SERVER_AUDIT_EXCL_USERSSERVER_AUDIT_INCL_USERS 中均指定了某位用戶,則會記錄該用戶的活動。

rdsadmin 用戶會每秒查詢一次數據庫,以檢查數據庫的運行狀況。根據您的其他設置,此活動可能導致您的日誌文件大小非常快速地增長。如果您不需要記錄此活動,請將 rdsadmin 用戶添加到 SERVER_AUDIT_EXCL_USERS 列表。

注意

會始終爲所有用戶記錄 CONNECT 活動,即使是該選項設置指定的用戶。

SERVER_AUDIT_LOGGING

ON

ON

日誌記錄處於活動狀態。唯一有效的值爲 ON。Amazon RDS 不支持停用日誌記錄。如果您要停用日誌記錄,請刪除 MariaDB 審覈插件。有關更多信息,請參閱 刪除 MariaDB 審覈插件

2. 開啓審計功能後,我們就可以在console中看到audit log了。

1.png

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。

2.png

至此,RDS Mysql數據庫審計功能如何使用已經瞭解了。後續,我會繼續分享,如何利用audit作爲數據源。

通過數據處理,彙總到數據集/湖 中,以進一步分析使用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章