Cloud Build 无法部署到 Google App Engine - 您无权充当 @appspot.gserviceaccount.com

Law*_*lor 45 google-app-engine service-accounts google-cloud-platform google-cloud-build

今天早上我做了一个 PR,它为我的暂存环境触发了 Cloud Build,但未能将结果部署到 GAE。

错误如下:

错误:(gcloud.app.deploy) PERMISSION_DENIED:您无权充当“[redacted]@appspot.gserviceaccount.com”第 4 步:-“@type”:type.googleapis.com/google.rpc。 ResourceInfo 第 4 步:描述:您无权充当此服务帐户。第 4 步:resourceName:[redacted]@appspot.gserviceaccount.com 第 4 步:resourceType:serviceAccount

当我查看https://console.cloud.google.com/cloud-build/settings/service-account Cloud build 具有以下服务帐户权限ENABLED

  • 应用引擎管理员
  • 云端知识管理系统

检查https://console.cloud.google.com/iam-admin/iam 我可以看到 cloudbuild 服务帐户具有以下角色:

  • 应用引擎管理员
  • 应用引擎部署者
  • Cloud Build 服务帐号
  • Cloud KMS 加密密钥解密器

Neb*_*tic 41

根据提供的错误,您似乎需要向您的服务帐户添加一些委托。这意味着服务帐户可以代表另一个服务帐户执行操作。不要在项目级别添加此权限,因为它会带来安全风险!您可以在下面找到如何添加roles/iam.serviceAccountUser另一个服务帐户的示例。

PROJECT_ID=xxxxxx

PROJECT_NUMBER=$(gcloud projects list \
  --format="value(projectNumber)" \
  --filter="projectId=${PROJECT_ID}")

gcloud iam service-accounts add-iam-policy-binding \
    ${PROJECT_ID}@appspot.gserviceaccount.com \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/iam.serviceAccountUser \
    --project=${PROJECT_ID}
Run Code Online (Sandbox Code Playgroud)

总而言之,服务帐户必须具有iam.serviceAccounts.actAs权限,该权限包含在roles/iam.serviceAccountUser角色中。可以在此处找到更新的 Google 文档。

  • 从今天早上(2020-10-09)开始,我们的一些部署开始失败,这解决了它。在我们的例子中,我们使用:`gcloud --quiet --project "$GOOGLE_PROJECT_NAME" app deploy app.yaml`,并且部署之前已经工作了几个月。 (5认同)
  • 我已在 Google 问题跟踪器(请参阅 https://issuetracker.google.com/issues/170538212)上填写了有关此问题的问题,并且在响应中 Google 确认现在需要 serviceAccountUser 角色。他们还更新了文档:https://cloud.google.com/appengine/docs/flexible/nodejs/roles#recommended_role_for_application_deployment (5认同)

小智 19

我遇到过同样的问题。对我来说,我必须在 IAM 中将服务帐户用户角色添加到我的圈子 ci 用户。也许您可以为 cloudbuild 做同样的事情。

  • 仅仅为服务帐户授予“服务帐户用户”角色就太广泛了,基本上将项目的管理员权限授予了您的部署者/cloudbuild 服务帐户。应使用“gcloud iam service-accounts add-iam-policy-binding”将角色仅绑定到“[redacted]@appspot.gserviceaccount.com”SA。请参阅[来自 Nebulastic 的答案](/sf/answers/4496729681/)。 (5认同)
  • 完全同意@Mayeu,这样你的cloudbuild服务帐户就可以执行项目中的几乎任何操作,而不是最佳实践。范围只能是需要委派权限的服务帐户。 (2认同)

小智 18

首先我们进入权限管理器,选择我们要添加权限的项目;https://console.cloud.google.com/iam-admin/

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述


Shi*_*hou 10

Service Account User向我的 CI/CD 服务帐户授予权限。那个有效。

IAM 的屏幕截图 IAM 的屏幕截图

我的 Gitlab CI/CD 配置的屏幕截图 我的 Gitlab CI/CD 配置的屏幕截图

  • 这基本上是过度许可,因为服务帐户现在可以代表项目内的所有其他服务帐户进行操作。请参阅我的答案以获取解决方案。 (5认同)