4. 制品供应链基础:制品类型、供应链安全与元数据管理

在构建自动化部署台账之前,必须理解供应链中流动的核心资产——制品(Artifact)。制品是软件从构建到部署的物理载体,其类型、安全等级和元数据质量直接决定了误差预算的可靠性与可审计性。本章将系统梳理制品类型、SLSA 安全框架以及元数据管理策略,为后续 Terraform 驱动的台账自动化奠定基础。

4.1 制品类型:容器镜像、二进制包与库

现代软件供应链中,制品通常分为三大类,每类在生命周期、存储方式和部署行为上存在显著差异:

制品类型 典型格式 存储仓库 部署方式 版本管理
容器镜像 OCI Image (Docker/containerd) Harbor, ECR, GCR, Docker Hub 容器运行时拉取并启动 标签 + 摘要 (digest)
二进制包 JAR, WAR, DEB, RPM, EXE Nexus, Artifactory, S3 直接下载、安装或解压 语义化版本 (SemVer)
库 / 模块 npm, PyPI, Maven, Go Module npm registry, PyPI, Maven Central 包管理器依赖解析 SemVer + lock file
台账设计提示: 在 Terraform 台账中,每种制品类型应使用独立的 resource 或 data source 进行建模。例如,容器镜像使用 docker_registry_image,二进制包使用 aws_s3_object,库依赖使用 terraform_data 记录 lock 文件哈希。

4.2 供应链安全:SLSA 框架

SLSA(Supply-chain Levels for Software Artifacts) 是由 Google 主导的开源安全框架,旨在为制品供应链提供可量化的安全等级。SLSA 定义了从 L0 到 L4 共五个等级,等级越高,供应链被篡改或注入恶意代码的风险越低。

SLSA 核心原则: 构建过程可验证、依赖关系可追溯、制品来源不可抵赖。

下表总结了 SLSA 各等级的关键要求及其对误差预算台账的影响:

SLSA 等级 核心要求 台账自动化关注点
L0 无任何保障 台账仅记录制品存在,不验证来源
L1 构建过程可脚本化、可重复 台账记录构建脚本哈希、构建环境
L2 使用版本控制 + 托管构建服务 台账关联 Git commit、CI 运行 ID
L3 构建隔离 + 无外部影响 台账记录构建时网络策略、依赖锁定
L4 可审计 + 防篡改 + 双人评审 台账集成签名验证、策略即代码

以下 SVG 展示了 SLSA 等级与制品供应链安全控制点的对应关系:

SLSA 等级与供应链安全控制点 SLSA 等级与供应链安全控制点 SLSA L0 SLSA L1 SLSA L2 SLSA L3 SLSA L4 构建可重复 版本控制关联 托管构建服务 构建隔离 防篡改审计 仅记录制品存在 记录构建脚本哈希 关联 Git + CI ID 记录网络策略 + 依赖锁 签名验证 + 策略即代码 台账自动化收益 • 等级越高,台账 审计粒度越细 • L3 以上可自动 阻断不合规制品 • L4 台账可作为 合规证据链 • 误差预算与 SLSA 等级正相关

4.3 元数据管理:台账自动化的数据基石

元数据是描述制品属性、来源和状态的结构化数据。在 Terraform 驱动的误差预算台账中,元数据是自动化决策的依据。缺少元数据或元数据质量低劣,将直接导致预算计算偏差和审计失败。

4.3.1 核心元数据字段

一个完整的制品元数据记录应包含以下维度:

  • 标识元数据: 制品名称、版本号、摘要(SHA256)、构建时间戳。
  • 来源元数据: Git 仓库 URL、Commit SHA、CI 流水线 ID、构建者身份。
  • 安全元数据: SLSA 等级、签名指纹、漏洞扫描结果(CVE 列表)、SBOM(软件物料清单)引用。
  • 部署元数据: 目标环境、部署策略(蓝绿/金丝雀)、回滚版本、误差预算消耗。
常见陷阱: 仅记录版本号而不记录摘要(digest)会导致标签可变性风险。例如,容器镜像的 latest 标签在不同时间点可能指向不同内容。台账必须强制使用不可变标识符(如 SHA256 digest)作为主键。

4.3.2 元数据与 Terraform 台账的映射

以下 SVG 展示了制品元数据如何映射到 Terraform 资源与状态文件:

制品元数据与 Terraform 台账映射 制品元数据与 Terraform 台账映射 制品元数据 • 名称 / 版本 / 摘要 • Git Commit / CI ID • SLSA 等级 / 签名 • SBOM / CVE 列表 • 部署环境 / 策略 • 误差预算消耗 Terraform 资源 • terraform_data • docker_registry_image • aws_s3_object • kubernetes_manifest • vault_kv_secret_v2 • terraform_remote_state Terraform 状态 • state 文件 (JSON) • 属性快照 • 敏感数据加密 • 版本历史 • 依赖图 • 输出变量 元数据通过 Terraform 资源属性写入状态文件,台账自动化从状态文件中提取误差预算相关字段

4.4 元数据采集策略:从构建到台账

为了实现自动化台账,元数据必须在制品生命周期的每个阶段被主动采集并注入。推荐采用以下策略:

  1. 构建阶段注入: 在 CI 流水线中,使用 docker build --label 或 mvn deploy -Dmetadata 将 Git 信息、构建 ID 写入制品。
  2. 仓库阶段索引: 制品仓库(如 Harbor、Nexus)通过 Webhook 或 API 将元数据同步到台账数据库。
  3. 部署阶段验证: Terraform 在 apply 前,通过 data source 读取制品元数据,与台账中的误差预算策略进行比对。
  4. 审计阶段归档: 每次部署完成后,Terraform 将当前制品的完整元数据快照写入不可变存储(如 S3 + Object Lock)。
代码示例: 使用 Terraform 的 terraform_data 记录制品元数据快照
resource "terraform_data" "artifact_metadata" {
  input = {
    name         = "my-service"
    version      = "1.2.3"
    digest       = "sha256:a1b2c3d4e5f6..."
    git_commit   = "abc123def456"
    ci_run_id    = "123456"
    slsa_level   = "L3"
    sbom_ref     = "https://sbom.example.com/my-service-1.2.3.spdx.json"
    deploy_env   = "production"
    budget_used  = 0.05
  }
}

output "artifact_metadata_json" {
  value = jsonencode(terraform_data.artifact_metadata.input)
}

4.5 本章小结