GCP项目迁移至生产后Cloud Run构建IAM权限报错求助
问题根因
cloud-run-pubsub-invoker@<生产项目ID>.iam.gserviceaccount.com 是GCP官方托管的服务账号,仅当对应项目首次为Cloud Run服务配置Pub/Sub触发器时会自动创建,无法手动在IAM页面直接添加不存在的托管服务账号,因此会触发身份校验报错。
部署时报错的核心原因是Cloud Build服务账号没有权限模拟该invoker服务账号完成Cloud Run的绑定部署操作。
解决方案步骤
- 第一步:若生产项目尚未部署过任何Cloud Run服务,先部署一个官方hello world测试服务;之后给该服务手动创建一个测试用Pub/Sub触发器,触发系统自动生成目标invoker服务账号。操作完成后可按需删除测试触发器和测试服务,生成的托管服务账号会永久保留在项目中。
- 第二步:为Cloud Build服务账号授予该invoker服务账号的模拟权限,需在invoker服务账号的权限配置页操作,也可直接执行以下gcloud命令:
gcloud iam service-accounts add-iam-policy-binding cloud-run-pubsub-invoker@<替换为生产项目ID>.iam.gserviceaccount.com \ --member=serviceAccount:<替换为你的Cloud Build服务账号邮箱,即报错中的project-number@cloudbuild.gserviceaccount.com> \ --role=roles/iam.serviceAccountUser \ --project=<替换为生产项目ID>
- 第三步:重新触发Cloud Build部署流程,验证部署是否正常。
补充说明
你之前为Cloud Build账号配置的Cloud Run Admin等全局权限,不会自动覆盖单个服务账号的模拟权限,必须单独授予ServiceAccountUser角色才能获取报错中缺失的iam.serviceaccounts.actAs权限。
内容的提问来源于stack exchange,提问作者p_mo
相关产品推荐
相关产品推荐

