配置 Pub/Sub 通知

当 Container Registry 代码库发生推送、标记或删除映像等更改时,您可以使用 Pub/Sub 接收通知。

Pub/Sub 会将代码库相关的消息发布到名为“主题”的指定资源上。订阅了 Pub/Sub 主题的应用会收到这些消息。当代码库的状态发生更改时,订阅者应用就会发送通知。

此外,您可以配置 Pub/Sub 主题的角色和权限,以控制用户与代码库的交互方式。

为了支持从 Container Registry 到 Artifact Registry 的转换,Artifact Registry 将消息发布到与 Container Registry 相同的主题。

有关如何为以下项目配置 Artifact Analysis 通知的信息 (例如新的漏洞扫描结果),请参阅 Artifact Analysis 文档

创建 Pub/Sub 主题

当您在 Google Cloud 项目中激活 Container Registry API 时, Container Registry 会自动创建一个 主题 ID 为 gcr 的主题。

如果“gcr”主题被意外删除或缺失,您可以添加该主题 。例如,如果您的 Google Cloud 服务 组织存在组织政策限制条件,要求 使用客户管理的加密密钥 (CMEK) 进行加密。当 Pub/Sub API 在该限制条件的拒绝列表中, 服务无法自动创建使用 Google 管理的加密密钥的主题。

如需使用 Google 管理的加密密钥创建 gcr 主题,请执行以下操作:

控制台

  1. 转到 Google Cloud 控制台中的 Pub/Sub 主题页面。

    转到 Pub/Sub 主题页面

  2. 点击创建主题

  3. 输入主题 ID gcr

  4. 点击创建主题

gcloud

运行以下命令:

gcloud pubsub topics create gcr --project=PROJECT-ID

PROJECT-ID 替换为您的 Google Cloud 项目 ID。如果您省略 --project 标志,命令会使用当前项目。

如需详细了解 gcloud pubsub topics 命令,请参阅 topics 文档

如需创建使用 CMEK 加密的 gcr 主题,请参阅 Pub/Sub 加密主题的说明

创建“gcr”主题或确认其存在后,您可以 创建对该主题的订阅

创建 Pub/Sub 订阅

每个 Pub/Sub 主题都应具有一个订阅。

订阅者应用会接收来自代码库主题的消息。订阅者将执行事件通知、系统日志记录和应用间通信等任务。

订阅可配置为使用推送模型拉取模型

如需创建订阅,请执行以下操作:

控制台

  1. 转到 Google Cloud 控制台中的 Pub/Sub 主题页面。

    转到 Pub/Sub 主题页面

  2. 点击项目的主题。

  3. 点击创建订阅

  4. 输入订阅名称:

    projects/[PROJECT-ID]/subscriptions/[SUBSCRIPTION-NAME]
    

    将“传送类型”的设置保留为“拉取”。

  5. 点击创建

gcloud

在推送或标记 Docker 映像的系统中,运行以下命令:

gcloud pubsub subscriptions create [SUBSCRIPTION-NAME] --topic=gcr

如需详细了解 gcloud pubsub subscriptions 命令,请参阅 subscriptions 文档

配置 Pub/Sub 权限

使用 Pub/Sub 访问权限控制 来配置项目和资源的权限。访问权限控制会保留 确保您的存储库安全无虞,并允许您使用基于角色的用户权限来管理 访问权限。

您可以在以下位置配置 Pub/Sub 访问权限控制: Google Cloud 控制台的 IAM 页面 或通过 IAM API 创建。

  • 要配置发布权限,请使用 以下角色:owner、editor、pubsub.admin、pubsub.editor、pubsub.publisher。 从注册表中推送映像或删除映像的主账号必须具有 pubsub.topics.publish 权限,用于发布消息 Pub/Sub。

  • 如需配置订阅权限,请使用以下任一方式 角色:owner、editor、pubsub.admin、pubsub.editor、pubsub.subscriber。

通知示例

通知以 JSON 格式的字符串形式发送。以下是从 Pub/Sub 接收的 Container Registry 通知的预期内容示例。

将映像推送到 Container Registry 时,通知载荷可能如下所示:

{
  "action":"INSERT",
  "digest":"gcr.io/my-project/hello-world@sha256:6ec128e26cd5..."
}

将新标记推送到 Container Registry 时,通知载荷可能如下所示:

{
  "action":"INSERT",
  "digest":"gcr.io/my-project/hello-world@sha256:6ec128e26cd5...",
  "tag":"gcr.io/my-project/hello-world:1.1"
}

该消息使用 digesttag 键标识相关映像。

从 Container Registry 中删除标记时,通知载荷可能如下所示:

{
  "action":"DELETE",
  "tag":"gcr.io/my-project/hello-world:1.1"
}

该消息可能包含 DELETEINSERT 作为 action 键值。

后续步骤