18

I have created a custom service account travisci-deployer@PROJECT_ID.iam.gserviceaccount.com on my project and gave it the Cloud Run Admin role:

gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
   --member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
   --role="roles/run.admin"

Then I set this service account as the identity for my gcloud commands:

gcloud auth activate-service-account --key-file=google-key.json

But when I ran gcloud beta run deploy command, I got an error about the "Compute Engine default service account" not having iam.serviceAccounts.actAs permission:

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

This seems weird to me (because I'm not using the GCE default service account identity, although it's used by Cloud Run app once the app is deployed).

So the 1075231960084-compute@developer.gserviceaccount.com account is being used for the API call, and not my travisci-deployer@PROJECT_ID.iam.gserviceacount service account configured on gcloud?

How can I address this?

4

5 回答 5

25

TLDR:将Cloud Run 管理员服务帐户用户角色添加到您的服务帐户

如果我们详细阅读此处找到的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角色分配。

我认为这些额外的步骤可以解释你所看到的故事。

于 2019-04-22T03:48:06.537 回答
9

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

于 2019-08-28T09:37:37.520 回答
0

尽管您可以通过授予帐户权限以充当 Compute Engine 默认服务帐户来解决此特定错误,但这违反了“最佳实践”建议

默认情况下,Cloud Run 服务作为默认的 Compute Engine 服务帐号运行。但是,Google 建议使用具有最少权限的用户管理服务帐户。在 Cloud Run 服务标识文档中了解如何使用用户管理的服务帐号部署 Cloud Run 服务。

您可以指示 Cloud Run 部署将采用哪个服务帐号身份,如下所示:

gcloud run deploy -q "${SERVICE_NAME}" \
  --image="${CONTAINER_IMAGE}" \
  --allow-unauthenticated \
  --service-account "${SERVICE_ACCOUNT_EMAIL}"
于 2021-11-15T19:24:43.093 回答
0

您需要将“服务帐户用户”角色添加到您的服务帐户

在此处输入图像描述

于 2022-01-21T10:28:35.117 回答
-3

目前,在测试版中,所有 Cloud Run 服务都作为默认计算帐户运行(与 Google Compute Engine 默认服务帐户相同)。

在未来的版本中将提供作为不同服务帐户运行服务的功能。

于 2019-04-22T03:47:01.137 回答