在同一个项目中,我有一个HTTP Cloud Function和一个Cloud Scheduler,它们向该函数发送POST请求。我想只允许来自项目内部的请求调用函数。然而,当我将Ingress Settings设置为"Allow internal traffic only"时,Cloud Scheduler会得到"PERMISSION_DENIED">
以下是错误日志(已编辑(
httpRequest: {
status: 403
}
insertId: "insert_id"
jsonPayload: {
@type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"
jobName: "projects/project_name/locations/location/jobs/cloud_scheduler_job"
status: "PERMISSION_DENIED"
targetType: "HTTP"
url: "https://location-project_name.cloudfunctions.net/cloud_function_name"
}
logName: "projects/project_name/logs/cloudscheduler.googleapis.com%2Fexecutions"
receiveTimestamp: "2020-02-20T13:15:43.134508712Z"
resource: {
labels: {
job_id: "cloud_scheduler_name"
location: "location"
project_id: "project_id"
}
type: "cloud_scheduler_job"
}
severity: "ERROR"
timestamp: "2020-02-20T13:15:43.134508712Z"
}
链接到ingressSettings 的UI选项
根据官方文件:
若要使用Cloud Scheduler,您的云项目必须包含应用程序引擎位于受支持区域之一的应用程序。如果您的项目没有应用程序引擎应用程序,您必须创建一个。
Cloud Scheduler概述
因此,通过运行找到应用程序引擎应用程序的位置
gcloud app describe
#check for the locationId: europe-west2
然后,确保您将带有入口设置的云功能"仅允许内部流量"部署到与应用程序引擎应用程序相同的位置。
我在与应用程序引擎应用程序相同的区域部署了一个云功能,一切都如预期。
当您使用"仅允许内部流量"选项时,您需要在云功能中使用某种身份验证(为了避免这种情况,您可以使用"允许所有流量"选项(。
请查看链接中提供的第三条评论:https://serverfault.com/questions/1000987/trigger-google-cloud-functions-from-google-cloud-scheduler-with-private-network