【问题标题】:Do not have permission to access app while deploying google service account部署谷歌服务帐号时无权访问应用
【发布时间】:2017-01-28 09:37:26
【问题描述】:

在创建具有如下所示权限的 google 服务帐户后 - 部署失败并显示消息。我不明白这是哪里出了问题。

====

$ gcloud iam service-accounts get-iam-policy cdemail@appid.iam.gserviceaccount.com
bindings:
- members:
  - serviceAccount:cdemail@appid.iam.gserviceaccount.com
  role: roles/owner
etag: Bxxxxxxxxg=

====

$ gcloud auth activate-service-account --key-file ../a.json 
Activated service account credentials for: [cdemail@appid.iam.gserviceaccount.com]

$ gcloud app deploy
ERROR: (gcloud.app.deploy) You do not have permission to access app [appid].

【问题讨论】:

    标签: google-app-engine deployment service-accounts


    【解决方案1】:

    对于尝试使用服务帐户和gcloud 命令进行部署的用户,您需要设置以下所有角色:

    • App Engine Deployer(部署新代码)
    • Storage Object Viewer(列出图片)
    • Storage Object Creator(上传图片)
    • Cloud Build Editor(创建构建)
    • App Engine Service Admin(推广新版本)

    来自access control docs

    App Engine Deployer 角色单独授予足够的权限 使用 Admin API 进行部署。要使用其他 App Engine 工具,例如 gcloud 命令,您还必须具有 Storage Admin 角色和 Cloud 构建编辑角色。

    【讨论】:

    • 这对我来说是关键。尝试通过 Semaphore-CI 运行 gcloud 不起作用,服务帐户周围的错误无法访问。将权限添加到 GCP IAM 中的服务帐户修复了它。
    • 让我更进一步,但我现在卡在ERROR: (gcloud.app.deploy) Your deployment has succeeded, but promoting the new version to default failed. You may not have permissions to change traffic splits. Changing traffic splits requires the Owner, Editor, App Engine Admin, or App Engine Service Admin role. Please contact your project owner and use the gcloud app services set-traffic --splits <version>=1 command to redirect traffic to your newly deployed version. 将默认权限更改为App Engine Service Admin 修复了这个问题。仍然感到有点不安,因为我不知道我授予了什么..
    • 也需要App Engine Service Admin角色
    【解决方案2】:

    现在已经开始工作了。

    $ gcloud app deploy --log-http --verbosity=debug
    

    失败的原因似乎与启用 App Engine API 有关(链接显示在命令输出中)。启用 api - 然后尝试再次部署(这次没有 --log-http,因为这会导致 gcloud 崩溃)。

    您可以通过 Google Cloud Platform API 控制台页面启用“Google App Engine Admin API”。 https://console.cloud.google.com/apis/api/appengine.googleapis.com/

    【讨论】:

    • 谢谢,我花了一上午的时间试图解决这个问题,你的回答救了我。你是怎么知道的?我在任何地方都看不到它的记录?
    • 你也在用node.js柔性环境吗?是的,它没有记录在案 - 我认为这可能是因为工作正在进行中。
    • 有关启用API的链接,请参阅cloud.google.com/appengine/docs/admin-api/accessing-the-api
    • @JulianV.Modesto 感谢您的链接,知道为什么需要启用管理 API 才能使服务帐户正常工作吗?
    • 看起来现在需要编辑器 - 请参阅此问题 code.google.com/p/google-cloud-sdk/issues/detail?id=1050
    【解决方案3】:

    运行以下命令来检查项目是否与正确的帐户相关联。

    gcloud config list
    

    如果它没有与帐户关联,则使用

    gcloud auth login
    

    使用正确的项目帐户对其进行配置。

    【讨论】:

    • 添加服务帐号后部署命令不起作用。运行 gcloud auth login 并重新登录为我解决了问题
    【解决方案4】:

    如果您尝试部署节点应用程序,这可能仍然不够。我的 API 已启用,我关注了 GCP's instructions 上的所有内容,但我仍然收到 You do not have permission to access app 错误。最后通过向服务帐户添加另外两个角色来修复它:

    • 项目 > 浏览器
    • Cloud Build > Cloud Build 服务帐号

    【讨论】:

      【解决方案5】:

      添加到 npr 的答案。如果您尚未对默认应用/项目进行身份验证(启用 API 后),请在命令中运行此命令:

      gcloud auth application-default login
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-03
        • 1970-01-01
        • 2021-05-05
        • 2021-09-15
        • 2013-01-09
        • 2018-07-22
        • 1970-01-01
        • 2019-05-23
        相关资源
        最近更新 更多