首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部署到云运行,自定义服务帐户失败,iam.serviceaccounts.actAs错误

部署到云运行,自定义服务帐户失败,iam.serviceaccounts.actAs错误
EN

Stack Overflow用户
提问于 2019-04-22 03:12:40
回答 5查看 15.1K关注 0票数 32

我已经在我的项目上创建了一个自定义服务帐户travisci-deployer@PROJECT_ID.iam.gserviceaccount.com,并赋予它云运行管理角色:

代码语言:javascript
复制
gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
   --member="serviceAccount:${SERVICE_ACCOUNT_EMAIL}" \
   --role="roles/run.admin"

然后,我将这个服务帐户设置为gcloud命令的标识:

代码语言:javascript
复制
gcloud auth activate-service-account --key-file=google-key.json

但是,当我运行gcloud beta run deploy命令时,我得到了一个关于"Compute默认服务帐户“没有iam.serviceAccounts.actAs权限的错误:

代码语言:javascript
复制
gcloud beta run deploy -q "${SERVICE_NAME}" \
  --image="${CONTAINER_IMAGE}" \
  --allow-unauthenticated
代码语言:javascript
复制
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默认的服务帐户标识,尽管一旦应用程序被部署,云运行应用程序就会使用它)。

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

我该怎么解决这个问题?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-04-22 03:48:06

TLDR:将云运行管理、和服务帐户用户角色添加到您的服务帐户中。

如果我们详细阅读了Cloud的IAM参考页面的文档(这是这里 ),我们会发现以下文本:

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

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

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

票数 45
EN

Stack Overflow用户

发布于 2019-08-28 09:37:37

云运行管理、服务帐户用户角色添加到我自己的服务帐户中,为我修复了这个问题。参见这里的文档中的步骤2:https://cloud.google.com/run/docs/continuous-deployment#continuous

票数 14
EN

Stack Overflow用户

发布于 2022-09-22 07:40:30

对于最佳实践,您应该只允许云运行实例的特定权限。

参考资料:https://cloud.google.com/run/docs/reference/iam/roles#additional-configuration

假设您在GCP中有两个服务帐户。

其中之一是Clound identity service account/runtime service account

让它作为identity-cloudrun@project-id.iam.gserviceaccount.com,并且这个服务帐户不需要为它分配任何权限,因为它只是云运行的标识。如果您需要这个云运行实例访问其他GCP资源,您可以为这个服务帐户添加一些权限。

另一个是用于部署云运行的Deployment Service account

让它成为deploy-cloudrun@project-id.iam.gserviceaccount.com

对于Deployment Service account,您需要将特定于your-cloudrun-instanceCloud Run Admin permissions授予它。因此,它不能访问其他云运行实例。

代码语言:javascript
复制
gcloud run services add-iam-policy-binding your-cloudrun-instance \
--member="serviceAccount:deploy-cloudrun@project-id.iam.gserviceaccount.com" \
--role="roles/run.admin" \
--region=europe-west1

另外,您需要将iam.serviceAccounts.actAsidentity service account权限授予您的deployment service account。文档中提到了这一点。

代码语言:javascript
复制
gcloud iam service-accounts add-iam-policy-binding \
identity-cloudrun@project-id.iam.gserviceaccount.com \
--member="serviceAccount:deploy-cloudrun@project-id.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"

因此,您可以通过deployment service account部署云,如下所示。

注意:在实践中,您应该使用deployment service account 工作负载标识联邦 ,而不是直接使用工作负载标识联邦

代码语言:javascript
复制
gcloud run deploy your-cloudrun-instance \
--image="us-docker.pkg.dev/cloudrun/container/hello" \
--service-account="identity-cloudrun@project-id.iam.gserviceaccount.com"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55788714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档