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

Tim*_*rks 4 google-app-engine google-cloud-platform

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

我已经成功获取了用于部署新代码版本的应用程序(提示:您不仅需要在IAM控制台中为服务帐户App Engine的“ Deployer”和“ Service Admin”权限授予权限,而且还可能具有“ Admin”权限-我最终给出了所有这三个),但您还需要确保它具有用于登台和部署的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').
Run Code Online (Sandbox Code Playgroud)

如果gcloud app deploy使用--verbosity=debug,则可以看到它https://appengine.google.com/api/cron/update?app_id=myapp正在向403 发出请求并取回它。

我尝试授予服务帐户项目编辑者或所有者权限,但这没有用。(尽管如果有必要,我会认为这是一个错误。)

*:我的项目ID的所有实例都已替换myapp为该问题。

小智 9

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

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


Tim*_*rks 0

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

在 GCP Console 上的 IAM 用户界面中,您可以通过与下拉菜单交互来添加和删除账户中的角色。由于这个菜单包含很多类别的角色,所以很长。您可能没有注意到菜单底部有一个“保存”按钮,如果您没有看到此按钮,则在您通过单击菜单项添加和删除角色并看到这些角色会从菜单顶部当前选定的角色列表中添加和删除,实际上没有任何内容保存到后端。

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