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 等级与制品供应链安全控制点的对应关系:
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 资源与状态文件:
4.4 元数据采集策略:从构建到台账
为了实现自动化台账,元数据必须在制品生命周期的每个阶段被主动采集并注入。推荐采用以下策略:
- 构建阶段注入: 在 CI 流水线中,使用
docker build --label或mvn deploy -Dmetadata将 Git 信息、构建 ID 写入制品。 - 仓库阶段索引: 制品仓库(如 Harbor、Nexus)通过 Webhook 或 API 将元数据同步到台账数据库。
- 部署阶段验证: Terraform 在
apply前,通过data source读取制品元数据,与台账中的误差预算策略进行比对。 - 审计阶段归档: 每次部署完成后,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)
}