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

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

概要

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

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

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

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

App Engine ファイアウォール ルールの構成を行うには、Google Cloud コンソール、Google Cloud CLI、または Admin API を使用して、指定した IP 範囲を許可またはブロックするルールを指定します。

デフォルトでは、ルールに一致しないリクエストのすべてに、アプリへのアクセスが許可されます。特定のルールに一致しないリクエストをすべてブロックする必要がある場合(デフォルトで許可された内部サービスからのリクエストを除く)は、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 範囲
App Engine Cron 0.1.0.1/32 または 0.1.0.2/32(deny と設定されている場合はデフォルトのファイアウォール ルールをバイパス) 0.1.0.1/32 または 0.1.0.2/32
アウトバウンド接続に Cloud NAT を使用する Compute Engine インスタンス 構成済みの Cloud NAT IP アドレス 構成済みの Cloud NAT IP アドレス
外部 IP アドレスのある Compute Engine インスタンス インスタンスの外部 IP アドレス インスタンスの外部 IP アドレス
外部 IP アドレスのない Compute Engine インスタンス 0.0.0.0/32 0.0.0.0/32
Cloud Tasks で App Engine HTTP タスクと App Engine タスク(App Engine タスクキューを含む)を使用する Cloud Scheduler ジョブ 0.1.0.2/32(deny と設定されている場合はデフォルトのファイアウォール ルールをバイパス) 0.1.0.2/32
Cloud Storage または Blobstore 0.1.0.30/32 該当なし
URL 取得 0.1.0.40/32 0.1.0.40/32
ウォーミング リクエスト 0.1.0.3/32(deny と設定されている場合はデフォルトのファイアウォール ルールをバイパス) 該当なし

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

  • 新規作成または更新された App Engine Cron ジョブからの App Engine スタンダード環境やフレキシブル環境に送信されるリクエストは、0.1.0.2 から送信されます。古い gcloud バージョン(326.0.0 より前)で作成された cron ジョブの場合、cron リクエストは 0.1.0.1 から送信されます。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 リクエストが拒否されるため、0.1.0.2/32 に対して allow のファイアウォール ルールを作成する必要があります。

他のプロダクトやサービスとの連動

Cloud Load Balancing

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

  • ロードバランサにより、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 範囲を許可する必要があります。IP 範囲を両方(VPC ファイアウォールと App Engine ファイアウォール)に指定しないと、その IP 範囲では App Engine のアプリやサービスにアクセスできません。

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

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

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

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

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

次のステップ

ファイアウォールの作成の手順に沿って App Engine ファイアウォール ルールの構成方法を学習する。