从 Docker 内容信任转换到 Notary 项目

Azure 容器注册表将于 2028 年 3 月 31 日停用 Docker 内容信任。 为了帮助进行这种转换,我们提供了有关如何禁用 Docker 内容信任并采用公证项目进行签名和验证容器映像的指导。

Docker 内容信任弃用

Docker 内容信任允许映像发布者对其映像和映像使用者进行签名,以验证请求的映像是否已签名。 随着技术的进步,Docker 内容信任不再满足容器现代供应链安全性的要求。 因此,从 2025 年 3 月 31 日起,Docker 内容信任将弃用,并在 2028 年 3 月 31 日从 Azure 容器注册表 (ACR) 中完全删除。

Microsoft 基于 Notary 项目提供签名和验证解决方案,而不是使用 Docker 内容信任。 Notary Project 是一组规范和工具,旨在使用真实的容器映像和其他 OCI 项目为保护软件供应链提供跨行业标准。 Notation (来自 Notary Project 的工具)实现 Notary Project 规范,并包括用于签名和验证容器映像和项目的 CLI 和库。 使用 Notary Project 解决方案来确保容器映像的完整性和真实性的好处包括:

  • 可移植性和互作性:Notary Project 签名遵循开放容器计划 (OCI) 标准,并且可以存储在符合 OCI 的注册表(如 ACR)中,从而促进不同云环境中的签名可移植性和互作性。
  • 安全密钥管理:使用 Azure 密钥保管库 (AKV) 安全地管理签名密钥和证书。 即将推出更多密钥管理系统 (KMS) 选项。
  • CI/CD 管道集成:实现 CI/CD 管道(包括 Azure DevOps (ADO) 和 GitHub 工作流的登录)。 即将推出更多 CI/CD 集成选项。
  • 综合验证:验证 CI/CD 管道(例如 ADO 和 GitHub 工作流),以及 Azure Kubernetes 服务 (AKS) 中的容器映像,以防止使用和部署不受信任的映像。

禁用 Docker 内容信任

在转换到 Notation Project 解决方案之前,必须禁用 Docker 内容信任。 使用以下任一方法禁用 Docker 内容信任:

  • 通过将 DOCKER_CONTENT_TRUST 环境变量设置为 0 来禁用 shell 中的 Docker 内容信任。 例如,在 Bash shell 中,请执行以下代码:

    export DOCKER_CONTENT_TRUST=0
    

    或者,可以取消设置环境变量:

    unset DOCKER_CONTENT_TRUST
    
  • 从 Azure 门户禁用 Docker 内容信任。 在 Azure 门户中导航到注册表。 在“策略”下,选择“内容信任”,然后选择“禁用”,并选择“保存”

  • 使用 Azure CLI 禁用 Docker 内容信任:

    az acr config content-trust update -r myregistry --status disabled
    

使用 Notary Project 对容器映像进行签名和验证

禁用 Docker 内容信任后,可以使用 Notary Project 对容器映像进行签名和验证。 使用以下参考资料开始。

对容器映像签名:

验证容器映像: