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