4. 镜像仓库安全策略:访问控制、镜像签名验证、漏洞扫描、镜像清理策略

镜像仓库是容器供应链的核心资产节点,一旦被攻破或配置失当,攻击者可以注入恶意镜像、窃取敏感负载或篡改生产部署。本章围绕仓库安全四维策略展开:访问控制(谁可以拉/推)、签名验证(镜像是否可信)、漏洞扫描(镜像内已知风险)、清理策略(防止过期镜像堆积与泄露)。

容量水位视角: 安全策略直接影响仓库存储增长曲线与拉取性能。例如,未清理的过期镜像会占用存储配额,而签名验证失败会导致部署流水线阻塞,形成“安全积压”。巡检时应将安全事件与存储水位关联分析。

4.1 访问控制:最小权限与多租户隔离

访问控制是仓库安全的第一道门。生产环境应遵循 RBAC(基于角色的访问控制) 与 ABAC(基于属性的访问控制) 混合模型,确保每个身份只拥有完成其任务所需的最小权限。

角色 典型权限 适用场景
匿名用户 只读(公开仓库) 开源镜像拉取
开发者 推送到 dev/feature 命名空间 日常开发与 CI 构建
安全审核员 只读 + 扫描报告查看 合规审计与漏洞追踪
运维管理员 全仓库管理 + 清理策略配置 仓库运维与容量规划
巡检要点: 检查是否存在长期未轮转的机器人令牌、是否启用了 IP 白名单或 VPC 端点限制、匿名拉取是否被意外开启。建议每季度执行一次权限审计,移除僵尸账号与过期密钥。

4.2 镜像签名验证:从推送到部署的信任链

镜像签名使用非对称加密为镜像内容生成数字签名,确保镜像在构建后未被篡改。主流方案包括 Docker Content Trust (DCT)、Notary 以及 Sigstore Cosign。签名验证应嵌入 CI/CD 流水线的两个关键节点:推送时强制签名 与 部署前验证签名。

镜像签名验证信任链流程 开发者/CI 构建 签名工具 (Cosign) 镜像仓库 K8s 准入控制器 签名存储 (OIDC/KEYS) 验证签名 关键策略: • 推送时:仓库拒绝未签名镜像(设置仓库策略 require_signature) • 部署时:K8s 通过 OPA/Gatekeeper 或 Kyverno 校验签名,拒绝未通过验证的 Pod
常见陷阱: 签名密钥管理不当(如私钥泄露、未轮转)、签名验证跳过(CI 中设置 DCT_SKIP_VERIFY=true)、以及签名存储与镜像仓库分离导致的验证超时。巡检时应检查签名覆盖率:已签名镜像数 / 总镜像数 ≥ 95%。

4.3 漏洞扫描:持续检测与阻断策略

镜像漏洞扫描应覆盖 操作系统包(如 apt、yum、apk)与 应用依赖(如 pip、npm、maven)。扫描时机包括:推送时触发、定时全量扫描、以及部署前强制扫描。扫描结果应关联 CVE 严重等级 与 修复状态,形成阻断策略。

扫描阶段 阻断策略 容量水位影响
推送时扫描 Critical/High 漏洞 → 拒绝推送 减少无效镜像存储,降低仓库膨胀速度
定时全量扫描 发现新漏洞 → 通知 + 自动打标签(quarantine) 隔离高危镜像,避免被拉取部署
部署前扫描 准入控制器拦截未通过扫描的镜像 防止已过期的扫描结果进入生产
巡检指标: 扫描覆盖率(应接近 100%)、扫描延迟(推送后 5 分钟内完成)、以及“已隔离镜像”占仓库总存储的比例。若隔离镜像占比超过 10%,说明基础镜像更新滞后,需推动基础镜像重建。

4.4 镜像清理策略:生命周期管理与存储水位控制

镜像清理是防止仓库存储无限膨胀、降低安全暴露面的关键手段。清理策略应基于 标签规则、时间窗口 与 引用计数 三个维度。

镜像清理策略决策树 镜像清理触发 标签规则匹配 保留 latest/stable 时间窗口过期 保留 90 天内活跃镜像 清理前需确认无运行容器引用

4.4.1 清理策略核心规则

  • 标签保留规则: 保护 latest、stable、release-* 等关键标签不被清理;未打标签的镜像(<none>:<none>)超过 7 天自动删除。
  • 时间窗口规则: 非活跃镜像(最近 90 天未被拉取)进入冷存储或删除;开发分支镜像保留 30 天。
  • 引用计数规则: 被 K8s Deployment/StatefulSet 引用的镜像禁止清理;清理前需扫描集群内所有运行 Pod 的镜像引用。
  • 安全隔离规则: 被标记为“高危漏洞”且无法修复的镜像,立即隔离并设置 7 天自动删除倒计时。
容量水位联动: 建议设置存储阈值告警(如仓库使用量达到配额的 80%),自动触发清理策略执行。清理后应生成报告,对比清理前后的存储节省量,用于容量规划与成本分摊。

4.5 四维策略综合巡检清单

维度 巡检项 健康标准 告警阈值
访问控制 匿名拉取是否关闭 关闭 开启 → 高危
访问控制 机器人令牌轮转周期 ≤ 90 天 超过 180 天 → 高危
签名验证 镜像签名覆盖率 ≥ 95% < 80% → 高危
签名验证 部署准入策略启用 已启用 未启用 → 高危
漏洞扫描 扫描覆盖率 100% < 90% → 中危
漏洞扫描 Critical 漏洞修复时长 ≤ 24 小时 超过 72 小时 → 高危
清理策略 过期镜像占比 ≤ 10% 超过 20% → 中危
清理策略 清理策略执行频率 每日 未配置 → 高危
容量水位安全红线: 当仓库存储使用量超过配额 85% 时,应暂停所有非紧急推送,优先执行清理策略。同时检查是否因签名验证失败或扫描阻塞导致镜像堆积,形成“安全死锁”——即镜像无法通过验证,也无法被清理(因为被 Deployment 引用)。此时需要人工介入,更新 Deployment 镜像引用或强制清理。