【问题标题】:What permission is required for a service account to deploy to Google App Engine using gcloud?服务帐户需要什么权限才能使用 gcloud 部署到 Google App Engine?
【发布时间】:2017-05-11 02:54:51
【问题描述】:

我创建了一个服务帐户,以便将项目部署到谷歌应用引擎。

我创建的服务帐号有这两个角色:

  1. App Engine -> App Engine 部署者
  2. 存储 -> 存储对象管理

我下载了 json 密钥文件,然后运行这些命令:

gcloud auth activate-service-account --key-file key.json
gcloud -q app deploy app_deploy.yaml --version 1.0 --promote

我收到此错误消息:

ERROR: (gcloud.app.deploy) Error Response: [403] Operation not allowed

Details: [
  [
    {
      "@type": "type.googleapis.com/google.rpc.ResourceInfo",
      "description": "The \"appengine.applications.get\" permission is required.",
      "resourceType": "gae.api"
    }
  ]
]

我错过了添加什么角色?

【问题讨论】:

    标签: google-app-engine gcloud


    【解决方案1】:

    截至 2020 年 1 月,documentation for App Engine Roles 声明:

    注意:App Engine 部署者 (roles/appengine.deployer) 角色单独授予使用 App Engine Admin API 进行部署的足够权限。要使用其他 App Engine 工具,例如 gcloud 命令,您还必须具有计算存储管理员 (roles/compute.storageAdmin) 和 Cloud Build Editor (cloudbuild.builds.editor) 角色。

    然而,这并不完全正确:

    1. cloudbuild.builds.editor 不够(我怀疑这里的文档有错误)。实际上,CLI 显然需要cloudbuild.builds.builder 提供的storage.objects.list 权限。
    2. 部署后,您会收到错误消息,因为您无权更改流量拆分。因此,您需要roles/appengine.serviceAdmin

    所以,这是对我有用的角色列表:

    • roles/appengine.deployer
    • roles/appengine.serviceAdmin
    • roles/compute.storageAdmin
    • roles/cloudbuild.builds.builder

    【讨论】:

    • 这行得通,但我必须使用 Cloud Build Service Account 而不是 Cloud Build Builds Builder。此外,存储管理员角色只需添加到暂存桶中,不需要为整个项目添加。
    【解决方案2】:

    这些角色对我有用。我正在使用 gcloud 从 AppVeyor 进行部署。

    • App Engine 部署者
    • App Engine 服务管理员
    • Cloud Build 服务帐号
    • 服务帐号用户

    参考:https://github.com/google-github-actions/setup-gcloud/issues/191#issuecomment-706039046

    【讨论】:

      【解决方案3】:

      如果我将角色 App Engine -> App Engine Deployer 替换为 App Engine -> App Engine Admin,它会起作用。

      不知道为什么Deployer 不足以部署应用。

      【讨论】:

      • 也可能是相关的:cloud.google.com/solutions/…
      • 我没有任何运气App Engine Admin 甚至,Project Owner 工作但什么都少,什么都没有。
      • 迄今为止,以下组合对我有用:App Engine DeployerApp Engine Service AdminCloud Build Service Account。希望这会有所帮助!
      • 我认为你应该把它变成一个答案:-)
      • Christophe Deliens 是对的,他提到的许可是最小的特权。如果您使用应用引擎管理员,则只有在使用时才能部署, gcloud -q app deploy app.yaml --no-promote (带有 no-promote 标志)。但是,如果您需要升级为默认服务或任何其他服务,则需要该权限。
      【解决方案4】:

      我自己仍在解析所有关于此的各种文档,但我偶然发现了this list of predefined GAE roles,并附上了他们所拥有权限的定义。 “Deployer”似乎有点用词不当......他们可能应该称它为“NewDeployer”或类似的东西。希望这可以帮助!

      编辑 - 这里也是 App Engine-specific list of roles

      干杯! 手指

      【讨论】:

        【解决方案5】:

        您无需为存储授予管理员角色。

        您应该只需要为服务帐户授予以下角色:

        • App Engine Deployer
        • Storage Object Creator 仅用于存储桶 staging.<project-id>.appspot.com
        • Storage Object Viewer 仅用于存储桶 staging.<project-id>.appspot.com

        您可能会遇到一些错误,因为服务帐户无权将流量更改为新版本(您刚刚部署)。 但部署成功,您可以从控制台迁移到新版本。

        以下是来自我的案例的消息。

        [INFO] GCLOUD: ERROR: (gcloud.app.deploy) 您的部署有 成功,但将新版本升级为默认版本失败。您可以 无权更改流量拆分。改变流量分割 需要所有者、编辑者、App Engine 管理员或 App Engine 服务 管理员角色。请联系您的项目所有者并使用gcloud app services set-traffic --splits <version>=1 命令重定向流量 到您新部署的版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-27
          • 2017-04-16
          • 2021-06-03
          • 1970-01-01
          • 1970-01-01
          • 2012-09-02
          • 2017-03-05
          • 2018-07-31
          相关资源
          最近更新 更多