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 スタンダード環境では、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 範囲
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)ルールを使用します。

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

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

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

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

次のステップ

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