
Mit Google Cloud Scheduler können Sie den HTTP-Endpunkt erreichen, der mit einer Google Cloud-Funktion verknüpft ist, sodass Sie Ihre Funktion über einen Timer/Scheduler ausführen können. Cloud-Funktionen haben zwei Möglichkeiten, sie verfügbar zu machen: (1) Den gesamten Datenverkehr zulassen oder (2) Nur internen Datenverkehr zulassen (nur Datenverkehr aus demselben Projekt oder VPC SC-Peripherie zulässig). Ich würde gerne Letzteres tun, aber der Scheduler kann mit einer HTTP 403-Meldung nicht darauf zugreifen.
Da ich für den gesamten Datenverkehr offen bin, muss jemand nur meine URL erraten und sie so oft auslösen, wie er möchte. Natürlich kann ich eine Authentifizierung in meine Funktion einfügen und Scheduler einen entsprechenden Header übergeben lassen, aber es ist nicht gefährlich, wenn meine Funktion von jemand anderem ausgelöst wird. Wenn jedoch jemand anderes sie auslösen kann, kann er sie so oft aufrufen, wie er möchte, und selbst mit Authentifizierung fallen für alle diese Aufrufe Gebühren an. Ich möchte sicherstellen, dass niemand außer Scheduler (idealerweise) die URL erreichen kann, sodass sie nur nach meinem Zeitplan ausgelöst wird. Gibt es eine Möglichkeit, dies zu ermöglichen?
Antwort1
Laut der offiziellen Dokumentation:
Um Cloud Scheduler verwenden zu können, muss Ihr Cloud-Projekt eine App Engine-App enthalten, die sich in einer der unterstützten Regionen befindet. Wenn Ihr Projekt keine App Engine-App hat, müssen Sie eine erstellen.
Suchen Sie daher den Speicherort Ihrer App Engine-Anwendung, indem Sie Folgendes ausführen:
gcloud app describe
#check for the locationId: europe-west2
Stellen Sie dann sicher, dass Sie Ihre Cloud-Funktion mit den Ingress-Einstellungen so bereitstellen, dass „Nur internen Datenverkehr zugelassen“ ist, und zwar am selben Speicherort wie Ihre App Engine-Anwendung.
Ich habe eine Cloud-Funktion in derselben Region wie meine App Engine-Anwendung bereitgestellt und alles hat wie erwartet funktioniert.