在附件中存储工件元数据

本页面介绍了如何将与存储在 Artifact Registry 中的制品相关的元数据存储为附件

存储在附件中的元数据可以包括有关制品漏洞、build 出处、软件包内容、认证、漏洞评估、软件物料清单 (SBOM) 等的信息。政策系统可以使用存储在 Artifact Registry 附件中的信息,用户也可以检查这些信息,以确保合规性。

如需详细了解如何使用附件,请参阅通过附件管理元数据

准备工作

  1. 如果您还没有代码库,请创建一个标准模式的代码库
  2. (可选)为 Google Cloud CLI 命令配置默认值

所需的角色

如需获得创建附件所需的权限,请让您的管理员为您授予制品的 Artifact Registry Writer (roles/artifactregistry.writer) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建连接

对于 Docker 代码库,附件必须是 OCI 制品。对于除 Docker 之外的所有格式,附件可以是任何文件类型。

您可以使用 gcloud CLI 或 Oras 在 Docker 格式的代码库中创建附件。

如需创建附件,请完成以下步骤:

gcloud(所有格式)

在使用下面的命令数据之前,请先进行以下替换:

  • ATTACHMENT:附件的完全限定名称,例如 projects/my-project/locations/us-west1/repositories/my-repo/attachments/my-attachment。 或者,仅提供附件 ID,并使用 --location--repository 标志。
  • TARGET:完全限定的版本名称。 对于 Docker 映像,您还可以使用附件所指工件的 Artifact Registry URI。在 URI 中,您可以使用摘要,也可以使用标记(对于 Docker 映像而言),例如 us-west1-docker.pkg.dev/my-project/my-repo/my-image:tag1
  • TYPE:附件的 type 属性。对于 Docker 映像,type 必须符合 OCI 关于 artifactType 属性的规范
  • ATTACHMENT_NAMESPACE:附件特有的变量,用于标识附件数据源,例如 example.com
  • FILES:要包含在附件中的本地文件的英文逗号分隔列表。
    • 执行以下命令:

      Linux、macOS 或 Cloud Shell

      gcloud artifacts attachments create ATTACHMENT \
          --target=TARGET \
          --attachment-type=TYPE \
          --attachment-namespace=ATTACHMENT_NAMESPACE \
          --files=FILES

      Windows (PowerShell)

      gcloud artifacts attachments create ATTACHMENT `
          --target=TARGET `
          --attachment-type=TYPE `
          --attachment-namespace=ATTACHMENT_NAMESPACE `
          --files=FILES

      Windows (cmd.exe)

      gcloud artifacts attachments create ATTACHMENT ^
          --target=TARGET ^
          --attachment-type=TYPE ^
          --attachment-namespace=ATTACHMENT_NAMESPACE ^
          --files=FILES
      如需了解详情,请参阅 gcloud artifacts attachments create 命令。

Oras(仅限 Docker)

使用 Oras 创建附件时,Artifact Registry 会生成一个随机 UUID 用作附件名称。

在使用 Oras 之前,请完成以下步骤:

  1. 安装 Oras 1.2 或更高版本。如需验证版本,请运行 oras version 命令。

  2. 配置 Oras 以通过 Artifact Registry 进行身份验证

在运行命令之前,请先进行以下替换:

  • ARTIFACT_TYPE:附件的 artifactType

  • IMAGE_URI:附件所指的图片容器的 URI。

  • FILE:要作为附件中的元数据包含在内的本地文件。

  • MEDIA_TYPE:层的 mediaType

  oras attach --artifact-type ARTIFACT_TYPE IMAGE_URI FILE:MEDIA_TYPE

以下示例创建了一个附件,其中包含一个文件 (hello-world.txt),该文件引用了一个容器映像 (my-image),该容器映像由其 URI 和标记标识:

  oras attach --artifact-type doc/example \
  us-west1-docker.pkg.dev/my-project/my-repo/my-image:tag1 \
  hello-world.txt:application/vnd.me.hi

其中:

  • doc/example 用于定义附件的 artifactType 属性。

  • us-west1-docker.pkg.dev/my-project/my-repo/my-image:tag1 是 URI,包含附件将引用的容器映像版本标记。

  • hello-world.txt 是附件将作为其数据保存的本地文件。

  • application/vnd.me.hi 定义图层的 mediaType

如需查看完整指南和更多示例,请参阅 oras attach 文档

通过清理政策管理附件

当附加的制品被删除时,Docker 代码库附件(包括 build 出处)也会被删除。如果您使用清理政策从代码库中删除映像,默认情况下,这些映像上的附件也会被删除。

为确保您要保留的附件不会因清理政策而被意外删除,您可以为包含要保留的附件的图片分配标记。然后,您可以配置清理政策,以保留带有这些标记的映像。例如,您可以为附有 build 出处的图片分配 production-signed 标记。

后续步骤