kubernetes审计日志是还原真实操作链路的唯一可信依据,需确认启用、验证策略加载、解析关键字段(如user.username、verb、requestobject.command),并通过sls快速筛选、traceid关联及导出分析定位高危行为。

当你在Kubernetes集群中发现某个Secret被意外删除、某个Pod被反复强制重启,或某条kubectl exec命令执行了rm -rf /,而操作者坚称“没动过”,这时必须依靠审计日志还原真实操作链路——它不依赖客户端日志、不信任用户陈述,只忠实记录API Server收到的每一个请求。
确认集群已启用审计功能并验证策略生效
登录容器服务ACK控制台 → 集群列表 → 单击目标集群 → 安全管理 → 审计 → 查看“集群审计”页签状态。若显示“未开启”,需先单击“开启审计”并等待约2分钟完成组件部署。
执行命令验证审计策略是否加载成功:kubectl get pod -n kube-system | grep apiserver,找到任一apiserver Pod后,运行:kubectl exec -n kube-system <apiserver-pod-name> -- ps aux | grep audit</apiserver-pod-name>。若输出中包含--audit-policy-file=且路径可访问(如/etc/kubernetes/audit/audit-policy.yaml),说明策略文件已挂载。
【注意:修改audit-policy.yaml后必须滚动重启kube-apiserver Pod,否则新规则永不生效】
定位高危运维指令对应的审计事件字段
审计日志每条记录是JSON格式,关键字段包括:user.username(执行账号)、verb(操作类型:create/delete/exec等)、resource(资源类型)、requestURI(完整请求路径)、responseObject(响应体,含被删对象详情)。
例如,一条违规的kubectl delete secret my-token -n default会生成verb为delete、resource为secrets、namespace为default、objectName为my-token的事件;而kubectl exec -it nginx-pod -- rm -f /etc/passwd则对应verb为create、resource为pods/exec、requestURI含/exec/子路径的记录。
特别注意:level: RequestResponse策略下,requestObject字段会完整记录命令参数(如rm -f /etc/passwd),这是识别恶意命令的核心依据。
从日志服务中快速筛选违规指令
方法一:使用日志服务SLS控制台检索
进入对应Project → Logstore(通常为audit-${cluster_id})→ 在查询分析框输入:
verb: "delete" and resource:"secrets" | select user.username, namespace, objectRef.name, requestURI, __time__ | sort __time__ desc
方法二:针对exec类高危操作,用正则精准捕获命令内容
resource:"pods/exec" and requestObject.command:* | select user.username, namespace, objectRef.name, requestObject.command, __time__ | where array_length(requestObject.command) > 0
方法三:通过traceID关联完整操作上下文
第一步:在审计日志中查到可疑verb: "exec"事件,复制其traceID字段值;
第二步:在同Logstore中搜索traceID: "xxx...",可拉出该次kubectl exec发起的全部关联请求(如认证、权限检查、实际执行);
第三步:结合user.username与user.groups字段,确认操作者是否具备对应RBAC权限——若为system:anonymous却执行了delete操作,说明认证环节已被绕过。
导出原始审计日志用于离线深度分析
在SLS查询结果页,点击右上角【导出】→ 选择【导出当前查询结果】→ 格式选JSON → 设置时间范围(建议至少覆盖7天)→ 单击【确定】。
下载得到的JSONL文件可用Python脚本解析,重点提取user.username、verb、resource、requestObject.command四字段,生成操作热力图或高频命令TOP10清单。
这一步操作起来很简单,直接把下载的audit.jsonl拖进VS Code,用正则"command":\s*(\[.*?\])就能批量提取所有exec命令。











