我创建了一个服务帐户,以便将项目部署到Google应用引擎。
我创建的服务帐户有以下两个角色:
我下载了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"
}
]
]
我错过了什么角色?
答案 0 :(得分:8)
截至2020年1月,documentation for App Engine Roles声明:
注意:App Engine Deployer(roles / appengine.deployer)角色单独授予使用App Engine Admin API进行部署的足够权限。要使用其他App Engine工具(如gcloud命令),您还必须具有Compute Storage Admin(roles / compute.storageAdmin)和Cloud Build Editor(cloudbuild.builds.editor)角色。
但是,这并不完全正确:
Python 3.6.5
还不够(我怀疑此处的文档有误)。实际上,CLI显然需要cloudbuild.builds.builder
提供的cloudbuild.builds.editor
权限。storage.objects.list
。因此,这是为我工作的角色列表:
roles/appengine.serviceAdmin
roles/appengine.deployer
roles/appengine.serviceAdmin
roles/compute.storageAdmin
答案 1 :(得分:5)
如果我将App Engine -> App Engine Deployer
替换为App Engine -> App Engine Admin
,则此功能正常。
不知道为什么Deployer
不足以进行应用部署。
答案 2 :(得分:1)
我自己仍在解析所有关于此问题的各种文档,但我偶然发现了this list of predefined GAE roles,并完成了对权限的定义。 “Deployer”似乎有点用词不当......他们可能应该把它称为“NewDeployer”或类似的东西。希望这可以帮助!
编辑 - 这里也是App Engine-specific list of roles。
干杯! 英格
答案 3 :(得分:0)
您不需要授予存储的管理员角色。
您只需要为服务帐户授予以下角色:
App Engine Deployer
Storage Object Creator
仅适用于存储区staging.<project-id>.appspot.com
Storage Object Viewer
仅适用于存储区staging.<project-id>.appspot.com
您可能会遇到一些错误,因为服务帐户无权将流量更改为新版本(您刚刚部署)。 但是部署成功,您可以从控制台迁移到新版本。
以下是我的案件中的消息。
[INFO] GCLOUD:错误:(gcloud.app.deploy)您的部署具有 成功,但是将新版本提升为默认版本失败。你可以 没有更改流量拆分的权限。改变流量分配 需要拥有者,编辑者,App Engine管理员或App Engine服务 管理员角色。请与您的项目所有者联系,并使用
gcloud app services set-traffic --splits <version>=1
命令重定向流量 到新部署的版本。
答案 4 :(得分:0)
这些角色对我有用。我正在使用 gcloud
从 AppVeyor 进行部署。
参考:https://github.com/google-github-actions/setup-gcloud/issues/191#issuecomment-706039046