etcd 镜像基础:官方来源、标签规范与签名验证

在复核镜像供应链策略误报之前,必须准确理解 etcd 官方镜像的发布体系。镜像来源、标签语义和签名验证机制是判断镜像是否“可信”的三大基石。策略引擎的误报往往源于对这三者的理解偏差或规则配置过于宽泛。

2.1 官方镜像来源与分发渠道

etcd 官方镜像由 etcd 社区维护团队 构建并推送至以下受信任的镜像仓库:

仓库地址 角色 适用场景
quay.io/coreos/etcd 主发布仓库(历史最久) 生产环境首选,签名验证完备
gcr.io/etcd-development/etcd Google Container Registry 镜像 GKE / GCP 用户,同步发布
registry.k8s.io/etcd Kubernetes 官方组件仓库 K8s 集群内置 etcd 镜像来源
docker.io/bitnami/etcd Bitnami 打包版本(非官方) 开发测试,需额外校验签名
策略复核要点: 误报常发生在将 docker.io/bitnami/etcd 等第三方镜像直接标记为“非官方”。策略应区分“官方维护”与“社区打包”,而非一刀切禁止所有非 quay.io/coreos/etcd 来源。

2.2 镜像标签规范与语义

etcd 镜像标签遵循 语义化版本 2.0,并附加了构建元数据。策略引擎必须理解标签的“可变性”与“不可变性”差异。

核心原则: 只有包含完整 MAJOR.MINOR.PATCH 的标签才是不可变标签;latest、v3.5 等浮动标签会随时间指向不同镜像摘要,不应作为供应链策略的固定信任锚点。
标签示例 语义 是否可变 策略建议
v3.5.12 完整版本号,固定发布 不可变 ✅ 推荐用于准入策略
v3.5 次要版本最新,指向 v3.5.x 最新 可变 ⚠️ 仅用于开发,需配合摘要锁定
latest 最近一次推送的稳定版本 可变 ❌ 禁止用于生产策略
v3.5.12-linux-amd64 带架构后缀的精确标签 不可变 ✅ 多架构环境首选
v3.5.12-rc1 预发布候选版本 不可变 ⚠️ 需单独审批策略
# 查看镜像标签对应的实际摘要(不可变标识)
docker pull quay.io/coreos/etcd:v3.5.12
docker inspect --format='{{index .RepoDigests 0}}' quay.io/coreos/etcd:v3.5.12
# 输出示例:quay.io/coreos/etcd@sha256:abc123def456...

2.3 镜像签名与验证机制

etcd 官方镜像使用 Sigstore Cosign 进行签名,签名数据存储在 OCI 仓库的附件中。策略引擎应验证签名而非仅检查标签。

etcd 镜像签名验证流程 拉取 etcd 镜像 docker pull quay.io/... Cosign 签名验证 cosign verify --key ❌ 签名不匹配 拒绝部署 ✅ 签名验证通过 允许部署 公钥来源 etcd 官方发布页 / KMS 🔍 策略误报常见场景 1. 策略只检查标签前缀(如 v3.5*),未验证签名 → 攻击者可推送恶意镜像使用相同标签 2. 策略要求所有镜像必须签名,但 etcd 的 rc/alpha 标签可能未签名 → 需配置例外规则 3. 公钥轮换后策略未更新 → 合法镜像被误判为签名无效

2.4 签名验证实操命令

策略复核人员应掌握以下验证命令,用于手动确认镜像是否被篡改:

# 1. 获取 etcd 官方公钥(从 etcd 发布页面获取)
curl -sL https://raw.githubusercontent.com/etcd-io/etcd/main/.cosign/cosign.pub > etcd-cosign.pub

# 2. 验证镜像签名
cosign verify \
  --key etcd-cosign.pub \
  quay.io/coreos/etcd:v3.5.12

# 3. 验证通过后输出包含以下信息:
# Verification for quay.io/coreos/etcd:v3.5.12 --
# The following checks were performed on each of these signatures:
#   - The cosign claims were validated
#   - The signatures were verified against the specified public key
⚠️ 策略配置陷阱: 部分策略引擎默认只检查 quay.io/coreos/etcd 仓库的签名,但 etcd 镜像也会从 registry.k8s.io/etcd 拉取。务必在策略中为所有官方仓库配置签名验证,或使用镜像摘要(digest)而非标签进行锁定。

2.5 镜像供应链策略基线建议

基于以上基础,构建 etcd 镜像供应链策略时应包含以下三层校验:

  1. 来源层: 只允许从 quay.io/coreos/etcd、gcr.io/etcd-development/etcd、registry.k8s.io/etcd 拉取 etcd 镜像。
  2. 标签层: 强制使用 vMAJOR.MINOR.PATCH 完整版本标签,禁止 latest 或 vMAJOR.MINOR 浮动标签。
  3. 签名层: 必须通过 Cosign 签名验证,且公钥来源固定为 etcd 官方发布页。
策略层级 检查项 误报风险 缓解措施
来源 镜像仓库地址白名单 遗漏 registry.k8s.io/etcd 维护完整的官方仓库列表
标签 标签格式正则匹配 rc/alpha 标签被拦截 为预发布标签设置独立策略
签名 Cosign 签名验证 公钥过期导致误拒 配置公钥自动轮换机制