Kubernetes 审计日志判读是什么
Kubernetes 审计日志记录对 API Server 的每一次请求:是谁(user.username)、用什么动作(verb)、操作了哪类资源(objectRef.resource)、从哪个地址来(sourceIPs)。容器环境中凭据泄露与越权常表现为异常身份读取机密对象、创建 RBAC 绑定、在 Pod 内执行命令,这些都会留在这里。
基本信息
| 适用范围 | Kubernetes API Server 请求 |
|---|---|
| 关键字段 | user.username、verb、objectRef、requestURI、sourceIPs |
| 审计策略 | 由 AuditPolicy 决定记录级别(None/Metadata/Request/RequestResponse) |
| 日志位置 | 自建集群的审计文件、托管集群的控制台或日志服务 |
典型使用场景
- 排查异常身份读取机密对象与配置字典
- 排查 RBAC 被改动:创建角色绑定、提升权限
- 追踪在容器内执行命令的发起者与目标 Pod
- 排查高权限服务账号令牌被滥用
- 复盘容器内异常行为的操作来源
- 核对服务账号令牌的实际使用来源,识别令牌被复制到集群外使用的情况
检索
检索
jq 'select(.verb=="create") | {t:.requestReceivedTimestamp, u:.user.username, r:.objectRef.resource, ip:.sourceIPs}' audit.log | head -30
jq 'select(.objectRef.resource=="secrets") | {u:.user.username, n:.objectRef.name, v:.verb}' audit.log | head
jq 'select(.objectRef.subresource=="exec") | {u:.user.username, p:.objectRef.name, ip:.sourceIPs}' audit.log
jq 'select(.objectRef.resource=="rolebindings" or .objectRef.resource=="clusterrolebindings")' audit.log | head
# 关注系统账号之外的普通账号对机密对象与 RBAC 对象的读取与创建字段读法
| 字段 | 含义 | 异常表现 |
|---|---|---|
| user.username | 发起请求的身份 | 出现匿名身份或陌生服务账号 |
| verb | 动作:get/list/create/delete/exec | 普通账号出现创建或删除 RBAC 对象 |
| objectRef | 被操作的对象 | 集中指向机密对象与新建命名空间 |
| sourceIPs | 来源地址 | 来自非节点网段或陌生出口 |
| responseStatus.code | 请求结果码 | 403 密集说明有人在试探权限 |
在容器内执行命令的审计事件不含命令内容与终端输出,要看 Pod 侧日志、容器审计或节点侧痕迹补齐这一环。
默认审计策略级别有限。未配置策略或只记录元数据时,请求体与关键字段会缺失,排查前先确认策略到底记到了哪一级。
同一次请求可能生成多条审计事件(请求接收阶段与响应完成阶段各一条),做时间线前先确认取的是哪一类,避免同一操作被重复计数。