當您需要全面監控和審計服務網格內的KubeAPI操作時,可以使用KubeAPI操作審計功能,記錄或追溯不同用戶的日常操作。通過查看審計中心概覽、賬號操作詳情、資源操作概覽和指定資源的詳細操作列表,您可以更好地追蹤和分析關鍵事件,了解資源的分布情況和操作統計,提高網格的安全性和可追溯性,優化安全策略和資源管理,確保服務網格的穩定運行和高效利用。
前提條件
背景信息
本文中所提及的資源指的是Istio資源,包括VirtualService、Gateway、DestinationRule、EnvoyFilter、Sidecar、ServiceEntry等。
審計功能開啟后,審計日志會產生費用,計費方式請參見按使用功能計費。
步驟一:啟用KubeAPI操作審計功能
新建ASM實例
已創建ASM實例
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在網格審計頁面,選中啟用網格審計,然后單擊確定。
步驟二:查看KubeAPI審計報表
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在網格審計頁面,按需單擊API訪問概覽、資源操作詳細列表頁簽,查看審計報表詳情。
API訪問概覽:查看網格實例的Kube API訪問行為的詳細信息。
資源操作詳細列表:查看網格實例中指定資源的詳細操作列表。
您需要選擇或輸入指定的資源類型進行實時查詢,包括資源操作各類事件的總數、Namespace分布、時序趨勢以及詳細操作列表。
相關操作
查看詳細日志記錄
如果您有自定義查詢和分析審計日志的需求,可以進入日志服務管理控制臺查看詳細的日志記錄。
登錄日志服務控制臺。
在Project列表區域,單擊名為mesh-log-${Mesh-ID}的日志Project。
選擇名稱為audit-${Mesh-ID}的日志庫,單擊查詢 / 分析,查看對應的審計日志。
說明在啟用網格審計時,生成的日志Project中會自動添加一個名為audit-${Mesh-ID}的日志庫。
審計日志的日志庫默認已經配置索引。請不要修改索引,以免報表失效。
ASM的API Server審計日志在日志服務中對應的日志庫數據默認保存時間為30天,如需修改日志的默認保存時間,請參見管理Logstore。
常見的審計日志搜索方式如下所示。
查詢某一子賬號的操作記錄,直接在搜索框中輸入子賬號ID,單擊查詢 / 分析。
查詢某一資源的操作,直接在搜索框中輸入資源名,單擊查詢 / 分析。
過濾系統組件的操作,在搜索框中輸入
NOT user.username: node NOT user.username: serviceaccount NOT user.username: apiserver NOT user.username: kube-scheduler NOT user.username: kube-controller-manager
,單擊查詢 / 分析。
更多查詢和統計方式,請參見查詢概述。
設置告警
若您需要對某些資源的操作進行實時告警,可以通過日志服務的告警功能實現。告警方式支持短信、釘釘機器人、郵件、自定義WebHook和通知中心。更多信息,請參見告警。
關于審計日志的更多查詢方式,您還可以通過審計報表中的查詢語句來查詢審計日志:
示例一:對容器執行命令時觸發告警
某公司對于網格實例的使用有嚴格限制,不允許用戶登錄容器或對容器執行命令。如果有用戶執行命令時需要立即給出告警,并希望告警時能夠顯示用戶登錄的具體容器、執行的命令、操作人、事件ID、時間、操作源IP等信息。
查詢語句如下所示。
verb : create and objectRef.subresource:exec and stage: ResponseStarted | SELECT auditID as "事件ID", date_format(from_unixtime(__time__), '%Y-%m-%d %T' ) as "操作時間", regexp_extract("requestURI", '([^\?]*)/exec\?.*', 1)as "資源", regexp_extract("requestURI", '\?(.*)', 1)as "命令" ,"responseStatus.code" as "狀態碼", CASE WHEN "user.username" != 'kubernetes-admin' then "user.username" WHEN "user.username" = 'kubernetes-admin' and regexp_like("annotations.authorization.k8s.io/reason", 'RoleBinding') then regexp_extract("annotations.authorization.k8s.io/reason", ' to User "(\w+)"', 1) ELSE 'kubernetes-admin' END as "操作賬號", CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END as "源地址" limit 100
條件表達式如下所示。
操作事件 =~ ".*"
示例二:APIServer公網訪問失敗時觸發告警
某網格實例開啟了公網訪問,為防止惡意攻擊,需要監控公網訪問的次數以及失敗率。若訪問次數到達一定閾值(例如10次)且失敗率高于一定閾值(例如50%)則立即告警,并希望告警時能夠顯示用戶的IP所屬區域、操作源IP、是否高危IP等信息。
查詢語如下所示。
* | select ip as "源地址", total as "訪問次數", round(rate * 100, 2) as "失敗率%", failCount as "非法訪問次數", CASE when security_check_ip(ip) = 1 then 'yes' else 'no' end as "是否高危IP", ip_to_country(ip) as "國家", ip_to_province(ip) as "省", ip_to_city(ip) as "市", ip_to_provider(ip) as "運營商" from (select CASE WHEN json_array_length(sourceIPs) = 1 then json_format(json_array_get(sourceIPs, 0)) ELSE sourceIPs END as ip, count(1) as total, sum(CASE WHEN "responseStatus.code" < 400 then 0 ELSE 1 END) * 1.0 / count(1) as rate, count_if("responseStatus.code" = 403) as failCount from log group by ip limit 10000) where ip_to_domain(ip) != 'intranet' having "訪問次數" > 10 and "失敗率%" > 50 ORDER by "訪問次數" desc limit 100
條件表達式如下所示。
源地址 =~ ".*"
重建網格審計
如果您誤刪了日志服務SLS中用于網格審計的Project,但是仍然想要使用網格審計功能,您需要重建用于網格審計的Project。
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在網格審計頁面彈出的重建網格審計對話框,單擊重建。
重建后的Project名稱為上一次Project名稱基礎上加上時間戳。
相關文檔
當您需要在重要資源變動時及時發送告警通知到告警聯系人,請參見為網格資源操作配置審計告警。
您可以在網格中配置工作負載身份、對等身份認證、請求身份認證、授權策略等,更加細粒度地管理網格資源,提高網格的安全性。具體操作,請參見零信任安全概述。