如何解决从Cloud Scheduler调用Google Cloud函数时,获得权限被拒绝的错误
我正在尝试启用由云调度程序触发的Http的Google云功能。 但是每当我尝试运行云调度程序时,它总是说Permsiion拒绝错误
httpRequest: {
status: 403
}
insertId: "14igacagbanzk3b"
jsonPayload: {
@type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"
jobName: "projects/***********/locations/europe-west1/jobs/twilio-cloud-scheduler"
status: "PERMISSION_DENIED"
targetType: "HTTP"
url: "https://europe-west1-********.cloudfunctions.net/function-2"
}
logName: "projects/*******/logs/cloudscheduler.googleapis.com%2Fexecutions"
receiveTimestamp: "2020-09-20T15:11:13.240092790Z"
resource: {
labels: {
job_id: "***********"
location: "europe-west1"
project_id: "**********"
}
type: "cloud_scheduler_job"
}
severity: "ERROR"
timestamp: "2020-09-20T15:11:13.240092790Z"
}
我尝试过的解决方案-
- 根据某些用户的建议,尝试将Google云功能与App引擎放在同一区域。
- 有权访问由Google提供的云schduler sa 服务- **** @ gcp-sa-cloudscheduler.iamaccount .gserviceaccount.com 所有者角色和Cloud Functions Admin角色
- 我的云功能的入口设置为“允许所有流量”。
我的云调度程序仅在以下命令下运行时有效
gcloud函数add-iam-policy-binding云函数--member =“ allUsers” --role =“ roles / cloudfunctions.invoker”
解决方法
就我而言,问题与云功能的受限入口设置有关。我将其设置为“仅允许内部流量”,但这仅允许来自使用 VPC 的服务的流量,而 Cloud Scheduler 不符合 doc 解释:
仅限内部使用的 HTTP 函数只能由在 VPC 网络内创建的 HTTP 请求调用,例如来自 Kubernetes Engine、Compute Engine 或 App Engine 柔性环境的请求。这意味着由 Pub/Sub、Eventarc、Cloud Scheduler、Cloud Tasks 和 Workflows 创建或路由的事件无法触发这些功能。
所以正确的做法是:
- 将入口设置为“所有流量”
- 删除角色为 Cloud Function Invoker 的 allUsers 的权限
- 为已创建的具有角色 Cloud Function Invoker 的服务帐户添加权限
- 或者只是在 IAM 控制台中为服务帐户全局设置该权限(您也可以在创建服务帐户时这样做)
在Cloud Scheduler页面上,您必须添加服务帐户以用于调用私有Cloud Function。在Cloud Scheduler设置中,您必须
- 点击底部的
SHOW MORE
- 在
Add OIDC token
部分中选择Auth Header
- 在计划程序的服务帐户电子邮件中添加服务帐户电子邮件
- 使用与Cloud Functions相同的基本URL(部署时提供的URL)填充受众群体
计划程序的服务帐户电子邮件必须授予角色功能。调用者
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。