
Google Cloud Scheduler を使用すると、Google Cloud Function に関連付けられた http エンドポイントにアクセスして、タイマー/スケジューラから関数を実行できます。Cloud Functions には、公開に関して 2 つのオプションがあります: (1) すべてのトラフィックを許可する、または (2) 内部トラフィックのみを許可する (同じプロジェクトまたは VPC SC 境界内からのトラフィックのみ許可)。後者を実行したいのですが、スケジューラは HTTP 403 でアクセスできません。
すべてのトラフィックに公開すると、誰かが私の URL を推測して、好きなだけトリガーできるようになります。もちろん、関数に認証を入れて Scheduler に適切なヘッダーを渡すこともできますが、私の関数は他の誰かがトリガーしても危険ではありません。ただし、他の誰かがトリガーできる場合は、好きなだけ呼び出すことができ、認証があっても、すべての呼び出しに対して料金が発生します。Scheduler 以外の誰も (理想的には) URL にアクセスできないようにして、私のスケジュール以外ではトリガーされないようにしたいのですが。これを可能にする方法はありますか?
答え1
公式ドキュメントによると:
Cloud Scheduler を使用するには、サポートされているリージョンのいずれかにある App Engine アプリが Cloud プロジェクトに含まれている必要があります。プロジェクトに App Engine アプリがない場合は、作成する必要があります。
したがって、次のコマンドを実行して、App Engine アプリケーションの場所を見つけます。
gcloud app describe
#check for the locationId: europe-west2
次に、Ingress 設定で「内部トラフィックのみを許可する」に設定されたクラウド関数を、App Engine アプリケーションと同じ場所にデプロイします。
アプリ エンジン アプリケーションと同じリージョンにクラウド関数をデプロイしましたが、すべてが期待どおりに動作しました。