构建云运行容器时IAM权限问题



我目前正试图将开发项目复制到生产项目中。所有的代码和文件都已经转移了,但是Cloud Run功能还没有构建。

我将提供更多关于这两个项目架构的信息,如果它可能会有所帮助。在开发项目中,我们有一个阶段分支。推送到该分支的任何更改都会触发Cloud Build触发器,该触发器对传入的更改进行完整性检查并部署更新的代码。然后,我们可以将这些更改合并到主分支并进行推送,这会触发额外的Cloud Build触发器,将代码从开发项目复制到生产项目中。

错误是:

ERROR: (gcloud.run.deploy) User [project-number@cloudbuild.gserviceaccount.com] does not have permission to access namespaces instance [Project ID] (or it may not exist): Permission 'iam.serviceaccounts.actAs' denied on service account cloud-run-pubsub-invoker@project-id.iam.gserviceaccount.com (or it may not exist).

project-number@cloudbuild.gserviceaccount.com具有以下权限:App Engine Admin、BigQuery Job User、Cloud Build Service Account、Cloud Functions Admin、Cloud Functions Developer、Cloud Scheduler Admin、Editor Service Account、Token Creator Service Account用户、Pub/Sub Editor、Cloud Run Admin、Secret Manager Secret Accessor、Storage Object Admin

我找到了另一个同样问题的链接。接受的解决方案是添加以下服务帐户和角色

Email: service-<account-id>@serverless-robot-prod.iam.gserviceaccount.com
Role: Google Cloud Run Service Agent

到IAM帐户。我试了一下,得到了这个消息:No change: member already exists on the policy.错误可能在其他地方。

我还注意到在开发项目中有帐户邮箱cloud-run-pubsub-invoker@project-id.iam.gserviceaccount.com,而在生产项目中没有。我认为这可能是问题的根源,但当我尝试通过IAM页面添加此帐户(将项目id更改为新项目id)时,错误状态:Email addresses and domains must be associated with an active Google Account, Google Workspace account, or Cloud Identity account.

我不知道如何解决这个问题,任何帮助都是感激的。谢谢你!

您正在从开发项目部署到生产项目。因此开发项目的云构建服务账号需要有部署到生产项目的权限。

所以,你需要

  • 授权开发项目的Cloud Build服务账号在Cloud Run中创建/更新服务和修订
gcloud projects add-iam-policy-binding --member=serviceAccount:dev-project-number@cloudbuild.gserviceaccount.com --role=roles/run.admin prod-project-id
  • 授予开发项目的Cloud Build服务帐户以模拟生产Cloud Run服务服务帐户(默认为计算服务帐户)
gcloud iam service-accounts add-iam-policy-binding --member=serviceAccount:dev-project-number@cloudbuild.gserviceaccount.com --role=roles/iam.serviceAccountUser prod-cloud-run-service-account --project=prod-project-id

让我知道你是否足够。

最新更新