配置 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 的 Pub/Sub 主题。

如果 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 访问权限控制为项目和资源配置权限。访问控制可保护您的代码库的安全,并可让您使用基于角色的访问权限来管理用户权限。

您可以在 Google Cloud 控制台的 IAM 页面中或通过 IAM API 来配置 Pub/Sub 访问权限控制。

  • 如需配置发布权限,可使用以下任何角色: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 键值。

后续步骤