使用自定义服务帐户部署到Cloud Run失败,并出现iam.serviceaccounts.actAs错误

时间:2019-04-22 03:12:40

标签: google-cloud-run

我在我的项目上创建了一个自定义服务帐户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服务帐户吗?

我该如何解决?

3 个答案:

答案 0 :(得分:6)

如果我们详细阅读了here的Cloud Run的IAM参考页面的文档,则会发现以下文本:

  

用户需要以下权限才能部署新的Cloud Run   服务或修订:

     
      
  • run.services.createrun.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默认服务帐户相同)运行。

在将来的版本中将具有将服务作为其他服务帐户运行的功能。