当 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
主题,请执行以下操作:
控制台
转到 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 访问权限控制 来配置项目和资源的权限。访问权限控制会保留 确保您的存储库安全无虞,并允许您使用基于角色的用户权限来管理 访问权限。
您可以在以下位置配置 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"
}
该消息使用 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 访问权限控制角色。