Python 3.9 が一般提供になりました。

App Engine ファイアウォールについて

ファイアウォールにより、通過を許可するネットワーク トラフィックと拒否するネットワーク トラフィックが判別されます。ファイアウォールは、受信トラフィック(上り)、送信トラフィック(下り)、またはその両方に適用できます。App Engine の場合、App Engine ファイアウォールは、アプリまたはサービスに転送される受信トラフィックにのみ適用されます。

概要

App Engine ファイアウォールは、次のような、アプリへのあらゆる種類のリクエストをチェックします。

  • アプリの appspot.com アドレスまたはカスタム ドメインに転送される、通常のウェブ トラフィック。
  • Cloud Load Balancing からのリクエスト。
  • Compute Engine 仮想マシン(VM)や Cloud Tasks などの内部ソースからのトラフィック。

アプリが他のネットワーキング サービスまたはプロダクトを使用するよう構成されている場合、App Engine ファイアウォールと他のプロダクトのファイアウォールまたはセキュリティ設定の両方で、受信トラフィックを制御するルールを作成する必要がある場合があります。このガイドでは、App Engine ファイアウォールの一般的な動作と、このような特殊なユースケースについて詳しく説明します。

App Engine のファイアウォール ルール

Google Cloud Console、gcloud コマンドライン インターフェース、または Admin API で、指定した IP 範囲を許可またはブロックするルールを指定することで、App Engine のファイアウォール ルールを構成できます。

デフォルトでは、ルールに一致しないリクエストには、アプリへのアクセスが許可されます。特定のルールに一致しないリクエストをすべてブロックする必要がある場合(デフォルトでは、許可された内部サービスからのリクエストを除く)、default ルールのアクションを deny に変更します。

ファイアウォール機能

App Engine スタンダード環境では、App Engine ファイアウォールが特定の内部トラフィックにファイアウォールをバイパスさせることができます。つまり、default ルールを deny に設定すると、App Engine スタンダード環境向けの特定のサービスからのリクエストはブロックされなくなります。アプリの構成で要求される、または同じアプリから送信される、あらゆるタイプのトラフィックです。このようなファイアウォール ルールをバイパスするリクエストには、次のようなものがあります。

第 1 世代ランタイムにバンドルされている App Engine のスタンダード環境とサービスを使用するアプリの場合、従来の Mail API からの通知もファイアウォールをバイパスします。

サービスからの受信リクエストを許可する

次の表は、一般的なサービスの IP 範囲と App Engine ファイアウォールの動作を示しています。使用される IP 範囲は、受信リクエストが App Engine スタンダード環境で実行されるバージョンに転送されるか、App Engine フレキシブル環境で実行されるバージョンに転送されるかによって異なります。

サービス App Engine スタンダード環境に送信されたリクエストの IP 範囲 App Engine フレキシブル環境に送信されたリクエストの IP 範囲
Cloud Storage または Blobstore 0.1.0.30/32 該当なし
App Engine HTTP(App Engine Cron を含む)と Cloud Tasks の App Engine タスク(App Engine タスクキューを含む)を使用した Cloud Scheduler ジョブ 0.1.0.2/32、拒否と設定されている場合はデフォルトのファイアウォール ルールをバイパス 0.1.0.2/32
URL 取得 0.1.0.40/32 0.1.0.40/32
限定公開の Google アクセスが有効になっている Compute Engine インスタンス 0.0.0.0/32 0.0.0.0/32

App Engine のファイアウォール ルールを構成する場合は、ユースケースに応じて次の追加の手順を適用できます。

App Engine スタンダードの例

スタンダード環境で動作するアプリには、frontend_servicebackend_service の 2 つのサービスがあります。frontend_service は、App Engine HTTP で Cloud Tasks を使用して、backend_service にメッセージを送信します。default ファイアウォール ルールは、deny に設定されている場合でも Cloud Tasks リクエストを許可するため、Cloud Tasks 用のファイアウォール ルールを作成する必要はありません。

ただし、アプリへのアクセスを制限し、Cloud Tasks リクエストを明示的にブロックする場合は、IP 範囲 0.1.0.2/32 に対して deny ファイアウォール ルールを作成します。

App Engine フレキシブル環境の例

フレキシブル環境で実行されるアプリには frontend_servicebackend_service の 2 つのサービスがあり、デフォルトでトラフィックを拒否するようにファイアウォールが構成されています。frontend_service は、App Engine HTTP で Cloud Tasks を使用して、backend_service にメッセージを送信します。default ファイアウォール ルールによって Cloud Tasks リクエストが拒否されるため、0.1.0.2/32 用の allow ファイアウォール ルールを作成する必要があります。

他のプロダクトやサービスとの関係

Cloud Load Balancing

Cloud Load Balancing とサーバーレス NEGS を使用する場合は、次の点に注意してください。

  • ロードバランサにより、App Engine ファイアウォール ルールが妨げられることや、ロードバランサが App Engine ファイアウォール ルールに関わることはありません。App Engine ファイアウォール ルールは、サーバーレス NEG が App Engine にトラフィックを転送するまで評価されません。
  • アプリがロードバランサ(および使用している場合は VPC)から送信されたリクエストのみを受信するように、上り(内向き)制御を使用することをおすすめします。使用しない場合、ユーザーはアプリの App Engine URL を使用して、ロードバランサ、Google Cloud Armor セキュリティ ポリシー、SSL 証明書、ロードバランサを経由して渡される秘密鍵をバイパスできます。

  • 上り(内向き)コントロールinternal-and-cloud-load-balancing トラフィックを受信するように設定されている場合は、デフォルトの App Engine ファイアウォール ルールはそのままにして(allow)、Google Cloud Armor ウェブ アプリケーション ファイアウォール(WAF)ルールを使用します。

キャッシュに保存されたコンテンツへのアクセスの防止

App Engine ファイアウォールは、コンテンツ キャッシュ メカニズム(ウェブプロキシやブラウザなど)の背後に設置されます。コンテンツがキャッシュに保存されると、期限切れになるまでコンテンツは特定の URL から提供され、新しいファイアウォール ルールを作成してもそのコンテンツにはアクセスできます。

静的コンテンツのデフォルトの有効期限の変更または、静的コンテンツがキャッシュに保存されないようにする方法については、キャッシュの有効期限をご覧ください。

アプリのコードからの動的コンテンツの出力がキャッシュに保存されないようにするには、Cache-ControlExpires の HTTP レスポンス ヘッダーを使用します。キャッシュの制御方法など、HTTP ヘッダーの詳細については、キャッシュの回避をご覧ください。

次のステップ

App Engine のファイアウォール ルールを構成する方法については、ファイアウォールの作成の手順をご覧ください。