首页 > 解决方案 > Cloud Build 无法部署到 Google App Engine - 您无权充当 @appspot.gserviceaccount.com

问题描述

今天早上,我做了一个 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 服务帐户具有以下角色:

标签: google-app-enginegoogle-cloud-platformservice-accountsgoogle-cloud-build

解决方案


根据提供的错误,您似乎需要向您的服务帐户添加一些委托。这意味着服务帐户可以代表另一个服务帐户行事。不要在项目级别添加此权限,因为它会带来安全风险!您可以在下面找到如何添加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}

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


推荐阅读