使用 Cloud Scheduler 安排 Dataflow 批处理作业 - 权限被拒绝

Schedule Dataflow batch jobs with Cloud Scheduler - Permission Denied

正如标题所说,我正在尝试 运行 基于此 link 教程的调度程序的数据流 https://cloud.google.com/community/tutorials/schedule-dataflow-jobs-with-cloud-scheduler

我想我已经按照教程中的确切步骤(只是不同的区域配置)创建了调度程序 但是当我尝试 运行 调度程序时,出现了这个错误

{ "status": "PERMISSION_DENIED", "jobName": "projects/my-project-id/locations/asia-south1/jobs/scheduler-demo", "url": "https://dataflow.googleapis.com/somerandomidthatidontknow/projects/my-project-id/locations/asia-south1/templates:launch?gcsPath=gs://my-testing-bucket/templates/dataflow-demo-template", "@type": "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished", "targetType": "HTTP" }

是不是因为地域?因为教程说

Cloud Scheduler jobs must be created in the same region as App engine.

我的 app-engine 在 asia-south1

我的调度程序在 IST 时区

我的桶在美国的多个地区

服务帐号:scheduler-dataflow-demo@my-project-id.iam.gserviceaccount.com

  1. 数据流管理员(运行ning terraform 来自教程时创建的默认角色)
  2. Dataflow Worker(试图通过添加这个来解决这个问题,但没有工作)
  3. 所有者(试图通过添加这个来解决这个问题,但不起作用)

您用于 Cloud scheduler 的服务帐户似乎没有正确的权限。

http_target {
    http_method = "POST"
    uri = "https://dataflow.googleapis.com/v1b3/projects/${var.project_id}/locations/${var.region}/templates:launch?gcsPath=gs://${var.bucket}/templates/dataflow-demo-template"
    oauth_token {
      service_account_email = google_service_account.cloud-scheduler-demo.email
    }

根据您所说的link,您应该指定自己的服务帐户电子邮件。

service_account-email = google_service_account.cloud-调度程序-demo.email

您可以成功地为您的服务帐户分配 运行 数据流作业的角色。

这是修复此权限被拒绝问题的步骤

  1. Google Cloud Project Settings Page
  2. 上找到您项目的项目编号
  3. 抄下号码
  4. 打开IAM Admin Console Page
  5. 点击添加。添加成员屏幕打开
  6. 在“新成员”对话框中,添加以下格式的电子邮件地址: 服务-[项目编号]@gcp-sa-cloudscheduler.iam.gserviceaccount.com
  7. 用上面的项目编号替换 [project-number]
  8. 从 Select 角色下拉列表中,选择服务管理 -> Cloud Scheduler 服务代理 -> 保存

我按照这个 link 上的步骤找到了解决方案 https://cloud.google.com/scheduler/docs/http-target-auth