服务帐户需要什么权限才能使用 gcloud 部署到 Google App Engine?
What permission is required for a service account to deploy to Google App Engine using gcloud?
我创建了一个服务帐户,以便将项目部署到 google 应用引擎。
我创建的服务账户有这两个角色:
- App Engine -> App Engine 部署程序
- 存储 -> 存储对象管理
我下载了 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"
}
]
]
我错过了什么角色?
如果我将角色 App Engine -> App Engine Deployer
替换为 App Engine -> App Engine Admin
,它会起作用。
不知道为什么 Deployer
不足以部署应用程序。
我自己仍在解析所有关于此的各种文档,但我偶然发现了 this list of predefined GAE roles,其中包含他们所拥有的权限的定义。 "Deployer" 似乎有点用词不当……他们也许应该称它为 "NewDeployer" 或类似的名称。希望这可以帮助!
编辑 - 这里还有 App Engine-specific list of roles。
干杯!
手指
您不需要为存储授予管理员角色。
您只需要为服务帐户授予以下角色:
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) 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.
截至 2020 年 1 月,documentation for App Engine Roles 状态:
Note: The App Engine Deployer (roles/appengine.deployer) role alone grants adequate permission to deploy using the App Engine Admin API. To use other App Engine tooling, like gcloud commands, you must also have the Compute Storage Admin (roles/compute.storageAdmin) and Cloud Build Editor (cloudbuild.builds.editor) roles.
然而,这并不完全正确:
cloudbuild.builds.editor
不够(我怀疑这里的文档有误)。实际上,CLI 显然需要 cloudbuild.builds.builder
. 提供的 storage.objects.list
权限
- 部署后,您会收到错误消息,因为您无权更改流量拆分。因此,您需要
roles/appengine.serviceAdmin
.
所以,这是适合我的角色列表:
roles/appengine.deployer
roles/appengine.serviceAdmin
roles/compute.storageAdmin
roles/cloudbuild.builds.builder
这些角色对我有用。我正在使用 gcloud
从 AppVeyor 进行部署。
- App Engine 部署者
- App Engine 服务管理员
- 云构建服务帐户
- 服务帐户用户
参考:https://github.com/google-github-actions/setup-gcloud/issues/191#issuecomment-706039046
我创建了一个服务帐户,以便将项目部署到 google 应用引擎。
我创建的服务账户有这两个角色:
- App Engine -> App Engine 部署程序
- 存储 -> 存储对象管理
我下载了 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"
}
]
]
我错过了什么角色?
如果我将角色 App Engine -> App Engine Deployer
替换为 App Engine -> App Engine Admin
,它会起作用。
不知道为什么 Deployer
不足以部署应用程序。
我自己仍在解析所有关于此的各种文档,但我偶然发现了 this list of predefined GAE roles,其中包含他们所拥有的权限的定义。 "Deployer" 似乎有点用词不当……他们也许应该称它为 "NewDeployer" 或类似的名称。希望这可以帮助!
编辑 - 这里还有 App Engine-specific list of roles。
干杯! 手指
您不需要为存储授予管理员角色。
您只需要为服务帐户授予以下角色:
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) 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.
截至 2020 年 1 月,documentation for App Engine Roles 状态:
Note: The App Engine Deployer (roles/appengine.deployer) role alone grants adequate permission to deploy using the App Engine Admin API. To use other App Engine tooling, like gcloud commands, you must also have the Compute Storage Admin (roles/compute.storageAdmin) and Cloud Build Editor (cloudbuild.builds.editor) roles.
然而,这并不完全正确:
cloudbuild.builds.editor
不够(我怀疑这里的文档有误)。实际上,CLI 显然需要cloudbuild.builds.builder
. 提供的 - 部署后,您会收到错误消息,因为您无权更改流量拆分。因此,您需要
roles/appengine.serviceAdmin
.
storage.objects.list
权限
所以,这是适合我的角色列表:
roles/appengine.deployer
roles/appengine.serviceAdmin
roles/compute.storageAdmin
roles/cloudbuild.builds.builder
这些角色对我有用。我正在使用 gcloud
从 AppVeyor 进行部署。
- App Engine 部署者
- App Engine 服务管理员
- 云构建服务帐户
- 服务帐户用户
参考:https://github.com/google-github-actions/setup-gcloud/issues/191#issuecomment-706039046