使用服务帐户更新App Engine cron时授权失败

时间:2017-01-28 19:43:03

标签: google-app-engine google-cloud-platform

我一直在尝试编写App Engine Python应用程序并通过服务帐户进行管理(因为我正在使用我不相信Google帐户凭据的计算机进行开发)。

我已经成功获得了部署新代码版本的应用程序(提示:您不仅需要在IAM中为服务帐户提供App Engine"部署者"以及"服务管理员"权限控制台,也可能是"管理员" - 我最终给了这三个),但你还需要确保它对用于登台和部署的GCS存储桶具有写权限,名为myapp.appspot.comstaging.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

2 个答案:

答案 0 :(得分:5)

您要添加到服务帐户中以部署新的cron.yaml文件的特定角色是Cloud Scheduler Admin:

https://cloud.google.com/appengine/docs/standard/python/granting-project-access#deploying_using_iam_roles

答案 1 :(得分:1)

令人尴尬的是,这是用户错误,但其他人可能会遇到它,所以值得我写一下。

在GCP控制台的IAM界面中,您可以通过与下拉菜单进行交互来添加和删除帐户中的角色。因为此菜单包含许多类别的角色,所以它很长。您可能没有注意到菜单底部有一个“保存”按钮,如果您没有看到此消息,则在您通过单击菜单添加和删除角色时,您将看不到任何迹象项目,以及在菜单顶部的当前所选角色列表中添加和删除这些角色,实际上没有任何内容保存到后端。

添加项目"所有者"权限足以授予所需的cron-push权限 - 如果你保存它!