使用OCI v1.1.0规范管理和关联容器镜像及其衍生制品

从2024年04月起,新创建的ACR企业版实例将支持OCI的Image和Distribution规范v1.1.0,包括对Reference Types的支持。这意味着您除了可以存储和分发容器镜像外,还能管理和分发非容器镜像内容的OCI制品,如镜像签名和软件物料清单(SBOM)。这使您能够像管理容器镜像一样,管理和分发这些OCI制品。本文将介绍如何在容器镜像服务ACR中应用OCI v1.1.0新版本规范的相关功能。

前提条件

  • 已在本地安装ORAS客户端。具体操作,请参见安装ORAS

  • 已在本地安装Docker。具体操作,请参见安装Docker并使用(Linux)

  • 已配置专有网络或公网的访问控制,用于连接到企业版实例,本文以配置公网访问控制为例。具体操作,请参见配置公网的访问控制

  • 已获取登录企业版实例的密码。若您忘记或遗失密码,您可以通过配置访问凭证的方式重置密码。具体操作,请参见配置访问凭证

步骤一:使用Referrers API关联镜像的衍生制品

Referrers API是OCI v1.1.0新版本规范提出的能力,旨在将容器镜像与其衍生制品,例如物料清单(SBOM)、签名和漏洞扫描结果紧密关联。它能够帮助您有效追踪特定软件制品的来源,从而提升镜像的安全性与合规性管理和审查的效率。下面以容器镜像的物料清单(SBOM)生成与关联为例,展示 Referrers API的相关作用。

如果您在环境中无法执行docker sbom命令,需要先安装并配置sbom-cli-plugin组件。

安装配置sbom-cli-plugin组件

如果您在环境中无法执行docker sbom命令时,可以按照如下方式安装和配置sbom-cli-plugin组件

  1. 安装sbom-cli-plugin组件。

    wget "https://github.com/docker/sbom-cli-plugin/releases/download/v0.6.1/sbom-cli-plugin_0.6.1_linux_amd64.tar.gz"
  2. 创建组件目录。

    mkdir -p /root/.docker/cli-plugins
  3. 解压tar包到指定目录中。

    tar -zxvf sbom-cli-plugin_0.6.1_linux_amd64.tar.gz -C  /root/.docker/cli-plugins

以下示例将展示如何使用Referrers API来关联镜像<企业版实例名称>-registry.cn-hangzhou.cr.aliyuncs.com/library/golang:1.20的物料清单(SBOM)。

  1. 指明企业版实例域名,并输入您的用户名和登录密码。

    登录成功之后会显示Login Succeeded

    docker login <企业版实例名称>-registry.cn-hangzhou.cr.aliyuncs.com
    Username: ****@test.com
    Password:
    Login Succeeded
  2. 执行以下命令,生成目标镜像的物料清单(SBOM)数据。

    docker sbom <企业版实例名称>-registry.cn-hangzhou.cr.aliyuncs.com/library/golang:1.20 --format spdx-json -o sbom.jsom

    预期输出。

    13

  3. 执行以下命令,关联目标镜像物料清单(SBOM)数据。

     oras attach  --distribution-spec v1.1-referrers-api <企业版实例名称>-registry.cn-hangzhou.cr.aliyuncs.com/library/golang:1.20 sbom.jsom --artifact-type example/sbom

    预期输出。

    14

  4. 执行以下命令,查看目标镜像与物料清单(SBOM)关联关系。

    oras discover  --distribution-spec v1.1-referrers-api <企业版实例名称>-registry.cn-hangzhou.cr.aliyuncs.com/library/golang:1.20

    预期输出。

    15

步骤二:跨实例分发镜像及其关联的衍生制品

ACR企业版实例支持通过ORAS等工具跨实例分发镜像及其关联的衍生制品。我们以拷贝容器镜像及其软件物料(SBOM)为例来展示这一功能。

将已关联的物料清单(SBOM)中的 <企业版实例名称>-registry.cn-hangzhou.cr.aliyuncs.com/library/golang:1.20镜像分发到<企业版实例名称>-registry.cn-beijing.cr.aliyuncs.com仓库。您需要先登录目标实例镜像仓库。

  1. 指明企业版实例域名,并输入您的用户名和登录密码。

    登录成功之后会显示Login Succeeded

    docker login <企业版实例名称>-registry.cn-beijing.cr.aliyuncs.com
    Username: ****@test.com
    Password:
    Login Succeeded
  2. 执行以下命令,分发镜像及其关联的物料清单(SBOM)至目标实例镜像仓库。

    $ oras cp -r --from-distribution-spec v1.1-referrers-api --to-distribution-spec v1.1-referrers-api <企业版实例名称>-registry.cn-hangzhou.cr.aliyuncs.com/library/golang:1.20 <企业版实例名称>-registry.cn-beijing.cr.aliyuncs.com/library/golang:1.20

    预期输出。

    16

  3. 执行以下命令,目标镜像也有同样的物料清单(SBOM)。

    oras discover  --distribution-spec v1.1-referrers-api <企业版实例名称>-registry.cn-beijing.cr.aliyuncs.com/library/golang:1.20

    预期输出。

    17