docker 27+ 需启用 daemon.json 中 experimental:true 及 audit-log 配置,并补全 host auditd 规则,才能满足等保/gdpr 要求的操作行为审计日志;log-driver 不可用 json-file,audit-log-path 需 root 权限且 selinux 上下文正确。
要让 docker 的 daemon.json 真正支持**安全审计日志**,不能只改日志驱动——必须区分清楚两类日志:一类是容器自身的 stdout/stderr 日志(如 json-file),另一类才是满足等保、gdpr 等合规要求的**操作行为审计日志**,它需覆盖“谁、在什么时间、通过什么方式、对什么资源、执行了什么操作、结果如何”。docker 27 起才原生支持结构化审计日志管道,配置逻辑也更清晰。
启用原生 audit-log 审计流(Docker 27+ 推荐)
这是最直接、最合规的方式。Docker 27 内置 audit-log 功能,独立于容器日志,事件类型丰富、字段语义明确、支持阻塞写入防丢失。
- 编辑
/etc/docker/daemon.json,写入以下最小可用配置:
-
log-driver设为journald或local均可,但不建议用json-file—— 它无法与 audit-log 插件协同; -
experimental: true是必需项,Docker 27 的 audit-log 属实验性功能,未开启则配置被忽略; -
log-path必须指向有写权限的安全目录(建议提前mkdir -p /var/log/docker/audit并chown root:root); - 重启生效:
sudo systemctl restart docker; - 验证:
sudo tail -f /var/log/docker/audit.log,运行docker run --rm alpine echo ok应立即看到含"event_type":"container_start"的 JSON 行。
补全宿主机 auditd 规则(必备,否则缺关键上下文)
仅靠 daemon.json 的 audit-log 还不够。它不记录调用者 IP、进程名(comm)、系统调用链等内核级信息,而这些是等保 8.1.4 条款明确要求的字段。必须配合宿主机 auditd。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 确认 auditd 正常运行:
sudo systemctl is-active auditd; - 添加两条核心监控规则:
sudo auditctl -w /var/run/docker.sock -p wa -k docker_socket
- 第一条捕获 dockerd 自身执行行为(如热重载配置);
- 第二条捕获所有通过 socket 发起的 API 请求(包括 curl、docker CLI、K8s kubelet);
- 持久化规则:把上述命令写入
/etc/audit/rules.d/docker.rules,再sudo augenrules --load; - 查日志:
sudo ausearch -i -k docker_socket | grep -E "(comm=|addr=|syscall=|success=)",重点关注comm(调用命令名)和addr(源 IP,本地调用显示为localhost或空,此时需结合 journal 日志补全)。
增强审计字段与溯源能力
默认 audit-log 字段较基础。可通过 log-opts 注入容器元数据,提升溯源精度,尤其适合多租户或 K8s 场景。
- 在
audit-log配置块外,补充log-opts(注意:不是 audit-log 的子项):
-
tag模板中{{.ImageDigest}}可绑定镜像唯一指纹,防止同名镜像混淆; -
labels用于打标,后续可被 Fluent Bit 或 Loki 按 label 过滤路由; - 若需记录用户 UID,确保 dockerd 启动用户固定(如 root),且客户端调用时未显式降权(如
sudo -u nobody docker ps会导致 actor_id 显示为uid:65534)。
规避常见失效陷阱
很多配置看似生效,实则审计断点。以下问题高频出现:
-
SELinux 阻断日志写入:若启用了 enforcing 模式,
/var/log/docker/audit.log可能因上下文不匹配被拒绝写入。修复命令:sudo semanage fcontext -a -t var_log_t "/var/log/docker(/.*)?",再sudo restorecon -Rv /var/log/docker; -
systemd-journald 截断长日志:journald 默认限制单条消息长度(
SystemMaxLineLength)。若审计日志含完整 exec 参数或证书信息,需在/etc/systemd/journald.conf中设SystemMaxLineLength=64K并sudo systemctl restart systemd-journald; -
audit-log-path 权限错误:目录属主必须为
root:root,权限 ≤0755,文件权限 ≤0644,否则 dockerd 启动失败并静默跳过 audit-log; -
混淆 daemon 日志与容器日志:不要把
"log-driver":"json-file"和"audit-log"同时设为同一路径,二者日志格式、用途、保留策略完全不同,混用将导致解析失败或合规检查不通过。










