容器內部操作審計功能可以方便您審計組織內成員或應用程序進入容器后執行的命令操作。本文介紹如何使用容器內部操作審計功能,以及如何通過日志服務收集分析審計日志,并根據需求為審計日志設置自定義的告警規則。
計費說明
容器內部操作審計功能當前處于公測中,可以免費使用。開通容器內部操作審計功能后,使用日志服務SLS的相關功能,會產生相關費用。日志服務相關計費信息,請參見計費概述。
使用限制
步驟一:啟用容器內部操作審計功能
您可以通過安裝logtail-ds組件和ack-advanced-audit組件啟用容器內部操作審計功能。
logtail-ds組件:將審計日志收集到日志服務并創建默認的審計報表。
ack-advanced-audit組件:實現容器內操作審計。
容器內部操作審計功能啟用后,默認將在logtail-ds組件使用的日志Project中創建一個名為advaudit-${cluster_id}的日志庫,用于保存審計日志。該日志庫數據的保存時間為180天。如需修改日志保存時間,請參見管理Logstore。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在組件管理頁面,在日志與監控頁簽定位logtail-ds組件,在安全頁簽定位ack-advanced-audit組件,并按照頁面提示完成安裝。
步驟二:查看審計報表
容器內部操作審計功能啟用后,默認將在日志Project下創建一個名為Kubernetes容器內部操作審計的報表。
登錄日志服務控制臺。
在Project列表區域,選擇集群使用的日志Project,單擊名稱進入日志Project頁面。
在頁面左側的圖標欄單擊儀表盤圖標,然后單擊Kubernetes容器內部操作審計查看審計報表內容。
查看進入Pod容器的次數以及相關Pod信息。
執行操作的Kubernetes操作賬號信息、進入容器后執行的命令列表以及常見的高危列表。
步驟三:查看詳細日志記錄
您可以通過以下兩種方式查看詳細的日志記錄。
在審計報表頁面查看:適用于查看最近的單個事件的日志記錄。
在日志庫頁面通過查詢語句查看:適用于復雜場景,查看更多的歷史信息以及歷史事件。
在審計報表頁面查看
在Kubernetes容器內部操作審計報表頁面,通過單擊風險程序操作列表區域的traceId和eventId表格列的鏈接,查看對應審計日志的詳細信息。
單擊traceId表格列的鏈接,可以查看單次進入容器后執行的所有操作命令的審計日志。
單擊eventId表格列的鏈接,可以查看執行的單個命令的詳細信息。
在日志庫頁面通過查詢語句查看
在日志庫頁面,通過查詢語句查看詳細的審計日志記錄。
登錄日志服務控制臺。
在Project列表區域,選擇集群使用的日志Project,單擊名稱進入日志Project頁面。
在 頁簽中,單擊名為advaudit-${cluster_id}的日志庫(Logstore)。
advaudit-${cluster_id}中,${cluster_id}為您的集群ID。
在輸入框中輸入查詢和分析語句。
查詢進入某個Pod的容器后執行的命令操作審計日志:輸入* and k8s.pod.namespace: <namespace> and k8s.pod.name: <pod_name>,將<namespace>替換為Pod所在的命名空間,<pod_name>替換為Pod的名稱。
查詢執行指定程序的操作審計日志:輸入* and process.name: <name>,將<name>替換為待查找的程序名稱。
更多查詢統計方式,請參見日志服務查詢分析方法。
單擊15分鐘(相對),設置查詢分析的時間范圍。
單擊查詢/分析,查看查詢分析結果。
(可選)步驟四:配置操作審計告警
通過日志服務的告警功能,您可以配置容器內部操作審計的實時告警,便于監控容器內關鍵的操作事件。告警方式支持短信、釘釘機器人、郵件、自定義Webhook和通知中心。本文以配置釘釘告警的方式,介紹如何配置容器內部操作審計告警。更多告警配置方式,請參見告警。
登錄日志服務控制臺。
進入Webhook集成頁面。
在Project列表區域,單擊目標Project。
在左側導航欄中,單擊告警。
在告警中心頁面,單擊通知對象頁簽,然后單擊Webhook集成。
創建Webhook。
在Webhook集成頁面,單擊新建。
在新建Webhook對話框中,配置如下配置項,然后單擊確認。
配置項
描述
標識符
Webhook的唯一標識,不可重復。本示例配置為ack-container-operation-audit-alert。
名稱
Webhook名稱。本示例配置為Kubernetes容器內部操作審計告警。
類型
Webhook類型。本示例選擇釘釘。
請求地址
Webhook URL地址。
在釘釘側創建自定義機器人,并獲取Webhook URL地址。更多信息,請參見自定義機器人接入。
新建內容模板。
在告警中心頁面,單擊通知策略頁簽,然后單擊內容模板。
在內容模板頁面,單擊創建。
配置內容模板的ID和名稱,然后配置釘釘告警通知的標題和發送內容。
關于添加內容模板的更多信息,請參見創建內容模板。本文需配置兩個內容模板,具體配置內容如下。
ID
名稱
標題
發送內容
ack-container-operation-audit-alert-enter
Kubernetes進入容器告警
KubernetesKubernetes容器內部操作審計告警
- 告警規則:${alert_name} - 觸發時間:${alert_time} - 告警嚴重度:${severity} - 集群ID:{{ alert.results[0].fire_result['clusterid'] }} 有賬號通過 kubectl exec或終端功能進入了容器,請檢查是否存在異常。 操作次數:{{ alert.fire_results_count }} 次,下面是其中一次操作的具體信息: - 操作時間:{{ alert.results[0].fire_result['time'] }} {% if alert.results[0].fire_result['k8s.user.aliuid'] -%} - 操作賬號:{{ alert.results[0].fire_result['k8s.user.aliuid'] }} {% else -%} - 操作賬號:{{ alert.results[0].fire_result['k8s.user.username'] }} {% endif -%} - 命名空間:{{ alert.results[0].fire_result['k8s.pod.namespace'] }} - Pod:{{ alert.results[0].fire_result['k8s.pod.name'] }} - 容器:{{ alert.results[0].fire_result['kubeobject.operation.podexecoptions.container'] }} - 命令:{{ alert.results[0].fire_result['kubeobject.operation.podexecoptions.commandstr'] }} [[詳情](${query_url})] [[設置](${alert_url})]
ack-container-operation-audit-alert-run-danger-cmd
Kubernetes進入容器后執行風險程序告警
Kubernetes容器內部操作審計告警
- 告警規則:${alert_name} - 觸發時間:${alert_time} - 告警嚴重度:${severity} - 集群ID:{{ alert.results[0].fire_result['clusterid'] }} 有賬號通過 kubectl exec或終端功能進入容器后執行了存在風險的程序命令,請檢查是否存在異常。 操作次數:{{ alert.fire_results_count }} 次,下面是其中一次操作的具體信息: - 操作時間:{{ alert.results[0].fire_result['time'] }} {% if alert.results[0].fire_result['k8s.user.aliuid'] -%} - 操作賬號:{{ alert.results[0].fire_result['k8s.user.aliuid'] }} {% else -%} - 操作賬號:{{ alert.results[0].fire_result['k8s.user.username'] }} {% endif -%} - 命名空間:{{ alert.results[0].fire_result['k8s.pod.namespace'] }} - Pod:{{ alert.results[0].fire_result['k8s.pod.name'] }} - 容器:{{ alert.results[0].fire_result['k8s.container.name'] }} - 操作目錄:{{ alert.results[0].fire_result['process.cwd'] }} - 執行的程序命令:{{ alert.results[0].fire_result['process.cmdline'] }} [[詳情](${query_url})] [[設置](${alert_url})]
配置告警。
在Kubernetes容器內部操作審計報表頁面,單擊 。
在告警監控規則頁面,配置Kubernetes進入容器告警和Kubernetes進入容器后執行風險程序告警的告警規則。配置完成后,單擊確定。
以下配置項均為示例值,請根據實際需求設置。
Kubernetes進入容器告警的告警規則
配置項
描述
規則名稱
Kubernetes進入容器告警
檢查頻率
固定間隔:1分鐘。
查詢統計
單擊右側添加,然后單擊高級配置頁簽,配置如下信息。配置完成后,單擊確認。
日志庫:搜索并選中advaudit-${cluster_id},例如advaudit-c76da730c08ca45adb90fad86fb74****。
查詢區間:本示例選中1分鐘(相對)。
查詢:設置日志庫后,會顯示該字段。代碼配置為:
kind: Kubernetes and kubeObject.operation.kind: PodExec | select "clusterid", "time", "traceId", "eventId", "k8s.user.aliuid", "k8s.user.username", json_extract(k8s, '$.user.groups') as "k8s.user.groups", "host.hostip", "host.nodename", "k8s.pod.namespace", "k8s.pod.name", json_extract(k8s, '$.pod.labels') as "k8s.pod.labels", "kubeobject.operation.podexecoptions.container", json_extract(kubeobject, '$.operation.podExecOptions.command') as "kubeobject.operation.podexecoptions.command", "kubeobject.operation.podexecoptions.commandstr" from log
觸發條件
選擇當有數據時,嚴重程度:報告。
告警策略
極簡模式。需配置如下信息。
渠道:選擇釘釘。
選擇Webhook:選擇Kubernetes容器內部操作審計告警。
提醒方式:選擇不提醒。
內容模板:搜索并選擇Kubernetes進入容器告警。
發送時段:選擇任意。
自動分派:默認關閉。
Kubernetes進入容器后執行風險程序告警的告警規則
配置項
描述
規則名稱
Kubernetes進入容器后執行風險程序告警
檢查頻率
固定間隔:1分鐘。
查詢統計
單擊右側添加,然后單擊高級配置頁簽,配置如下信息。配置完成后,單擊確認。
日志庫:搜索并選中advaudit-${cluster_id},例如advaudit-c76da730c08ca45adb90fad86fb74****。
查詢區間:選中1分鐘(相對)。
查詢:設置日志庫后,才會顯示該字段。代碼配置為:
kind: Command | select "clusterid", "time", "traceId", "eventId", "k8s.user.aliuid", "k8s.user.username", json_extract(k8s, '$.user.groups') as "k8s.user.groups", "host.hostip", "host.nodename", "k8s.pod.namespace", "k8s.pod.name", json_extract(k8s, '$.pod.labels') as "k8s.pod.labels", "k8s.container.name", "k8s.container.image", "process.cwd", "process.name", "process.cmdline", json_extract(process, '$.pid') as "process.pid", "process.user.uid", json_extract(process, '$.parentPid') as "process.parentpid", "process.parentname" from log where "process.name" in ('rm', 'sudo', 'su', 'nsenter', 'curl', 'wget', 'yum', 'apt-get', 'apt', 'apk', 'dpkg', 'nc', 'ncat', 'ssh', 'scp', 'nmap', 'docker', 'crictl', 'nerdctl', 'podman', 'kubectl', 'helm', 'mysql', 'redis', 'psql', 'redis-cli', 'pip', 'npm', 'gem')
觸發條件
當有數據時,嚴重程度:中。
告警策略
極簡模式。需配置如下信息。
渠道:選擇釘釘。
選擇Webhook:選擇Kubernetes容器內部操作審計告警。
提醒方式:選擇不提醒。
內容模板:選擇Kubernetes進入容器后執行風險程序告警。
發送時段:選擇任意。
自動分派:默認關閉。
測試告警規則。
通過
kubectl exec -it <pod_name> bash
命令進入容器,觸發Kubernetes進入容器告警的告警規則。告警信息如下圖所示。進入容器后,通過
touch a.txt && rm a.txt
命令,觸發Kubernetes進入容器后執行風險程序告警的告警規則。告警信息如下圖所示。
關閉容器內部操作審計功能
您可以通過卸載ack-advanced-audit組件關閉容器內部操作審計功能。
關閉容器內部操作審計功能,不會刪除自動創建的advaudit-${cluster_id}日志庫,您需要登錄日志服務控制臺手動刪除該日志庫,請參見刪除Logstore。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在組件管理頁面,單擊日志與監控頁簽,找到ack-advanced-audit組件,單擊組件右下方的卸載,按照頁面提示完成卸載。
相關文檔
關于ack-advanced-audit、logtail-ds組件的發布記錄及說明,請參見ack-advanced-audit、Logtail發布歷史。
API Server審計日志功能能夠幫助集群管理人員排查“什么人在什么時間對什么資源做了什么操作”,請參見使用集群API Server審計功能。