安全性和溯源性,是每個合格的生產系統,必備的合規性要求。 他是誰?他在哪?他在幹什麼?也是每一個系統遇到安全威脅的時候,系統運維人員最關心的問題。html
只有作到可溯源,在安全事件發生時,咱們纔有數據,有證據和有方向的去分析和應對。mysql
對於數據庫產品,數據庫審計,就是溯源的必備方式。這也是不少客戶關心的話題。針對RDS Mysql,咱們能審計每一個用戶的登陸,和操做信息嗎?答案是確定的。sql
MySQL企業版有此功能,屬於收費組件。社區版的Mysql,常見的審計插件就是「MariaDB 審覈插件」和Percona審計插件。數據庫
1. AWS的RDS Mysql是社區版,審計方式,使用的是「MariaDB 審覈插件」,使用方法,詳見官方文檔。本文就不贅述設置方法了。須要注意的是如下參數的設置。安全
https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.htmlsession
選項設置運維 |
有效值機器學習 |
默認值ide |
描述性能 |
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在開啓審計以後,仍是有比較大的性能損耗的。
7. 開啓audit以後,會有大量的audit log產生,可是RDS的日誌會滾動刪除,不能長久的保存。若是爲了長時間審計的需求,將audit保存下來,還能夠作更多的統計和分析。
經過RDS的Modify頁面,將audit log輸出到cloudwatch。
至此,RDS Mysql數據庫審計功能如何使用已經瞭解了。經過audit數據,咱們能夠查找不合規的信息。用以優化數據庫的安全性。
同時,咱們也能夠利用audit做爲數據源,彙總到數據集/湖中。
經過大數據處理,以進一步分析和使用。甚至能夠經過大數據的實時分析,結合機器學習。作到數據庫安全受到威脅時,系統能夠作出相應的自動補救操做。