为什么完整性和真实性很重要
容器映像和其他 OCI 项目(如 SBOM、Helm 图表、配置捆绑包或 AI 模型)是现代云原生应用程序的关键组件。 这些制品流经软件供应链,从创建到部署:由发布者生成,存储在仓库中,并在 CI/CD 管道或生产环境中用于。
如果没有安全措施,攻击者可以:
- 在存储或传输时更改工件。
- 将受信任的图像或图表交换为恶意图像。
- 将未经验证的基础映像或依赖项插入到生成中。
完整性 可确保所使用的项目与发布的项目完全相同。
真实性 可确保项目真正来自预期的发布者。
它们共同对保护供应链和防止攻击至关重要。
签名和验证的作用是什么?
为了确保完整性和真实性,可以在生成后对 OCI 项目(包括容器映像)进行签名 ,并在使用前验证这些签名。
- 签名 生成加密签名,用于将发布者的标识绑定到包含摘要的项目描述符。
- 验证 检查签名是否有效、发布者标识受信任且项目尚未更改。
如果验证失败,消费者可以阻止工件被拉取、用于构建或部署。
公证项目与符号系统
公证项目 是一个开源项目,它为 OCI 项目提供签名和验证,包括容器映像、SBOM、Helm 图表、AI 模型等。
Notation 是 Notary项目用于对OCI工件进行签名和验证的工具。 Notation与多个密钥供应商集成,包括:
- Azure Key Vault (AKV): 用户管理自己的证书生命周期,包括颁发、轮换和过期。 这为希望维护证书直接管理的组织提供强大的控制和灵活性。
组织可以选择 AKV 进行完全控制。
签名和验证的场景
1.映像发布者在 CI/CD 管道(如 GitHub Actions)中对映像进行签名
容器映像发布者生成映像并将其签名为其 GitHub Actions 工作流的一部分,然后再将其推送到 Azure 容器注册表。
- 确保下游使用者可以验证映像源。
- 在构建时将信任元数据添加到供应链中。
2. 映像使用者在 AKS 上的部署期间进行验证
将工作负荷部署到 Azure Kubernetes 服务(AKS)时,群集策略可以强制仅允许已签名和已验证的映像运行。
- 防止未经授权的或篡改的映像被部署。
- 确保运行时工作负荷源自受信任的发布者。
3. 映像使用者验证 CI/CD 管道中的基本映像
在生成应用程序映像之前,开发人员可以配置管道(例如 GitHub Actions),以验证基本映像的签名。
- 防止构建中继承漏洞或恶意代码。
- 强制在应用程序生成中仅使用受信任的上游组件。
4. 验证其他 OCI 工件
除了容器映像之外,相同的过程也适用于存储在 OCI 注册表中的其他项目:
- SBOM:在使用镜像之前,验证已签名的 SBOM 以便进行安全分析。
- Helm 图表:在将其安装到 Kubernetes 群集之前验证图表。
- 配置捆绑包或 AI 模型:在集成到系统中之前,请验证它们是否源自预期发布者。
后续步骤
本概述介绍了对容器映像和其他 OCI 项目进行签名和验证的重要性。 以下每个方案都有自己的专用指南:
使用 AKV 进行签名
使用 Notation CLI 进行签名:
登录 GitHub 工作流:
验证
GitHub 工作流中的验证:
AKS 上的验证: