当 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
主题,请执行以下操作:
控制台
前往 Google Cloud 控制台中的 Pub/Sub 主题页面。
点击创建主题。
输入主题 ID
gcr
。点击创建主题。
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 主题都应具有一个订阅。
订阅者应用会接收来自代码库主题的消息。订阅者将执行事件通知、系统日志记录和应用间通信等任务。
如需创建订阅,请执行以下操作:
控制台
前往 Google Cloud 控制台中的 Pub/Sub 主题页面。
点击项目的主题。
点击创建订阅。
输入订阅名称:
projects/[PROJECT-ID]/subscriptions/[SUBSCRIPTION-NAME]
将“传送类型”的设置保留为“拉取”。
点击创建。
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"
}
该消息使用 digest
或 tag
键标识相关映像。
从 Container Registry 中删除标记时,通知载荷可能如下所示:
{
"action":"DELETE",
"tag":"gcr.io/my-project/hello-world:1.1"
}
该消息可能包含 DELETE
或 INSERT
作为 action
键值。
后续步骤
- 阅读 Pub/Sub 文档。
- 如需深入了解 Pub/Sub,请参阅什么是 Pub/Sub?
- 详细了解 Pub/Sub 访问权限控制角色。