我在我的项目上创建了一个自定义服务帐户travisci-deployer@PROJECT_ID.iam.gserviceaccount.com
,并赋予了它 Cloud Run Admin 角色:
gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
--member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
--role="roles/run.admin"
然后,我将此服务帐户设置为我的gcloud命令的身份:
gcloud auth activate-service-account --key-file=google-key.json
但是,当我运行gcloud beta run deploy
命令时,出现了一个错误消息,该错误涉及没有“ iam.serviceAccounts.actAs
”权限的“ Compute Engine默认服务帐户”:
gcloud beta run deploy -q "${SERVICE_NAME}" \
--image="${CONTAINER_IMAGE}" \
--allow-unauthenticated
Deploying container to Cloud Run service [$APP_NAME] in project [$PROJECT_ID] region [us-central1]
Deploying...
Deployment failed
ERROR: (gcloud.beta.run.deploy) PERMISSION_DENIED: Permission 'iam.serviceaccounts.actAs'
denied on service account 1075231960084-compute@developer.gserviceaccount.com
这对我来说似乎很奇怪(因为我没有使用GCE默认服务帐户标识,尽管在应用部署后Cloud Run应用程序会使用它)。
因此1075231960084-compute@developer.gserviceaccount.com
帐户用于API调用,而不是我在travisci-deployer@PROJECT_ID.iam.gserviceacount
上配置的gcloud
服务帐户吗?
我该如何解决?
答案 0 :(得分:6)
如果我们详细阅读了here的Cloud Run的IAM参考页面的文档,则会发现以下文本:
用户需要以下权限才能部署新的Cloud Run 服务或修订:
run.services.create
和run.services.update
在项目级别。 通常通过roles/run.admin
角色分配。可以改变 在项目权限管理页面中。iam.serviceAccounts.actAs
的 Cloud Run运行时服务帐户。默认情况下,这是PROJECT_NUMBER-compute@developer.gserviceaccount.com
。许可 通常是通过roles/iam.serviceAccountUser
角色分配的。
我认为这些额外的步骤可以在您看到的情况下解释故事。
答案 1 :(得分:3)
在我自己的服务帐户中添加 Cloud Run Admin 和服务帐户用户角色已为我解决了此问题。请参阅此处的文档中的步骤2: https://cloud.google.com/run/docs/continuous-deployment#continuous
答案 2 :(得分:0)
当前,在Beta中,所有Cloud Run服务都以默认计算帐户(与Google Compute Engine默认服务帐户相同)运行。
在将来的版本中将具有将服务作为其他服务帐户运行的功能。