Kubernetes审计:API Audit日志启用

周叙
周叙
发布时间:2026-09-09| 4人浏览过
原创

理解 Kubernetes Audit 与审计级别

Kubernetes API Audit 机制用于记录集群控制面接收到的所有 API 请求与响应,是安全合规与故障排查的核心组件。每条审计事件以 JSON 格式输出,包含请求时间戳、发起用户(User/Group)、目标资源(API Group/Version/Resource)、请求动词(Verb)、源 IP 以及响应状态码等关键字段。Kubernetes 提供四种审计级别:None 不记录任何事件;Metadata 仅记录请求元数据(如用户、时间、资源),不包含请求体与响应体;Request 额外记录请求体内容;RequestResponse 则完整记录请求与响应体。在生产环境中,全量开启 RequestResponse 会导致日志体积暴增并显著增加 API Server 的序列化开销,通常建议对核心资源(如 Secret、ConfigMap)使用 Metadata 或 Request,对常规 Pod/Deployment 操作使用 Metadata,并在合规要求严格时按需开启 RequestResponse,以平衡安全可见性与集群性能。

展示真实 Kubernetes API Audit 事件日志,包含用户、资源、请求时间、审计级别和响应状态等字段,并直观体现不同审计级别的信息差异。
真实 Kubernetes Audit 事件示例,展示用户、请求资源、审计级别、时间戳和响应状态等字段。

编写 Audit Policy 审计策略

审计策略通过 audit-policy.yaml 定义,采用自上而下的规则匹配机制,一旦命中某条规则即停止向下匹配,未命中的请求将应用 rules 末尾的 fallback 规则。编写策略时,应优先将高敏感或高频操作前置。例如,可针对 secrets 资源设置 Request 级别以捕获创建/更新内容,对 pods 设置 Metadata 级别,对 system:serviceaccount 发起的常规心跳请求设置 None 级别以降低噪音。策略结构包含 apiVersion、kind: Policy 及 rules 数组,每条规则通过 resources、namespaces、users 或 verbs 进行过滤。为避免记录敏感信息(如密码、Token),切勿对包含认证凭据的 /login 或 /token 接口启用 RequestResponse,同时可利用 omitStages 字段过滤 RequestReceived 阶段,仅保留 ResponseComplete 阶段的最终结果,从而有效缩减日志体积并规避合规风险。

启用 API Server Audit 日志

启用 API Server 审计日志的核心在于向 kube-apiserver 注入审计策略文件路径与日志输出参数。在基于 kubeadm 部署的集群中,API Server 以静态 Pod 形式运行于 /etc/kubernetes/manifests/kube-apiserver.yaml。需在该文件的 command 或 args 中添加 --audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml 与 --audit-log-path=/var/log/kubernetes/audit/audit.log。同时,必须通过 volumeMounts 和 volumes 将宿主机的策略文件目录与日志目录挂载至容器内,确保 API Server 进程具备读写权限。修改 manifest 后,kubelet 会自动检测文件变更并重启静态 Pod。若使用二进制部署,则需在 systemd 启动参数中追加对应标志。注意日志目录需提前创建并设置 chown -R kube:kube 权限,否则 API Server 将因无法写入日志而启动失败。

展示真实 kube-apiserver 启动参数或静态 Pod manifest 中的 audit-policy-file、audit-log-path 等配置,以及控制面重载后的运行状态。
真实 kube-apiserver 静态 Pod 配置片段,突出 audit-policy-file 与 audit-log-path 参数。

验证审计事件与排查常见问题

验证审计功能是否正常,可通过执行明确的 API 操作并实时观察日志输出。例如运行 kubectl get pods -n default 后,使用 tail -f /var/log/kubernetes/audit/audit.log 检查是否生成包含 requestURI、user.username 及 responseStatus.code 的 JSON 事件。若日志未生成,需按顺序排查:首先确认 audit-policy.yaml 路径在容器内可访问且语法正确(可用 kubectl apply --dry-run=client -f 校验);其次检查宿主机日志目录权限与磁盘空间,避免 Permission denied 或 No space left on device;再次确认 kube-apiserver 进程参数是否生效(ps aux | grep audit);最后,生产环境必须配置日志轮转(如 logrotate),否则单一日志文件会撑爆磁盘。可设置 maxsize 100M 与 rotate 7,并配合 copytruncate 避免中断 API Server 写入流。

展示 kubectl 操作与 audit.log 实际输出的对应关系,包括 API 请求、用户、资源和 responseStatus 字段,并体现成功验证后的日志结果。
kubectl API 请求与 audit.log 输出的对应流程图,展示请求、kube-apiserver、审计日志及响应状态之间的关系。
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。