无法为GCP Pub/Sub创建推送订阅以触发Cloud Build
解决GCP恢复项目中Pub/Sub推送订阅创建失败问题
排查与修复步骤
- 检查Cloud Build服务账号权限
你有项目所有者权限,但Pub/Sub推送订阅依赖Cloud Build的专用服务账号(service-<PROJECT_NUMBER>@gcp-sa-cloudbuild.iam.gserviceaccount.com)。确认该账号已被授予roles/pubsub.subscriber角色,同时确保Pub/Sub服务有权调用这个账号。 - 修正推送端点格式
不要直接复制生产环境的完整端点,低环境的rpc://端点需要匹配当前项目信息,正确格式应为:rpc://<LOW_ENV_PROJECT_NAME>:CloudBuildPushEndpoint:gslb:google.pubsub.v1.cloudbuildpushendpoint,替换<LOW_ENV_PROJECT_NAME>为你的低环境项目名称。 - 确认服务启用状态
恢复标记删除的项目后,部分服务可能默认未启用。进入GCP控制台的服务库,检查Pub/Sub和Cloud Build服务是否处于已启用状态,若未启用则先启用。 - 核对IAM政策
对比生产环境和低环境的Pub/Sub主题IAM设置:- 确保主题允许Cloud Build服务账号发布消息(如果触发器需要从主题接收消息)
- 恢复后的项目可能存在IAM缓存延迟,等待5-10分钟后再尝试创建订阅,避免权限同步不及时的问题。
- 使用gcloud命令行创建
控制台UI可能存在隐藏问题,用命令行创建能获取更详细的报错信息,执行以下命令:
替换命令中的占位符为低环境项目的实际值,根据返回的报错信息定位具体问题。gcloud pubsub subscriptions create <SUBSCRIPTION_NAME> \ --topic=<TOPIC_NAME> \ --push-endpoint=rpc://<LOW_ENV_PROJECT_NAME>:CloudBuildPushEndpoint:gslb:google.pubsub.v1.cloudbuildpushendpoint \ --push-auth-service-account=service-<PROJECT_NUMBER>@gcp-sa-cloudbuild.iam.gserviceaccount.com - 验证Cloud Build触发器配置
确认低环境的Cloud Build触发器已正确创建,且绑定的主题与你要创建订阅的主题一致,避免旧的残留配置干扰订阅创建。
内容的提问来源于stack exchange,提问作者Saurabh Arora
相关产品推荐
相关产品推荐

