我一直在尝试编写App Engine Python应用程序并通过服务帐户进行管理(因为我正在使用我不相信Google帐户凭据的计算机进行开发)。
我已经成功获得了部署新代码版本的应用程序(提示:您不仅需要在IAM中为服务帐户提供App Engine"部署者"以及"服务管理员"权限控制台,也可能是"管理员" - 我最终给了这三个),但你还需要确保它对用于登台和部署的GCS存储桶具有写权限,名为myapp.appspot.com
和staging.myapp.appspot.com
*),但我无法部署新的cron.yaml
。当我尝试:
$ gcloud app deploy cron.yaml
You are about to update the following configurations:
- myapp/cron (from [.../myapp/cron.yaml])
Do you want to continue (Y/n)?
Updating config [cron]...failed.
ERROR: (gcloud.app.deploy) Server responded with code [403]:
Forbidden Unexpected HTTP status 403.
You do not have permission to modify this app (app_id=u'p~myapp').
如果我使用gcloud app deploy
运行--verbosity=debug
,我可以看到它向https://appengine.google.com/api/cron/update?app_id=myapp
发出请求并返回403。
我尝试过提供服务帐户项目编辑或所有者权限,但这并没有奏效。 (虽然如果有必要,我认为这是一个错误。)
*:在此问题中,我的项目ID的所有实例都已替换为myapp
。
答案 0 :(得分:5)
您要添加到服务帐户中以部署新的cron.yaml
文件的特定角色是Cloud Scheduler Admin:
答案 1 :(得分:1)
令人尴尬的是,这是用户错误,但其他人可能会遇到它,所以值得我写一下。
在GCP控制台的IAM界面中,您可以通过与下拉菜单进行交互来添加和删除帐户中的角色。因为此菜单包含许多类别的角色,所以它很长。您可能没有注意到菜单底部有一个“保存”按钮,如果您没有看到此消息,则在您通过单击菜单添加和删除角色时,您将看不到任何迹象项目,以及在菜单顶部的当前所选角色列表中添加和删除这些角色,实际上没有任何内容保存到后端。
添加项目"所有者"权限足以授予所需的cron-push权限 - 如果你保存它!