You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何记录K8s中在Pod内执行命令的用户操作及关联用户名?

解决方案:关联K8s用户名与Pod内操作日志

要实现将K8s/OpenShift用户与Pod内执行的命令关联记录,核心思路是把K8s审计日志的用户信息和容器Runtime级别的操作日志做关联匹配,弥补单一工具的信息缺失。具体实现步骤如下:

1. 从K8s审计日志提取用户与Pod关联信息

当用户通过kubectl exec或OpenShift的oc exec/rsh触发Pod内命令时,K8s审计日志会生成Exec类型的事件,其中包含关键字段:

  • user.username:触发操作的K8s用户名(比如user01)
  • objectRef.uid:目标Pod的唯一UID(跨命名空间唯一,是核心关联键)
  • requestObject.command:用户执行的初始命令片段

需配置审计日志的采集规则,确保这类Exec事件被完整捕获,重点提取上述三个字段。

2. 用Runtime工具捕获Pod内完整操作

使用Tetragon或Falco捕获容器内的所有进程执行事件,这些工具能提供:

  • k8s.pod.uid:Pod的唯一UID(和审计日志的objectRef.uid完全匹配)
  • process.command:容器内执行的完整命令(比如whoami、ls -l等)
  • process.pid、process.cwd等额外上下文信息

以Tetragon为例,可通过自定义规则捕获execve系统调用,确保所有交互式和非交互式命令都被记录;Falco则可启用默认的Exec规则集,补充自定义字段输出Pod UID。

3. 日志关联与聚合

搭建日志处理流水线,将两类日志导入同一分析系统(比如Elasticsearch、Loki),通过以下方式关联:

  • 关联键:使用Pod UID作为核心匹配字段
  • 时间窗口:设置合理的时间范围(比如10秒),匹配审计日志Exec事件与后续Runtime工具捕获的操作日志(因为kubectl exec触发后,容器内会立即启动对应进程)
  • 标签注入:在日志处理阶段(比如用Fluentd/Fluent Bit),将审计日志中的K8s用户名注入到对应的Runtime日志中,生成一条包含k8s_user、pod_uid、command的完整记录

4. 特殊场景处理

  • 对于容器启动时的初始化命令、内部进程触发的命令(非K8s用户通过exec触发),这类操作没有对应的K8s用户信息,可在日志中标记为internal_process,避免混淆
  • OpenShift环境下,可直接利用openshift-audit日志(包含更丰富的用户认证信息)和CRI-O的容器日志结合,简化关联流程

内容的提问来源于stack exchange,提问作者Michael Cab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:10:13