CloudScheduler 403 创建时权限被拒绝
Posted
技术标签:
【中文标题】CloudScheduler 403 创建时权限被拒绝【英文标题】:CloudScheduler 403 Permission denied while creating 【发布时间】:2022-01-19 09:30:19 【问题描述】:我正在尝试使用以下 API 资源管理器以编程方式在 CloudScheduler
Google Cloud Platform 中创建 Cron
作业。
参考:Cloud Scheduler Documentation
即使我已授予用户Owner
权限并在Policy Troubleshooter
中验证它具有cloudscheduler.jobs.create
,我仍然收到以下错误。
"error":
"code": 403,
"message": "The principal (user or service account) lacks IAM permission \"cloudscheduler.jobs.create\" for the resource \"projects/cloud-monitoring-saurav/locations/us-central\" (or the resource may not exist).",
"status": "PERMISSION_DENIED"
【问题讨论】:
如何尝试创作?直接来自 API Explorer?在你的代码中?使用 CURL? 我直接从 API Explorer 和代码中尝试过。我尝试了两个不同的项目,并且能够在其中一个项目中成功运行。 【参考方案1】:该错误是由于使用不具有包含权限cloudscheduler.jobs.create
的 IAM 角色的服务帐户引起的。一个示例角色是roles/cloudscheduler.admin
aka Cloud Scheduler Admin
。我感觉您将与 Cloud Scheduler 一起使用的服务帐户的权限(在运行时,当作业触发某些事情时)和当前创建作业的帐户(例如您的帐户)的权限混合在一起。
您实际上需要两个服务帐户才能创建作业。您需要自己设置一个(可以是您喜欢的任何名称,不需要任何特殊权限),还需要一个用于默认 Cloud Scheduler 本身(由 Google 管理)
使用现有的service account 用于从 Cloud Scheduler 调用您的 HTTP 目标,或者您可以为此创建一个新的服务帐户。服务帐号必须与创建 Cloud Scheduler 作业的项目属于同一项目。这是客户服务帐户。在指定服务帐户以生成 OAuth / OICD 令牌时使用此选项。 如果您的目标是 Google Cloud 的一部分,例如 Cloud Functions/Cloud Run,请通过授予必要的 IAM role(云函数的云函数调用程序和 Cloud Run 的 Cloud Run Invoker)来更新您的客户端服务帐户。接收服务会自动验证生成的令牌。如果您的目标在 Google Cloud 之外,则接收服务必须manually verify the token。
另一个服务帐户是默认的 Cloud Scheduler 服务帐户,它也必须存在于您的项目中,并且授予它 Cloud Scheduler 服务代理角色。这样它就可以代表您的客户服务帐户生成标头令牌以向您的目标进行身份验证。授予此角色的 Cloud Scheduler 服务帐户会在您启用 Cloud Scheduler API 时自动设置,除非您在 2019 年 3 月 19 日之前启用它,在这种情况下您必须add the role manually。
注意:不要从您的项目中删除 service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
服务帐户或其 Cloud Scheduler Service Agent role
。这样做会导致对需要身份验证的端点的 403 响应,即使您的作业的服务帐户具有适当的角色。
【讨论】:
我确认我确实拥有两个具有必要权限的服务帐户。我在另一个项目中做了完全相同的事情,并且能够毫无问题地做到这一点。 奇怪的是它在这个项目中不起作用,很高兴你能够在另一个项目中解决它做同样的事情。对于这种差异,我没有答案,但是如果您认为我的回答对您/社区有任何帮助,请单击我的答案左侧的投票按钮。谢谢,祝您有美好的一天!以上是关于CloudScheduler 403 创建时权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
403 forbidden啥意思,怎么修复解决403 forbidden
JAVA编程403、404、503错误,都可能是由啥原因产生的?