前言
操作審計(ActionTrail)是阿里雲提供的雲賬號資源操作記錄的查詢和投遞服務,可用於安全分析、資源變更追蹤以及合規性審計等場景。阿里雲客戶在操作審計控制檯可以查看近90天的操作日誌,但在實際應用中,需要普遍分析基於全Region並且90天以上的操作事件,用於一些複雜的聚合查詢分析。此時我們可以在ActionTrail控制檯上創建跟蹤將操作日誌投遞到指定日誌服務(SLS),利用SLS的實時索引,查詢分析數據的能力我們可以對全量的操作事件進行復雜的聚類分析查詢。以下列舉了一些結合SLS對行為分析,安全合規的一些使用場景。
AK洩漏了怎麼辦?
問題現狀
某企業發現存在一些異常調用,懷疑是由於人事調動導致AK(AccessKey)的洩漏,那麼如何去驗證猜想?彆著急,操作審計(ActionTrail)能夠解決你的燃眉之急,在ActionTrail控制檯完成投遞跟蹤到SLS之後,我們就可以藉助SLS提供數據分析能力來分析AK的調用軌跡。
分析思路
具體的分析思路是我們可以獲取AK調用來源IP的城市,一旦發現當前城市非企業所在地,那麼就可以明確當前AK確實存在洩漏,需要通過RAM重新分配調整子賬號權限。
查詢分析語句
__topic__: actiontrail_audit_event and event.userIdentity.accessKeyId:<YourAccessKeyId> | SELECT count(1) as pv, city FROM (SELECT "event.sourceIpAddress" AS ip, ip_to_city("event.sourceIpAddress") as city FROM log) WHERE ip_to_domain(ip)!='intranet' GROUP BY city ORDER BY pv DESC
以上查詢能夠獲取指定AK所產生調用的來源地址,並且給出具體的調用量,當然直接分析ip地址的網段也可以定位到指定AK是否存在異常調用。
是誰修改了ECS實例?
問題現狀
企業上雲之後對於內部雲設施資源的審計越來越重視,雲資源的安全合規操作也是企業上雲的必經之路。對於企業內部雲上資源的運維調度,以及相關的風險等級較高的資源調配操作,如何去獲取指定資源(如ECS)的所有修改者,從中篩選得到非法來源的調用者,並以此進行責任追溯?以下提供了一種查詢某段時間內高危操作的執行者。
分析思路
我們可以將關注的雲產品以及執行操作按照執行者進行分組,統計每個雲產業下任意一個API被誰執行以及執行的次數,從中篩選出一些非法的調用來源,並以此結果進行追責。
查詢分析語句
__topic__: actiontrail_audit_event | SELECT serviceName, eventName, userName, count(1) as pv FROM (SELECT "event.eventName" as eventName, "event.serviceName" as serviceName, "event.userIdentity.userName" as userName FROM log) WHERE (serviceName = <TargetServiceName> and eventName = <TargetEventName>) GROUP BY serviceName, eventName, userName
以上查詢統計了對於指定雲產品操作執行者列表,我們可以把TargetServiceName和TargetEventName分別指定為Ecs和DeleteInstances,如此一來便可以獲取到所以執行Ecs實例的刪除的操作者。定位到了Ecs實例的非法操作之後,我們需要獲取非法的操作記錄,以便於進行狀態復原和問題修復:
__topic__: actiontrail_audit_event and event.serviceName:<TargetServiceName> and <TargetResourceId> and event.userIdentity.accessKeyId:<YourAccessKeyId>
自定義數據看板
隨著雲企業自身業務的快速發展,對於部分核心資源的調用頻率週期需要產出完整的數據報表,用以資源容量的預估以及風險的預判。
需求分析
例如企業內部需要生成ECS實例創建近半年來的數據報表,通過分析同比以及環比來預測未來半年內資源擴充以便合理的控制和規劃成本開銷。
查詢分析語句
__topic__: actiontrail_audit_event and event.serviceName:<TargetServiceName> and event.eventName:<TargetEventName> | select t, diff[1] as current, diff[2] as last_month, diff[3] as percentage from(select t, compare( pv , 2592000) as diff from (select count(1) as pv, date_format(from_unixtime(__time__), '%m') as t from log group by t) group by t order by t)
以上分析實現了一個數據報表,我們將TargetServiceName和TargetEventName兩個變量分別指定為Ecs和CreateInstance,就能夠獲取出ECS實例每個月的創建次數,並且展示同比上個月的增長幅度。
可視化呈現
為了更加直觀的展示數據變化趨勢,可以折線圖方式將效果進行呈現。
除此之外,我們還可以類似的方式對部分風險等級較高的操作產出數據報表,並且可以從中分析調用規律以及流程高低峰所在時間點,以便於更加合理的規劃資源,提升資源的利用率。
異常監控報警
為了對雲上設施資源的操作提供更加全局的視角,ActionTrail會自動為投遞logstore創建儀表盤,其中記錄了事件的調用量趨勢、事件來源分佈、事件區域分佈、事件來源分佈以及事件類型分佈等實時數據分析大盤。
自定義儀表盤
日誌服務可以根據儀表盤中的查詢圖表進行配置監控報警,實現實時服務狀態的監控。除此之外我們也可以將自定義的統計圖表添加到儀表盤中,以便實現定製化業務的實時監控,假設某企業需要對每個產品的日訪問量做統計,當某個產品某日的訪問量超過近60天的平均訪問量的一定水位時,比如臨界閾值到達150%時執行告警。
__topic__: actiontrail_audit_event |select a.serviceName, a.avg_pv, b.today_pv from (select serviceName, avg(pv) as avg_pv from (select "event.serviceName" as serviceName, count(1) as pv, date_format(from_unixtime(__time__), '%m-%d') as day from log group by serviceName, day) group by serviceName) a join (select "event.serviceName" as serviceName, count(1) as today_pv from log where date_format(from_unixtime(__time__), '%Y-%m-%d')=current_date group by serviceName) b on a.serviceName = b.serviceName
以上查詢統計出各個雲產品在近60天(時間區間可自定義)內的平均流量以及當天的實時的流量,我們可以折線圖的方式進行呈現,當然我們可以添加過濾條件來排除不關注的雲產品或者相關事件。接下來可以將該圖標添加到已有的ActionTrail儀表盤中,並且新增對其的業務報警。
設置業務告警
在儀表盤中定位到新增的圖標,點擊右上角按鈕新增告警,配置觸發條件以及通知組即可完成,除此之外可以配置報警頻率以及通知方式,具體配置可見SLS設置告警。其中$0表示第一條查詢語句關聯的原始圖表數據,即每個雲產品的當日訪問量以及最近60天的平均訪問量,$0.avg_pv即表示雲產品最近60天的平均訪問量。
結束語
本文旨在將SLS提供的實時索引,分析查詢的能力與ActionTrail跟蹤投遞的操作事件相結合,對安全合規,行為分析,安全分析,資源變更行為追蹤和行為合規性審計提供新的分析和構建思路。各位讀者可以在上述提供的場景例子為借鑑,進一步引申,將操作審計的業務價值最大化。