尝试运行 Google Cloud Scheduler 任务时出现 PERMISSION_DENIED 错误

Posted

技术标签:

【中文标题】尝试运行 Google Cloud Scheduler 任务时出现 PERMISSION_DENIED 错误【英文标题】:PERMISSION_DENIED error when trying to run a Google Cloud Scheduler task 【发布时间】:2021-09-10 13:25:06 【问题描述】:

我有一个由 Python 脚本组成的 Google Cloud 函数。当我测试该功能时,一切都按预期工作。

该函数使用 PubSub 作为触发器和服务帐户。我已经设置了一个 Cloud Sheduler 来每天触发 PubSub。但是,当我使用“立即运行”按钮测试调度程序时,我收到此权限被拒绝错误。


  "insertId": "***",
  "jsonPayload": 
    "status": "PERMISSION_DENIED",
    "pubsubTopic": "projects/***/topics/***",
    "@type": "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished",
    "targetType": "PUB_SUB",
    "jobName": "projects/***/locations/europe-west1/jobs/***"
  ,
  "resource": 
    "type": "cloud_scheduler_job",
    "labels": 
      "project_id": "***",
      "location": "europe-west1",
      "job_id": "***"
    
  ,
  "timestamp": "2021-06-27T21:45:00.807387936Z",
  "severity": "ERROR",
  "logName": "projects/***/logs/cloudscheduler.googleapis.com%2Fexecutions",
  "receiveTimestamp": "2021-06-27T21:45:00.807387936Z"

调度程序设置:

我的服务帐户拥有项目的编辑权限。我如何知道缺少哪个权限以及在哪里添加?或者问题不是服务帐户而是其他问题?

【问题讨论】:

您能分享一下您的 Cloud Scheduler 配置吗? 当然。编辑了问题。 【参考方案1】:

在仔细检查了 Cloud Function、Scheduler 和 PubSub 后,我遇到了 this answer。禁用和重新启用 API 可以解决问题并解决问题。我猜初始配置的某些部分已被删除,重新启用 API 会重新创建所需的一切。

【讨论】:

【参考方案2】:

我们在 7 月 25 日星期日突然遇到了类似的问题,这是一个自 2019 年初以来运行良好的生产项目。 禁用 API 不是一个选项,因为我们不想重新创建所有 cronjob 配置。 所以我们按照here 的描述创建了 SA。该文档适用于 HTTP 触发请求,但似乎也适用于 Pub/Sub 触发器。

service-[project-number]@gcp-sa-cloudscheduler.iam.gserviceaccount.com

并赋予 SA Pub/Sub Publish 角色(我不确定这是否真的需要) 看起来这使 te 技巧并解决了问题。

【讨论】:

我们在 7 月 26 日(EEST)中午开始遇到问题。根据文档添加权限解决了问题(我们 GCP 的老客户)。令人惊讶的是,我们必须搜索修复而不是谷歌才能静默应用它。【参考方案3】:

我在 7 月 26 日遇到了同样的问题,从昨天开始我一直在关注一个谷歌论坛,在这个链接上https://issuetracker.google.com/issues/194507663

根据论坛,我执行了以下命令:

gcloud projects add-iam-policy-binding [project-id] --member serviceAccount:service-[project-number]@gcp-sa-cloudscheduler.iam.gserviceaccount.com --role roles/cloudscheduler.serviceAgent

...它成功了!显然它为 Cloud Scheduler 上的 Pub / Sub 发布添加了一个 P4SA 帐户。

【讨论】:

以上是关于尝试运行 Google Cloud Scheduler 任务时出现 PERMISSION_DENIED 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Cloud Datastore API 的 Spring Boot 无法运行

无法在 Google Cloud SQL 中运行迁移

尝试从 Jupyter Notebook 使用 Spark 访问 Google Cloud Bigtable 时出现区域错误

在 Google Cloud 函数中运行 gsutil 命令

尝试部署到 Google Cloud Run 时出现权限错误

Google Cloud Platform:无法从 Container Engine 访问 Pubsub