當您需要全面監控和審計服務網格內的KubeAPI操作時,可以使用KubeAPIAction Trail功能,記錄或追溯不同使用者的日常操作。通過查看審計中心概覽、帳號操作詳情、資源操作概覽和指定資源的詳細巨集指令清單,您可以更好地追蹤和分析關鍵事件,瞭解資源的分布情況和操作統計,提高網格的安全性和可追溯性,最佳化安全性原則和資源管理,確保服務網格的穩定運行和高效利用。
前提條件
背景資訊
本文中所提及的資源指的是Istio資源,包括VirtualService、Gateway、DestinationRule、EnvoyFilter、Sidecar、ServiceEntry等。
審計功能開啟後,審計日誌會產生費用,計費方式請參見按使用功能計費。
步驟一:啟用KubeAPIAction Trail功能
建立ASM執行個體
已建立ASM執行個體
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在網格審計頁面,選中啟用網格審計,然後單擊確定。
步驟二:查看KubeAPI審計報表
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在網格審計頁面,按需單擊API訪問概覽、資源操作詳細列表頁簽,查看審計報表詳情。
API訪問概覽:查看網格執行個體的Kube API訪問行為的詳細資料。
資源操作詳細列表:查看網格執行個體中指定資源的詳細巨集指令清單。
您需要選擇或輸入指定的資源類型進行即時查詢,包括資源操作各類事件的總數、Namespace分布、時序趨勢以及詳細巨集指令清單。
相關操作
查看詳細日誌記錄
如果您有自訂查詢和分析審計日誌的需求,可以進入Log Service管理主控台查看詳細的日誌記錄。
在Project列表地區,單擊名為mesh-log-${Mesh-ID}的日誌Project。
選擇名稱為audit-${Mesh-ID}的日誌庫,單擊查詢 / 分析,查看對應的審計日誌。
說明在啟用網格審計時,產生的日誌Project中會自動添加一個名為audit-${Mesh-ID}的日誌庫。
審計日誌的日誌庫預設已經配置索引。請不要修改索引,以免報表失效。
ASM的API Server審計日誌在Log Service中對應的日誌庫資料預設儲存時間為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
,單擊查詢 / 分析。
更多查詢和統計方式,請參見查詢概述。
設定警示
若您需要對某些資源的操作進行即時警示,可以通過Log Service的警示功能實現。警示方式支援簡訊、DingTalk機器人、郵件、自訂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
條件運算式如下所示。
源地址 =~ ".*"
重建網格審計
如果您誤刪了Log ServiceSLS中用於網格審計的Project,但是仍然想要使用網格審計功能,您需要重建用於網格審計的Project。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在網格審計頁面彈出的重建網格審計對話方塊,單擊重建。
重建後的Project名稱為上一次Project名稱基礎上加上時間戳記。
相關文檔
當您需要在重要資源變動時及時發送警示通知到警示連絡人,請參見為網格資源操作配置審計警示。
您可以在網格中配置工作負載身份、對等身份認證、請求身份認證、授權策略等,更加細粒度地管理網格資源,提高網格的安全性。具體操作,請參見零信任安全概述。