文章背景图

Kubernetes 审计与运行时安全:从 Audit Policy 到异常检测

2026-07-25
2
-
- 分钟

预防控制无法覆盖所有风险。Kubernetes 还需要回答:谁在什么时候对什么资源做了什么、操作来自哪里、结果如何。API 审计负责记录控制面行为,运行时监控负责发现容器和节点上的异常,两者结合才能形成可追踪的安全闭环。

## 1. Kubernetes 审计记录什么

审计事件由 kube-apiserver 产生,可以帮助回答:

- 哪个用户或 ServiceAccount 发起请求?

- 使用了什么 verb,访问了哪个资源?

- 请求来自哪个地址,何时发生?

- 请求成功、被拒绝还是触发了错误?

常见阶段包括 RequestReceived、ResponseStarted、ResponseComplete 和 Panic。审计事件与普通 Kubernetes Event 不同,后者主要反映资源状态变化,不能替代安全审计。

## 2. Audit Policy 的四个级别

- None:不记录匹配事件。

- Metadata:记录用户、时间、资源、动作等元数据,不记录请求体。

- Request:增加请求体,不记录响应体。

- RequestResponse:同时记录请求体和响应体,信息最完整,开销和敏感数据风险也最高。

规则按顺序匹配,第一条命中规则生效。生产环境不宜把所有请求都设置为 RequestResponse,尤其要避免把 Secret 内容写入日志。

一个保守的起点:

```yaml

apiVersion: audit.k8s.io/v1

kind: Policy

omitStages:

- RequestReceived

rules:

- level: Metadata

resources:

- group: ""

resources: ["secrets", "configmaps"]

- level: Request

verbs: ["create", "update", "patch", "delete"]

resources:

- group: "apps"

resources: ["deployments", "daemonsets", "statefulsets"]

- level: Metadata

```

应根据业务、合规和日志容量逐步调整,而不是直接照抄示例。

## 3. 启用日志后端

自建控制面可以在 kube-apiserver 中配置策略和日志路径:

```text

--audit-policy-file=/etc/kubernetes/audit-policy.yaml

--audit-log-path=/var/log/kubernetes/audit/audit.log

--audit-log-maxage=30

--audit-log-maxbackup=10

--audit-log-maxsize=100

```

若 API Server 作为静态 Pod 运行,需要把策略文件和日志目录通过 hostPath 挂载进去。修改前备份清单,并逐台控制面验证 API 健康。托管集群应使用云厂商提供的控制面审计功能。

Kubernetes 还支持 webhook 后端,把审计事件发送到外部系统。无论使用文件还是 webhook,都要监控导出错误和事件丢弃指标。

## 4. 应重点告警的行为

- 创建或绑定 cluster-admin。

- 修改 RoleBinding、ClusterRoleBinding 或准入策略。

- 读取大量 Secret,或异常 list/watch Secret。

- 创建 privileged、hostPID、hostNetwork 或挂载运行时 socket 的 Pod。

- 对 kube-system 中的对象进行非常规修改。

- 使用 exec 进入关键 Pod,或异常 port-forward。

- 删除审计、日志、安全代理或备份相关资源。

- 来自新 IP、非常用时段或陌生 User-Agent 的管理操作。

告警需要结合白名单和基线,避免正常发布触发大量噪声。

## 5. 运行时安全看什么

审计日志只能看到 API 行为。若攻击者已经进入容器,还需要监控:

- 容器内启动 shell、下载器或编译器。

- 写入敏感路径、修改系统二进制文件。

- 访问 Kubernetes 凭证或云元数据服务。

- 异常出站连接、端口扫描和挖矿特征。

- 容器逃逸迹象、namespace 切换或高风险系统调用。

- 安全代理停止、日志突然中断。

运行时规则应结合镜像内容和业务行为。例如,Web 容器本来不会启动 shell,那么出现 shell 的信号优先级就很高。

## 6. 事件响应流程

1. 记录告警时间、Pod、节点、命名空间、镜像摘要和发起身份。

2. 隔离风险工作负载或节点,避免继续横向移动。

3. 保护审计、容器、节点和网络证据。

4. 撤销可能泄露的 token、证书和云凭证。

5. 从可信镜像和干净节点重建,而不是只在原容器里删文件。

6. 回溯 RBAC、NetworkPolicy、镜像链路和变更记录。

7. 把新发现转化为检测规则和预防策略。

不要急于删除所有异常 Pod;如果没有保存证据,事后很难确认影响范围。

## 7. 日志治理

审计日志可能包含用户名、IP、资源名和部分请求数据,应加密传输、限制访问、设置保留期,并防止业务管理员随意删除。日志平台要统一时间,保存原始事件,同时对高价值事件建立可查询字段。

## 参考资料

- https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/

- https://kubernetes.io/docs/concepts/security/security-checklist/

原创

Kubernetes 审计与运行时安全:从 Audit Policy 到异常检测

本文链接: Kubernetes 审计与运行时安全:从 Audit Policy 到异常检测

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录