你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
容器映像和其他开放容器计划 (OCI) 项目是新式云原生应用程序的关键组件。 这些项目可能包括软件物料清单 (SBOM)、Helm 图表、配置捆绑包和 AI 模型。 它们从创建到部署都流经软件供应链。 它们由发布者构建,存储在注册表中,并在持续集成和持续交付(CI/CD)管道或生产环境中使用。
如果没有安全措施,攻击者可以:
- 在存储或传输时更改工件。
- 将受信任的图像或图表交换为恶意内容。
- 将未经验证的基础映像或依赖项插入到生成中。
添加安全措施有助于确保:
- 完整性:你使用的项目与发布的项目完全相同。
- 真实性:项目确实来自预期的发布者。
一起,完整性和真实性对于保护供应链和防止攻击至关重要。
签名和验证
这些过程有助于提供完整性和真实性:
- 签名:生成将发布者标识绑定到项目描述符(包括摘要)的加密签名。 构建容器镜像等 OCI 工件后可以签名。
- 验证:检查签名是否有效,发布者的身份是受信任的,并且工件未被更改。 在使用制品之前,可以验证签名。
如果验证失败,使用者可阻止项目被拉取、在生成中使用或被部署。
公证项目与符号系统
公证项目 是一个开源项目,它为 OCI 项目提供签名和验证。
Notation 是 Notary项目用于对OCI工件进行签名和验证的工具。 Notation与多个密钥供应商集成,包括:
- Azure Key Vault:用户管理自己的证书生命周期,包括颁发、轮换和过期。 此选项为希望维护证书直接管理的组织提供强大的控制和灵活性。
- 受信任的签名:自动提供零接触证书管理并颁发短生存期证书。 这些功能可简化签名体验,同时保持强大的安全保证。
组织可以选择 Key Vault 进行完全控制,或采用受信任的签名来简化体验。
签名和验证的场景
映像发布者在 CI/CD 管道(如 GitHub Actions)中对映像进行签名
容器映像发布者生成映像并将其签名为 GitHub Actions 工作流的一部分,然后再将其推送到 Azure 容器注册表。 此过程:
- 帮助确保下游使用者可以验证映像源。
- 在构建时将信任元数据添加到供应链中。
映像使用者会在 AKS 部署过程中验证映像
当组织将工作负荷部署到 Azure Kubernetes 服务(AKS)时,群集策略可以强制仅允许已签名和已验证的映像运行。 此过程:
- 帮助阻止未经授权或被篡改的映像的部署。
- 帮助确保运行时工作负荷源自受信任的发布者。
映像使用者验证 CI/CD 管道中的基本映像
在开发人员生成应用程序映像之前,他们可以配置管道(例如 GitHub Actions),以验证基本映像的签名。 此过程:
- 帮助保护软件版本,防止继承漏洞或恶意代码。
- 强制仅在应用程序生成中使用受信任的上游组件。
使用者验证其他 OCI 工件
除了容器映像之外,使用者还可以验证存储在 OCI 注册表中的这些项目:
- SBOM:在使用镜像之前,验证已签名的 SBOM 以便进行安全分析。
- Helm 图表:在 Kubernetes 群集中安装图表之前验证图表。
- 配置捆绑包或 AI 模型:在将这些捆绑包或模型集成到系统中之前,请验证这些捆绑包或模型是否源自预期发布者。
相关内容
本概述介绍了签名和验证容器映像和其他 OCI 项目的重要性。 以下每个方案都有自己的专用指南。
使用 Key Vault 签名
通过 Notation 命令行接口进行签名 (CLI):
在 GitHub 工作流中登录
使用可信签名进行签名
通过 Notation CLI 签名:
在 GitHub 工作流中登录
验证
GitHub 工作流中的验证:
- 在 GitHub 工作流中使用 Notation 和 Azure Key Vault 来验证容器镜像
- 使用 Notation 和 Trusted Signing(预览版)验证 GitHub 工作流中的容器镜像
AKS 上的验证: