尝试运行 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 无法运行
尝试从 Jupyter Notebook 使用 Spark 访问 Google Cloud Bigtable 时出现区域错误
在 Google Cloud 函数中运行 gsutil 命令