ファイアウォールにより、通過を許可するネットワーク トラフィックと拒否するネットワーク トラフィックが判別されます。ファイアウォールは、受信トラフィック(上り / 内向き)、送信トラフィック(下り / 外向き)、またはその両方に適用できます。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_service
と backend_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_service
と backend_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/16
と130.211.0.0/22
- プロトコルとポート:
- TCP:
8443
(レガシー ヘルスチェックの場合)または10402
(スプリット ヘルスチェックの場合)
- TCP:
- 優先度:
1000
キャッシュに保存されたコンテンツへのアクセスの防止
App Engine ファイアウォールは、コンテンツをキャッシュ保存する構成要素(ウェブプロキシやブラウザなど)の背後に設置されます。コンテンツがキャッシュに保存されると、そのコンテンツは期限切れになるまで特定の URL から提供され、新しいファイアウォール ルールを作成してもそのコンテンツにはアクセスできます。
コンテンツがキャッシュに保存されないようにするには、Cache-Control
と Expires
の HTTP レスポンス ヘッダーを使用します。キャッシュの制御方法など、こうした HTTP ヘッダーの詳細については、キャッシュの回避をご覧ください。
次のステップ
ファイアウォールの作成の手順に沿って App Engine ファイアウォール ルールの構成方法を学習する。