标准答案

  1. 构建阶段需要凭据时应使用构建器提供的 secret mount,并确保凭据不写入最终层和缓存。
  2. 运行时秘密应通过受控 secret 管理和挂载方式注入,限制读取权限、生命周期和审计范围。
  3. 镜像、Dockerfile、构建日志、进程命令行和环境快照都要作为可能泄露的位置检查。
  4. 一旦秘密进入镜像或日志,应立即轮换并检查访问记录,不能只删除 Dockerfile 中的一行。

题目解析

ARG、ENV、Dockerfile 指令、构建日志、缓存和进程环境都可能留下秘密,删除文件不一定删除历史 layer。构建阶段应使用 BuildKit secret mount 等不进入镜像层的方式;运行阶段应由 Secret 管理系统按最小权限、短生命周期和审计要求注入。

秘密一旦进入镜像、日志或仓库,应按已经泄露处理:立即轮换、撤销旧凭据、检查访问记录和缓存范围,并重新构建干净制品。安全验证要覆盖构建产物、metadata、运行时 env、core dump 和诊断输出。

常见误区

  • 误区:RUN echo $TOKEN 后再删除。改正:使用 secret mount,确保值不进入 layer、缓存、日志和最终镜像。
  • 误区:把生产密码写进 compose 文件并提交仓库。改正:使用受控 Secret 注入和权限审计,仓库只保留引用或模板。

作者信息