预防控制无法覆盖所有风险。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/