Spring boot 为什么CloudBuild使用默认服务帐户而不是CloudBuild服务帐户

Spring boot 为什么CloudBuild使用默认服务帐户而不是CloudBuild服务帐户,spring-boot,google-cloud-platform,Spring Boot,Google Cloud Platform,当我将代码推送到分支并通过云构建GCP触发它时。错误如下: 错误:(gcloud.app.deploy)权限\u被拒绝:您没有作为ProjectName@appspot.gserviceaccount.com" “@type”:type.googleapis.com/google.rpc.ResourceInfo 描述:您没有充当此服务帐户的权限。 资源名称:ProjectName@appspot.gserviceaccount.com 资源类型:serviceAccount 它应该使用服务

当我将代码推送到分支并通过云构建GCP触发它时。错误如下:

错误:(gcloud.app.deploy)权限\u被拒绝:您没有作为ProjectName@appspot.gserviceaccount.com"

  • “@type”:type.googleapis.com/google.rpc.ResourceInfo 描述:您没有充当此服务帐户的权限。 资源名称:ProjectName@appspot.gserviceaccount.com 资源类型:serviceAccount
它应该使用服务帐户: 15428174@cloudbuild.gserviceaccount.com

下面是我的CloudBuild.yaml文件:

步骤:

  • 名称:“gcr.io/cloud builders/mvn” 参数:['package','-Dmaven.test.skip=true','-Pdev']

  • 名称:“gcr.io/cloud builders/gcloud” 参数:['app','deploy','--appyaml=./src/main/appengine/dev/app.yaml'] 超时:“1600秒”


    • 这是一个安全项目。App Engine实例已分配一个服务帐户。您正在使用云构建将应用程序部署到应用程序引擎。此错误表示将代码推送到App Engine的帐户未被授予“使用”App Engine服务帐户的权限

      其目的是通过将应用程序部署到具有更高/不同权限的服务帐户的服务,防止您提升权限


      解决方案是将应用引擎服务帐户的ActAs权限授予云构建服务帐户。

      我没有使用默认服务帐户。我正在使用不同的服务帐户,该帐户具有以下角色:应用程序引擎管理员应用程序引擎创建者云构建编辑器云SQL编辑器编辑器源存储库编写器存储管理员我没有云构建服务帐户的任何更新。以前它工作得很好,但不知道为什么会这样fail@parmendrak74-错误消息解释了原因。我的回答解释了原因。研究IAM如何与
      角色/IAM.serviceAccountUser
      角色相关。如何解决此问题。我可以手动部署appengine,但CICD会出现问题。因为对于CICD,我使用的是非默认服务帐户。哪个帐户需要ActAs权限,您在
      ServiceAccountUser
      角色上阅读了哪些文档?这就是您的解决方案-将该角色添加到服务帐户。要解决问题,你需要投资学习基础知识。在您的案例中,IAM如何工作以及如何将角色应用于服务帐户。您可以通过GUI(谷歌云控制台)、命令行
      gcloud
      或SDK/API来实现这一点。