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 フレキシブル環境で Virtual Private Cloud(VPC)レベルのファイアウォール ルールが自動的に構成されることもありますが、VPC ファイアウォールは App Engine ファイアウォールと関わりません。

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

次の表は、一般的なサービスの 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、拒否と設定されている場合はデフォルトのファイアウォール ルールをバイパス 10.0.0.1/32 および 0.1.0.2/32
URL 取得 0.1.0.40/32 0.1.0.40/32 および 10.0.0.1/32
限定公開の Google アクセスが有効になっている Compute Engine インスタンス 0.0.0.0/32 0.0.0.0/32

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

  • Cron サービスからのリクエストを識別するためのガイダンスが必要な場合は、cron リクエストの検証をご覧ください。
  • アプリが Cloud Load Balancing とやり取りする場合、または VPC ネットワークに接続している場合は、この後の他のプロダクトやサービスとの連携セクションをご覧ください。

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 リクエストを拒否するため、10.1.0.40/32 および 0.1.0.2/32 用の 2 つの 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)ルールを使用します。

VPC ファイアウォール

App Engine ファイアウォールは、VPC ベースのファイアウォールとは別に構成され、適用されます。VPC ファイアウォール ルールは、Compute Engine 仮想マシンなどの VPC ネットワークで実行されているリソースに適用されますが、App Engine のファイアウォール ルールはアプリやサービスへの受信リクエストに適用されます。

ネットワーク環境に VPC ファイアウォール ルール階層型ファイアウォール ポリシーなどの VPC ベースのファイアウォール ルールがある場合、VPC レベルのファイアウォールと App Engine ファイアウォールの両方で、受信リクエストの IP 範囲を App Engine アプリから受信できるようにする必要があります。

VPC レベルのファイアウォールの場合、階層型ファイアウォール ポリシーは VPC ファイアウォール ルールの前に評価され、VPC ファイアウォールの評価中のシーケンスに従います。VPC レベルのファイアウォールと App Engine ファイアウォールの両方で許可されるリクエストは、App Engine アプリまたはサービスにより受信されます。VPC ファイアウォールが、App Engine ファイアウォールで許可されているものと同じ IP 範囲からのリクエストを拒否する場合、App Engine アプリへのアクセスは許可されません。

共有 VPC

App Engine フレキシブル環境では、共有 VPC を通じて VPC ネットワークを使用するようにアプリが構成されているかどうかに応じて、ファイアウォールを作成できます。

App Engine フレキシブル環境でアプリが共有 VPC を使用している場合、ファイアウォール ルールが自動的に作成されることはありません。アクセスを制御し、VPC ネットワーク上でトラフィックを許可するには、共有 VPC ネットワークでファイアウォール ルールを作成します。

また、トラフィック ソースからのリクエストを許可するには、VPC ファイアウォール App Engine ファイアウォールで同じ IP 範囲を許可する必要があります。両方の場所(VPC ファイアウォールと App Engine ファイアウォール)に IP 範囲を指定しないと、その IP 範囲では App Engine のアプリやサービスにアクセスできません。

App Engine フレキシブル環境アプリで共有 VPC を使用するように構成されていない場合、App Engine フレキシブル環境では、アプリがスプリット ヘルスチェック(デフォルト)を使用するか、レガシー ヘルスチェックを使用するかによって、最大で 2 つの非表示の VPC ファイアウォール ルールが作成されます。非表示のファイアウォール ルールでは、フレキシブル環境へのトラフィックの配信とヘルスチェック トラフィックが許可されます。

  • ネットワーク名: app.yaml で指定されたネットワーク、ネットワークが構成されていない場合はデフォルトのネットワーク。
  • ターゲットタグ: app.yaml ファイルで指定された instance_tags。デフォルトでは、ターゲットタグが指定されていない場合、App Engine フレキシブルはその特定のフレキシブル バージョンのインスタンスにのみ影響する一意のタグを生成し、ファイアウォール ルールはこのタグをターゲットにします。
  • トラフィックの方向: 上り
  • 一致したときのアクション: 許可
  • 送信元 IP 範囲: 35.191.0.0/16130.211.0.0/22
  • プロトコルとポート:
    • TCP: 8443(レガシー ヘルスチェックの場合)または 10402(スプリット ヘルスチェックの場合)
  • 優先度: 1000

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

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

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

次のステップ

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