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

Ahm*_*gle 4 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"
Run Code Online (Sandbox Code Playgroud)

然后,将此服务帐户设置为我的gcloud命令的身份:

gcloud auth activate-service-account --key-file=google-key.json
Run Code Online (Sandbox Code Playgroud)

但是,当我运行gcloud beta run deploy命令时,出现有关“ Compute Engine默认服务帐户”没有iam.serviceAccounts.actAs权限的错误:

gcloud beta run deploy -q "${SERVICE_NAME}" \
  --image="${CONTAINER_IMAGE}" \
  --allow-unauthenticated
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很奇怪(因为我没有使用GCE默认服务帐户标识,尽管在应用部署后Cloud Run应用会使用它)。

因此,该1075231960084-compute@developer.gserviceaccount.com帐户用于API调用,而不是travisci-deployer@PROJECT_ID.iam.gserviceacount在上配置我的服务帐户gcloud

我该如何解决?

tob*_*obi 8

Cloud Run AdminService Account User角色添加到我自己的服务帐户为我解决了这个问题。请参阅此处文档中的第 2 步:https : //cloud.google.com/run/docs/continuous-deployment#continuous


Kol*_*ban 7

如果我们详细阅读了有关Cloud Run的IAM参考页面的文档(位于此处),则会找到以下文本:

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

  • run.services.createrun.services.update该项目的级别。通常通过roles/run.admin角色分配。可以在项目权限管理页面中进行更改。
  • iam.serviceAccounts.actAsCloud Run运行时服务帐户。默认情况下是 PROJECT_NUMBER-compute@developer.gserviceaccount.com。该权限通常是通过roles/iam.serviceAccountUser角色分配的。

我认为这些额外的步骤可以按照您的说明解释故事。

  • 仅供参考:仅拥有“Cloud Run Admin”角色不足以进行部署,您还需要拥有“Cloud Run Service Agent”角色。 (7认同)
  • 特别是,如果没有检查 `roles/iam.serviceAccountUser`,则具有 `run.*` 权限的用户可以执行运行该服务的服务帐户可以执行的任何操作(通过持有代码执行)对他们而言,可能包括使用已知登录凭据启动计算 VM)。要求对 Service 的服务帐户 `actAs` 的权限通过明确所需的权限来堵住这个漏洞。 (2认同)