首页/开发/CI/CD 与发布速查/缓存与制品中的凭据泄漏
环境与配置管理60 条

缓存与制品中的凭据泄漏

构建缓存、镜像层、制品归档都可能夹带凭据:用短时凭据与 secret 挂载替代「写进构建环境」,并定期扫描制品。

CI/CD 与发布速查开发更新于 2026-10-13

凭据泄漏在哪里发生

构建缓存、镜像层、制品归档都可能夹带凭据:包管理器配置(.npmrc、.pypirc)、kubeconfig、镜像层里的环境变量与文件、CI 缓存目录都在高发名单上。对策分两头:事前用短时凭据与密钥挂载替代「写进构建环境」,事后定期扫描制品与历史层,发现即轮换凭据并重建受影响制品。

基本信息

适用平台Docker/BuildKit 构建、CI 缓存、制品库
高发位置包管理器配置、kubeconfig、镜像层里的环境变量与文件、CI 缓存目录
对策构建期用密钥挂载;凭据最小权限且短时效;事后扫描制品
清理发现即轮换凭据并重建受影响制品
审计定期扫描仓库历史与制品中的凭据残留

典型使用场景

  • 私有源认证:npm/pip 私有源令牌不进镜像层,用挂载注入
  • 镜像审计:对现网镜像做层扫描,找出历史残留凭据
  • 缓存治理:CI 缓存目录访问控制与定期清理
  • 事故响应:先轮换再重建制品,最后复盘入口
  • 发布前检查:把「制品内无凭据」列入检查清单
  • 轮换联动:发现泄漏先轮换凭据再清理,顺序不能反

BuildKit 挂载密钥

BuildKit 挂载密钥
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm ci  # 只读挂载,文件不进层
# 构建命令:docker build --secret id=npmrc,src=$HOME/.npmrc .
# 抽查:镜像历史里不应出现令牌字符串
docker history --no-trunc registry.example.com/app:1.9.0 | grep -i -E 'token|password' || echo clean

高发位置与对策

位置怎么进去的对策
包管理器配置复制或写入凭据文件密钥挂载
镜像层环境变量构建指令写入改为运行时注入
CI 缓存目录构建过程写盘缓存按权限隔离
制品归档打包带上本地文件打包白名单与扫描
缓存与层是「历史沉积」:改流程后旧内容仍在,需要清理与扫描确认,删除源配置不等于历史消失。
扫描范围要两边都覆盖:仓库全量拉取扫描加现网镜像抽查,只扫源码会漏掉制品里的残留。

易错点

  • 把令牌作为构建参数传入:会记录在镜像历史里,改用密钥挂载
  • 发现泄漏只删缓存不轮换:已发生的暴露不因删除而撤销,先轮换
  • 复制凭据文件再同层删除:底层拷贝仍在历史中,删除操作不回收
  • 只扫描源码仓库不扫制品:源码干净不代表制品干净,范围要含镜像与归档

数据来源与参考

  • Docker Docs《Build secrets》
  • Trivy 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌