预防控制无法覆盖所有风险。Kubernetes 还需要回答:谁在什么时候对什么资源做了什么、操作来自哪里、结果如何。API 审计负责记录控制面行为,运行时监控负责发现容器和节点上的异常,两者结合才能形成可追踪的安全闭环。
1. Kubernetes 审计记录什么
审计事件由 kube-apiserver 产生,可以帮助回答:
哪个用户或 ServiceAccount 发起请求?
使用了什么 verb,访问了哪个资源?
请求来自哪个地址,何时发生?
请求成功、被拒绝还是触发了错误?
常见阶段包括 RequestReceived、ResponseStarted、ResponseComplete 和 Panic。审计事件与普通 Kubernetes Event 不同,后者主要反映资源状态变化,不能替代安全审计。
2. Audit Policy 的四个级别
None:不记录匹配事件。
Metadata:记录用户、时间、资源、动作等元数据,不记录请求体。
Request:增加请求体,不记录响应体。
RequestResponse:同时记录请求体和响应体,信息最完整,开销和敏感数据风险也最高。
规则按顺序匹配,第一条命中规则生效。生产环境不宜把所有请求都设置为 RequestResponse,尤其要避免把 Secret 内容写入日志。
一个保守的起点:
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 中配置策略和日志路径:
--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. 事件响应流程
记录告警时间、Pod、节点、命名空间、镜像摘要和发起身份。
隔离风险工作负载或节点,避免继续横向移动。
保护审计、容器、节点和网络证据。
撤销可能泄露的 token、证书和云凭证。
从可信镜像和干净节点重建,而不是只在原容器里删文件。
回溯 RBAC、NetworkPolicy、镜像链路和变更记录。
把新发现转化为检测规则和预防策略。
不要急于删除所有异常 Pod;如果没有保存证据,事后很难确认影响范围。
7. 日志治理
审计日志可能包含用户名、IP、资源名和部分请求数据,应加密传输、限制访问、设置保留期,并防止业务管理员随意删除。日志平台要统一时间,保存原始事件,同时对高价值事件建立可查询字段。
参考资料
8. 上线与演练检查清单
□ Audit Policy 已经过测试,关键事件可在日志平台检索
□ 日志链路具备缓冲、加密、访问控制和防篡改能力
□ 高危身份、敏感资源和异常来源已建立低噪声告警
□ 运行时规则已按工作负载基线调优,并验证不会影响业务
□ 隔离 Pod/节点、吊销凭证、保存证据和可信重建流程已演练
□ 告警均有负责人、处置时限、升级路径和复盘标准
总结
Kubernetes 安全必须把预防、审计、运行时检测和事件响应串成闭环。Audit Policy 解决“谁对 API 做了什么”,运行时监控解决“容器和节点正在发生什么”,演练和复盘确保发现异常后能够真正控制影响。