Docker容器安全审计需分层采集:Docker daemon审计日志、auditd内核事件、应用平台(如Harbor)日志及Falco运行时检测,三者缺一不可;各场景需独立配置落盘路径、时间同步与日志轮转。

Docker 容器安全审计日志不能只靠 --log-driver 配,因为原生日志驱动只管容器的 stdout/stderr,不捕获内核级行为(比如谁启了容器、谁 exec 进去了、谁删了镜像)。真要满足等保、GDPR 或内部合规要求,得从日志来源分层处理:容器运行时行为 + 内核审计事件 + 应用自身操作,三者缺一不可。
明确你要审计什么
- 容器生命周期操作:start/stop/pause/kill —— 来自 Docker daemon 自身审计日志
- 容器内敏感行为:exec、shell 启动、写/etc/passwd、读敏感文件 —— 来自 auditd 系统调用监控
- 业务关键动作:Harbor 登录、镜像 push/pull、K8s Pod 创建 —— 来自应用或平台内置审计模块
分场景配,不堆组件
✅ 场景1:Docker daemon 级审计(推荐 Docker 27+)
启用实验性审计子系统,生成结构化 JSON 日志:
在 /etc/docker/daemon.json 加:
{
"experimental": true,
"audit-log": {
"path": "/var/log/docker/audit.json",
"log-format": "json",
"log-level": "info"
}
}重启 systemctl restart docker,之后所有带 --label audit=true 启动的容器,其创建、exec、pull 等事件都会落盘。字段含 user, image_digest, mounts, network_mode 等上下文,可直接被 Filebeat 或 Loki 消费。
✅ 场景2:Linux 内核级审计(auditd)
专盯系统调用,防逃逸、防提权:
- 确保
auditd服务运行,日志路径为/var/log/audit/audit.log - 加规则捕获容器相关行为(示例):
# 监控 docker 命令执行 -a always,exit -F path=/usr/bin/docker -F perm=x -k docker-exec # 监控容器内 execve(需开启 containerd audit 支持) -a always,exit -F arch=b64 -S execve -F uid!=0 -k container-exec
再用 Filebeat tail 该文件,输出到 Kafka 或 ELK:
filebeat.inputs:
- type: log paths: ["/var/log/audit/audit.log"] fields: {log_type: "auditd"} output.kafka: hosts: ["kafka:9092"] topic: "security-audit"
✅ 场景3:应用平台自带审计(如 Harbor)
不用额外采集,开开关就行:
在 harbor.yml 中设:
audit_log: enabled: true level: info max_size: 200M max_backup: 10 location: /var/log/harbor/audit.log
并映射宿主机卷:
volumes: - ./data/log/audit:/var/log/harbor
登录、建项目、推镜像等操作会实时写入,格式为标准 JSON,含 user, action, remote_addr, time。
✅ 场景4:运行时异常行为检测(Falco)
不是日志“采集”,而是实时“发现+记录”:
- 安装 Falco(推荐 eBPF 模式)
- 启用默认规则(如
Shell in container,Write to sensitive file) - 输出设为文件 + Syslog:
file_output: enabled: true keep_alive: false filename: /var/log/falco/events.json syslog_output: enabled: true
每条告警自带进程树、容器名、命名空间、命令行,天然适合作为安全审计补充源。
关键提醒
- 审计日志必须落盘到独立挂载卷或远程存储,禁止存在容器内或 tmpfs
- 所有日志路径(
/var/log/docker/audit.json,/var/log/audit/audit.log,/var/log/harbor/audit.log)需在宿主机上配置 logrotate 或由采集器自动轮转 - 时间必须同步(NTP),否则多源日志无法关联分析
- 不建议把 Filebeat/Falco 跑在容器里——它们需要 hostPath、特权、稳定生命周期
不复杂但容易忽略


















