google-app-engine - 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:
- App 引擎管理员
- 云KMS
检查https://console.cloud.google.com/iam-admin/iam 我可以看到 cloudbuild 服务帐户具有以下角色:
- App 引擎管理员
- App Engine 部署程序
- Cloud Build 服务帐号
- Cloud KMS CryptoKey 解密器
解决方案
根据提供的错误,您似乎需要向您的服务帐户添加一些委托。这意味着服务帐户可以代表另一个服务帐户行事。不要在项目级别添加此权限,因为它会带来安全风险!您可以在下面找到如何添加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 文档。
推荐阅读
- python-3.x - 按国家/地区聚合值以 csv 文件形式返回输出
- android - Looper MessageQueue 在一段时间后停止处理
- javascript - HTML5 audio menu isnt opening in my simple webpage
- c# - 我的游戏在结束屏幕上有一个“重启游戏”按钮,它调用 StartGame() 方法。如何避免递归和最终的堆栈溢出?
- python - Python 请求:如何同时设置可选参数和非可选参数?
- java - 如何在excel中逐行打印传递的字符串
- python - 按组从 Pandas Dataframe 中删除 NaN
- visual-studio-extensions - 是否可以从 Azure DevOps 包管理发布和使用 VS 扩展?
- ruby - 如何比较关于元素顺序的两个多维哈希
- elasticsearch - 获取过去的警报执行数据