HashiCorp发布Packer v1.16.0,新增原生支持:为该工具构建的每个镜像生成、签名和验证SLSA来源证明。该版本为团队提供安全、防篡改的机器镜像构建记录,且无需引入额外的供应链工具,填补了此前SLSA类证明机制基本未曾覆盖的基础设施领域空白。
该版本解决的问题十分明确:机器镜像支撑着其上运行的所有工作负载,如果镜像被篡改或无法验证,从该镜像创建出的所有实例都会在不知情的情况下受到影响。在本次发布之前,定位镜像来源只能翻查过时的构建日志,Packer无法说明是哪个提交、哪条流水线或哪个身份创建了某个特定构件。
本次主要新增功能是一个来源证明后置处理器,生成带有SLSA Provenance v1断言的in-toto声明,该格式与厂商无关,可兼容当前各类软件供应链安全工具。证明凭证会记录Git提交记录、代码仓库、引用分支、触发构建的CI流水线以及构建时间戳。本地构建会绑定其SHA-256摘要;没有本地文件的云构建则关联一条包含构建器ID和构建ID的标准身份记录。Packer提供四种签名模式:可输出未签名JSON供内部使用;支持本地PEM密钥,适用于隔离环境;集中式密钥管理场景可使用云KMS或Vault;Sigstore Fulcio支持在CI流水线中实现无密钥签名,并可将凭证上传至Rekor实现可审计透明化。
Packer可将其输出直接映射到SLSA的构建级别。构建L1只需来源证明后置处理器,签名可选;在CI平台上运行Packer并采用无密钥签名即可达到L2,此时CI作业的OIDC身份即作为签名者;L3模式会将证明生成与构建作业完全分离,使用基于slsa-framework/slsa-github-generator的签名作业,但HashiCorp指出,仅凭该工作流并不能确保完全符合L3,合规性还取决于平台加固和构建隔离控制。
所有新功能均为可选,现有Packer模板无需任何更改即可在v1.16.0版本中构建。该版本还包含一些较小的HCL2改进,新增continue_on_error元参数,支持在对象类型变量的单属性默认值中使用optional(),并新增rfc3339_parse()和unix_timestamp_parse()两个时间戳处理函数。