從事前到事後,雲資料庫 Redis & MongoDB 安全體系全揭秘!

阿里云云棲號 發佈 2020-04-22T01:24:38+00:00

一、整體說明上圖是雲資料庫Redis&MongoDB的安全體系圖,橫向是實例控制鏈路,縱向是實例數據鏈路,對於控制鏈路,事前為了避免惡意操作或者誤操作的發生,雲資料庫Redis&MongoDB提供了多個維度的授權機制,並通過風控系統進行釋放保護,在極端場景下安全風險事件發生時,通

一、整體說明

上圖是雲資料庫Redis&MongoDB的安全體系圖,橫向是實例控制鏈路,縱向是實例數據鏈路,對於控制鏈路,事前為了避免惡意操作或者誤操作的發生,雲資料庫Redis&MongoDB提供了多個維度的授權機制,並通過風控系統進行釋放保護,在極端場景下安全風險事件發生時,通過雲監控可以第一時間發現問題,通過控制台以及審計日誌可以快速的定位問題,當風險發生後,通過系統提供的各項恢復能力可以快速恢復業務,針對實例刪除,可以使用回收站,針對數據刪除(比如執行flushall),可以通過控制台數據恢復,shake工具,PITR,DBS等方式快速恢複數據。

Redis&Mongo實例數據鏈路的安全能力,分為接入層,網絡層,代理層(proxy),引擎層,存儲層 共5個維度。

接入層,也是訪問實例的入口,提供雲盾,堡壘機,DMS等產品,雲盾和堡壘機是阿里雲團隊提供的安全解決方案,DMS作為資料庫生態工具,提供了完善、成熟的數據安全訪問解決方案,從訪問和變更兩個方面進行安全管控。

網絡層,通過VPC進行網絡隔離,通過白名單和安全組攔截未經授權的訪問,通過SSL加密保證數據傳輸的安全性。

代理層,通過proxy審計日誌,在安全風險發生時可以快速定位到clientip,及時進行阻斷。

引擎層,通過Redis帳號ACL,高危命令攔截,MongoDB TDE透明數據加密等方式進一步進行安全加固。

存儲層,MongoDB在支持原生TDE加密模式的基礎上,進一步增加自定義密鑰材料的能力,實現從鏈路到存儲的全鏈路加密支持。

二、事前

自建Redis和MongoDB存在的問題:從控制面,權限未做隔離,從數據面,開源Redis 當前的5.0以及之前的版本均未提供ACL的能力。

在雲上,針對OPENAPI和控制台,支持RAM(Resource Access Management)的授權方式,可以使用RAM在主帳號的權限範圍內創建子帳號,給不同的子帳號分配不同的權限來允許或拒絕他們對雲資源的訪問,從而達到授權管理的目的。

與此同時,雲資料庫Redis&MongoDB也支持使用資源組來進行更細粒度的資源控制需求,通過資源組來支持用戶在資源組級別的授權,每個資源組都可以維護不同的實例列表,如果授予子用戶a作為資源組rg1的管理員,那么子用戶a能夠操作資源組rg1下的所有資源,而不能操作其他資源組的資源。

針對數據鏈路,雲上Redis支持帳戶ACL,可以獨立管理帳戶權限,通過白名單控制訪問,並在此基礎上通過安全組來優化維護體驗,將ecs實例通過安全組進行統一管理,並與redis或者mongodb實例進行關聯,每個redis實例最高支持關聯10個安全組。

如果惡意用戶突破了層層授權的限制,或者正常用戶誤觸發了刪除實例,我們還會通過二次提醒,以及風控系統提供的釋放保護能力,對實例進行更多的保護,有效杜絕誤操作或者惡意釋放的可能,同時對於大批量的實例釋放,則會自動觸發熔斷機制,對風險做緊急剎車。針對數據鏈路的誤操作,比如Redis 通過執行flushall等危險命令進行數據清理,或者執行keys可以阻塞正常的業務訪問等等,雲資料庫Redis提供no_loose_disabled-commands參數來攔截高危命令,支持攔截FLUSHALL、FLUSHDB、KEYS、HGETALL、EVAL、EVALSHA、SCRIPT等風險命令。

三、事中

通過權限和風控系統提供的系統保護,已經可以規避絕大部分的惡意操作或者誤操作,在極端情況下安全風險真的發生的時候,對比自建,雲資料庫Redis&MongoDB可以更快速的定位原因和影響,及時響應,快速恢復業務,通過雲監控,可以及時收到告警,快速介入處理,對於控制面的實例釋放,通過控制台的介面可以一目了然的看到影響的實例列表和影響業務範圍,對於數據鏈路(比如執行了flushall),通過產品提供的審計日誌的能力可以快速鎖定來源IP,快速進行阻斷,控制風險的進一步蔓延,如下面的圖片,通過審計日誌的關鍵詞搜索,快速的找到了問題IP。

四、事後

通過監控告警和日誌審計我們已經快速定位到問題,對風險IP也進行了及時阻斷,下一步當然是快速恢複數據,雲資料庫Redis和MongoDB支持了非常多樣化的恢復能力,對於誤操作或者惡意操作釋放實例,通過我們提供的回收站能力,可以快速進行重建恢復,數據會回到釋放前的狀態,同時保持相同的訪問地址。

針對非實例級別的數據被誤操作或者破壞的場景,使用各種數據恢復能力也可以快速恢複數據,比如備份集數據恢復和備份集克隆實例,前者使用備份集的數據替換當前實例的數據,備份集克隆實例則會重新生成一個新的實例,具有獨立的連結地址,用於進行數據恢復,對當前實例的數據無影響。

對於誤釋放的實例,備份集默認只會保留8天,也就是說,在這種場景下,8天之後已經無法使用回收站或者備份集直接恢複數據,這種情況下如果本地有下載過備份文件,則可以使用RedisSHAKE或者MongoSHAKE進行數據恢復,在控制台中的備份均支持下載,釋放也會提示進行備份,登錄可以連結Redis或者MongoDB實例的ecs伺服器,然後下載並解壓對應的shake工具,修改配置文件後,啟動shake即可使用備份文件快速恢複數據。

除此之外,也可以使用雲上的資料庫DBS服務進行定期的備份,也可以非常方便的進行事後恢復。

關鍵字: