CloudScheduler 403 创建时权限被拒绝

CloudScheduler 403 Permission denied while creating

我正在尝试使用以下 API 资源管理器在 CloudScheduler Google 云平台中以编程方式创建一个 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"
  }
}

该错误是由于使用的服务帐户没有包含权限 cloudscheduler.jobs.create 的 IAM 角色造成的。一个示例角色是 roles/cloudscheduler.admin 又名 Cloud Scheduler Admin。我觉得您混合了与 Cloud Scheduler 一起使用的服务帐户的权限(在运行时,当作业触发某些内容时)和当前创建作业的帐户的权限(例如您的帐户)。

您实际上需要两个服务帐户才能创建作业。您需要自己设置一个(可以是您喜欢的任何名称并且不需要任何特殊权限)并且您还需要一个用于默认 Cloud Scheduler 本身(由 Google 管理)

  1. 使用现有的 service account 用于从 Cloud Scheduler 调用您的 HTTP 目标,或者您可以为此目的创建一个新的服务帐户。服务帐户必须与创建 Cloud Scheduler 作业的项目属于同一项目。这是 客户端服务帐户 。在指定服务帐户以生成 OAuth / OICD 令牌时使用此选项。 如果您的目标是 Google Cloud 的一部分,例如 Cloud Functions/Cloud 运行,请更新您的客户服务帐户,为其授予必要的 IAM role (Cloud function invoker for cloud functions and Cloud Run Invoker for Cloud Run).The receiving service automatically verifies the generated token. If your target is outside of Google Cloud, the receiving service must manually verify the token.

  2. 另一个服务帐户是默认的 Cloud Scheduler 服务帐户,它也必须存在于您的项目中,并被授予 Cloud Scheduler 服务代理角色。这样它就可以代表您的客户服务帐户生成 header 令牌以向您的目标进行身份验证。当您启用 Cloud Scheduler API 时,将自动设置授予此角色的 Cloud Scheduler 服务帐户,除非您在 2019 年 3 月 19 日之前启用它,在这种情况下您必须 add the role manually.

注意:请勿从您的项目或其 Cloud Scheduler Service Agent role 中删除 service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com 服务帐户。这样做会导致对需要身份验证的端点做出 403 响应,即使您的工作的服务帐户具有适当的角色也是如此。