本文档正在积极开发中,尚未最终定稿。
Skip to content

6.2 基础镜像政策 (Base Image Policy)

Docker 基础镜像管理

基于容器的产品安全始于基础镜像。本政策定义了基础镜像的要求及其持续更新。

要求

允许的基础镜像

类别允许的镜像理由
首选alpine, distroless, scratch最小攻击面
允许debian-slim, ubuntu (LTS)广泛兼容性
受限node, python, dotnet(官方)仅限官方镜像
禁止未知/非官方镜像不可验证

质量标准

  • 官方来源: 仅限 Docker Official Images 或 Verified Publisher
  • 当前版本: 最新的 LTS 或稳定版本
  • 最小体积: 优先使用 slim/Alpine 变体
  • 已知漏洞: 无未修补的 CRITICAL CVE

自动化基础镜像监控

现有工作流 modules-docker-base-image-monitor.yml 持续监控所有容器项目的基础镜像。

工作原理

定时任务(每周/每天)

    ├── 检查 Docker Hub API / GHCR
    │   └── 基础镜像是否有新版本?

    ├── 检测到新版本
    │   ├── 创建包含更新的 PR
    │   ├── 触发 CI/CD 流水线
    │   │   ├── 使用新基础镜像构建
    │   │   ├── 对新镜像进行 Trivy 扫描
    │   │   └── 测试
    │   │
    │   └── 成功后:
    │       ├── 自动合并(如已配置)
    │       └── 或:DevOps 审查

    └── 无新版本
        └── 下一个扫描周期

Dependabot Docker 监控

除基础镜像监控外,Dependabot 还监控 Docker 生态系统:

yaml
# .github/dependabot.yml
updates:
  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: "weekly"
    labels:
      - "dependencies"
      - "docker"
      - "security"

多阶段构建 (Multi-Stage Builds)

对于生产镜像,我们使用多阶段构建:

dockerfile
# 阶段 1:构建
FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build

# 阶段 2:生产(最小镜像)
FROM gcr.io/distroless/nodejs20-debian12
COPY --from=builder /app/dist /app
CMD ["app/server.js"]

优势:

  • 构建工具不包含在生产镜像中
  • 最小攻击面
  • 更小的镜像体积
  • 更少的潜在漏洞

基础镜像补丁流程

基础镜像中的 CVE 严重程度操作期限
CRITICAL立即更新 + 重新构建 + 发布48 小时
HIGH在下一个补丁版本中更新7 天
MEDIUM在下一个次要版本中更新30 天
LOW在常规周期中更新下一次发布

文档基于 CC BY-NC 4.0 许可 · 代码基于 MIT 许可