🛡

Cloud Firewall サービスの違いと評価順序を解説してみた

2024/02/05に公開

こんにちは! クラウドエース SRE 部の小田です。
今回は、Google Cloud の Cloud Firewall のファイアウォール ポリシーとファイアウォール ルールの違いと評価順序についてまとめます。

https://cloud.google.com/firewall/docs/about-firewalls?hl=ja

ターゲットとなる読者層

  • Google Cloud の Cloud Firewall サービスについて知りたい方
  • ファイアウォール ポリシーとファイアウォール ルールが評価される順序がよくわからない方

本記事の目標

  • Cloud Firewall サービスの違いについて理解する
  • 各ファイアウォールが評価される順序を理解する

Google Cloud のファイアウォールっぽいサービスについてはこちらの記事で解説しています。
https://zenn.dev/cloud_ace/articles/champion-innovators-advent-calendar-2023-1215

Google Cloud のファイアウォール

Google Cloud の各 Cloud Firewall サービスの比較は以下のとおりです。

階層型ファイアウォール ポリシー グローバル ネットワーク ファイアウォール ポリシー リージョン ネットワーク ファイアウォール ポリシー VPC ファイアウォール ルール
リソース階層 組織またはフォルダ プロジェクト プロジェクト プロジェクト
関連付け 組織またはフォルダ VPC ネットワーク
(すべてのサブネット)
VPC ネットワーク
(特定リージョンのサブネット)
VPC ネットワーク
アクション 許可、拒否、次に移動、L7 検査に進む 許可、拒否、次に移動、L7 検査に進む 許可、拒否、次に移動 許可、拒否
上り(内向き)ルールのターゲット VPC ネットワーク、サービス アカウント セキュアタグ、サービス アカウント セキュアタグ、サービス アカウント サービス アカウント、
ネットワーク タグ
再利用性
FQDN オブジェクト
アドレスグループ
(Cloud Firewall Standard)
脅威インテリジェンス
(Cloud Firewall Standard)
位置情報オブジェクト
(Cloud Firewall Standard)
侵入防止サービス
(Cloud Firewall Plus)
TLS インスペクション
(Cloud Firewall Plus)

Google Cloud のファイアウォールは大きく分類すると、ファイアウォール ポリシーとファイアウォール ルールの 2 種類のサービスに分けることができます。

ファイアウォール ポリシー

ファイアウォール ポリシーとは簡単に言うと、複数のファイアウォール ルールをグループ化して管理しやすくしたものです。

特徴として以下の項目があげられます。

  • 複数のファイアウォール ルールをグループ化して、一度にまとめて更新できる。
  • VPC ファイアウォール ルールは特定の VPC ネットワーク専用ですが、ファイアウォール ポリシーは他の VPC ネットワークにも適用できる。

階層型 ファイアウォール ポリシー

通常、VPC ファイアウォール ルールは VPC ネットワークに対して関連付けられているが、階層型ファイアウォール ポリシーは、Google Cloud リソース階層の組織ノードまたはフォルダノードレベルで適用される ファイアウォール ポリシー を作成できるサービスです。

階層型 ファイアウォール ポリシーは、組織ノードまたはフォルダノードに関連付けられているため、組織やフォルダノードより下に存在するプロジェクトと、今後作成されるプロジェクトのすべての VPC ネットワークにファイアウォール ポリシー ルールが継承され適用されます。

1

全ての階層型ファイアウォール ポリシーには事前定義のルールが存在するため、ソース範囲外のトラフィックは次の階層のファイアウォール ポリシー ルールで評価されます。

方向 優先度 ソース範囲 アクション
IPv4 の上り(内向き)ルール ingress 2147483647 0.0.0.0/0 goto_next
(次のステップへ進む)
IPv4 の下り(外向き)ルール egress 2147483646 0.0.0.0/0 goto_next
(次のステップへ進む)
IPv6 の上り(内向き)ルール ingress 2147483645 ::/0 goto_next
(次のステップへ進む)
IPv6 の下り(外向き)ルール egress 2147483644 ::/0 goto_next
(次のステップへ進む)

ユースケース

例えば、企業のクラウド セキュリティ ガイドラインとして VPC ネットワークとの通信は、オフィスのネットワークからの接続のみ許可するようなルールがある場合、組織レベルの階層型ファイアウォール ポリシーを適用することで組織配下全てのプロジェクトの VPC ネットワークで統制を行うことができます。

また、フォルダ配下の複数のプロジェクトで共通のファイアウォール ルールを適用したい場合には、フォルダレベルの階層型ファイアウォール ポリシーを適用すると、一つのポリシーで複数のプロジェクトに対してファイアウォール ルールを適用できるため、同じファイアウォール ルールを何度も作成するといった手間や運用が容易になります。

ネットワーク ファイアウォール ポリシー

続いてネットワーク ファイアウォール ポリシー (グローバル ネットワーク ファイアウォール ポリシー、リージョン ネットワーク ファイアウォール ポリシー) について解説します。

2

グローバル ネットワーク ファイアウォール ポリシー

グローバル ネットワーク ファイアウォール ポリシーは、関連付けた VPC ネットワークの全てのリージョン(グローバル)のサブネットワークに適用されるファイアウォール ポリシーです。

https://cloud.google.com/firewall/docs/network-firewall-policies?hl=ja

ユースケース

VPC ネットワークの全リージョンのサブネットに対して共通のファイアウォール ルールを適用したい場合、または Cloud Firewall Standard の機能(FQDN オブジェクト、位置情報オブジェクト、脅威インテリジェンス)や Cloud Firewall Plus の機能(侵入防止サービス(IPS)、TLSインスペクション)を利用したい場合に使用します。

リージョン ネットワーク ファイアウォール ポリシー

リージョン ネットワーク ファイアウォール ポリシーは、関連付けた VPC ネットワークの特定のリージョン内のサブネットワークにのみ適用されるファイアウォール ポリシーです。

https://cloud.google.com/firewall/docs/regional-firewall-policies?hl=ja

ユースケース

VPC ネットワークの特定リージョンのサブネットに利用するファイアウォール ルールを適用する場合、または Cloud Firewall Standard の機能(FQDN オブジェクト、位置情報オブジェクト、脅威インテリジェンス)を利用したい場合に使用します。

ファイアウォール ルール

ファイアウォール ルールについて解説します。

VPC ファイアウォール ルール

VPC ファイアウォール ルールとは、プロジェクト内の特定の VPC ネットワークに適用されるファイアウォール ルールです。

https://cloud.google.com/firewall/docs/firewalls?hl=ja

Google Kubernetes Engine リソースの作成時などに自動作成されます。
特定の VPC ネットワーク専用のファイアウォール ルールのため、プロジェクト内にある別の VPC ネットワークにも同じルールを適用するといったことができません。

ユースケース

マネージド サービスが自動作成する VPC ファイアウォール ルールを除き、これから新しく VPC ネットワーク ファイアウォール ルールは利用することはおすすめしません。

VPC ファイアウォール ルールとネットワーク ファイアウォール ポリシー ルールどちらもサブネット内の VM や、上り下りの通信制御ができる点は同じですが、VPC ファイアウォール ルールは VPC ネットワークごとに細かいファイアウォール ルールを作成するため、VPC ファイアウォール ルールと ネットワーク ファイアウォール ポリシー ルールが混在するとファイアウォール ルールの管理の手間が増えます。

また VPC ファイアウォール ルールではネットワーク タグを使用していますが、ネットワーク タグの付与を IAM で制御することができないため悪用される危険性があります。

VPC ファイアウォール ルールをグローバル ネットワーク ファイアウォール ポリシーへ移行する

Google としても VPC ファイアウォール ルールからグローバル ネットワーク ファイアウォール ポリシーへ移行することをおすすめしているため、移行するためのツールが用意されています。
https://cloud.google.com/blog/ja/products/identity-security/best-practices-for-migrating-to-network-firewall-policies

このツールを利用することで既存の VPC ファイアウォール ルールをグローバル ネットワーク ポリシー ルールに変換し、追加することができます。
※ 既存の VPC ファイアウォール ルールは削除されず、変換されたルールを含んだグローバル ネットワーク ポリシーが VPC ネットワークにも関連付けらていない状態で新規作成されます。

グローバル ネットワーク ファイアウォール ポリシーへの移行は以下のコマンドで行うことができます。

gcloud beta compute firewall-rules migrate --source-network=<SOURCE_VPC_NETWORK> --target-firewall-policy=<TARGET_NETWORK_FIREWALL_POLICY>

https://cloud.google.com/sdk/gcloud/reference/beta/compute/firewall-rules/migrate
https://cloud.google.com/sdk/gcloud/reference/alpha/compute/firewall-rules/migrate

※ネットワーク タグやサービス アカウントをターゲットに指定している VPC ファイアウォール ルールの移行方法については、移行ガイドを確認ください。

グローバル ネットワーク ファイアウォール ポリシーへ移行してみた

ネットワーク上のすべてのインスタンスをターゲットとした VPC ファイアウォール ルールを 2 つ作成しました。
この VPC ファイアウォール ルールをグローバル ネットワーク ファイアウォール ポリシーへ移行してみます。

3

移行するためのコマンドを実行します。

gcloud beta compute firewall-rules migrate --source-network=vpc-network-test --target-firewall-policy=test-policy

実行結果

Looking for VPC Firewalls and Network Firewall Policies associated with VPC Network 'vpc-network-test'.
Found 0 Network Firewall Policies associated with the VPC Network 'vpc-network-test'.
Found 2 VPC Firewalls associated with the VPC Network 'vpc-network-test'.

Found 2 customer defined VPC Firewalls.
priority: name 'description'
10: vpc-firewall-rule-01 ''
20: vpc-firewall-rule-02 ''

Creating new Network Firewall Policy 'test-policy'...done.                                                                                                          
Migrating the following VPC Firewalls:
old-priority: rule-name 'rule-description'
10: vpc-firewall-rule-01 ''
20: vpc-firewall-rule-02 ''
Migrating...done.

続いて VPC ファイアウォール ルールを元に作成されたグローバル ネットワーク ファイアウォール ポリシー ルールを確認します。
グローバル ネットワーク ファイアウォール ポリシーを確認するコマンドを実行します。

gcloud compute network-firewall-policies describe test-policy --global
実行結果
creationTimestamp: '2023-12-07T23:37:02.414-08:00'
description: Network Firewall Policy containing all VPC Firewalls and FirewallPolicy.Rules
  migrated using GCP Firewall Migration Tool.
fingerprint: xxxxxxxxxxxx
id: 'xxxxxxxxxxxxxxxxxxx'
kind: compute#firewallPolicy
name: test-policy
ruleTupleCount: 12
rules:
- action: allow
  description: ''
  direction: INGRESS
  disabled: false
  enableLogging: false
  kind: compute#firewallPolicyRule
  match:
    layer4Configs:
    - ipProtocol: icmp
    srcIpRanges:
    - 10.0.1.0/24
  priority: 10
  ruleName: vpc-firewall-rule-01
  ruleTupleCount: 2
- action: allow
  description: ''
  direction: INGRESS
  disabled: false
  enableLogging: false
  kind: compute#firewallPolicyRule
  match:
    layer4Configs:
    - ipProtocol: icmp
    srcIpRanges:
    - 10.0.2.0/24
  priority: 20
  ruleName: vpc-firewall-rule-02
  ruleTupleCount: 2
- action: goto_next
  description: default egress rule
  direction: EGRESS
  enableLogging: false
  kind: compute#firewallPolicyRule
  match:
    destIpRanges:
    - ::/0
    layer4Configs:
    - ipProtocol: all
  priority: 2147483644
  ruleTupleCount: 2
- action: goto_next
  description: default ingress rule
  direction: INGRESS
  enableLogging: false
  kind: compute#firewallPolicyRule
  match:
    layer4Configs:
    - ipProtocol: all
    srcIpRanges:
    - ::/0
  priority: 2147483645
  ruleTupleCount: 2
- action: goto_next
  description: default egress rule
  direction: EGRESS
  enableLogging: false
  kind: compute#firewallPolicyRule
  match:
    destIpRanges:
    - 0.0.0.0/0
    layer4Configs:
    - ipProtocol: all
  priority: 2147483646
  ruleTupleCount: 2
- action: goto_next
  description: default ingress rule
  direction: INGRESS
  enableLogging: false
  kind: compute#firewallPolicyRule
  match:
    layer4Configs:
    - ipProtocol: all
    srcIpRanges:
    - 0.0.0.0/0
  priority: 2147483647
  ruleTupleCount: 2
selfLink: https://www.googleapis.com/compute/v1/projects/project/global/firewallPolicies/test-policy
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/project/global/firewallPolicies/xxxxxxxxxxxxxxxxxxx

コンソール画面で確認します。
4

無事に移行元の VPC ファイアウォール ルール 2 つと、デフォルトで作成される 4 つのファイアウォール ポリシー ルールが追加されている状態でグローバル ネットワーク ファイアウォール ポリシーが作成されていることが確認できました。

ポリシーの説明 (description) にはファイアウォール移行ツールを使用して移行されたという旨の内容が記されています。

暗黙のファイアウォール ルール

全ての VPC ネットワークには Google Cloud コンソール上には表示されませんが、すべての下り(外向き)許可とすべての上り(内向き)拒否の暗黙のファイアウォール ルールが存在します。

https://cloud.google.com/firewall/docs/firewalls?hl=ja#default_firewall_rules

上位のファイアウォール ポリシー ルールで明示的なアクションが行われなかったトラフィックは、このルールによって下り(外向き)の通信は全て許可、上り(内向き)の通信は全て拒否するアクションが行われます。

暗黙のファイアウォール ルールの内容は以下の通りです。

名前 方向 優先度 ソース範囲 アクション
暗黙の IPv4 の下り(外向き)許可ルール egress 65535 0.0.0.0/0 allow
暗黙の IPv4 上り(内向き)拒否ルール ingress 65535 0.0.0.0/0 deny
暗黙の IPv6 の下り(外向き)許可ルール egress 65535 ::/0 allow
暗黙の IPv6 の上り(内向き)拒否ルール ingress 65535 ::/0 deny

ファイアウォール 評価順序

続いて各ファイアウォール の評価順序について説明します。
評価順序は図の通りです。

5

  1. 階層型ファイアウォール ポリシー
    a. 最初に階層ファイアウォール ポリシーの組織レベルで評価される。
    b. 組織の次に、フォルダー、その子フォルダ ... という順に各ノードレベルのファイアウォール ポリシー ルールが評価される。
  2. VPC ファイアウォール ルール
    a. 階層型ファイアウォール ポリシーに一致するルールがない場合、VPC ファイアウォール ルールでトラフィックが評価される。
  3. グローバル ネットワーク ファイアウォール ポリシー
    a. VPC ネットワーク内のすべてのサブネットに対してのトラフィックがポリシー ルールによって評価される。
  4. リージョン ネットワーク ファイアウォール ポリシー
    a. VPC ネットワーク内の特定のリージョンに対してのトラフィックがポリシー ルールによって評価される。
  5. 暗黙の VPC ファイアウォール ルール
    a. 最後に、Google Cloud コンソールには表示されていない暗黙の下り(外向き)許可と暗黙の上り(内向き)拒否の VPC ファイアウォール ルールでトラフィックが評価される。

VPC ファイアウォール ルールとネットワーク ファイアウォール ポリシーの評価順を序入れ替える

VPC ファイアウォール ルールとネットワーク ファイアウォール ポリシー(リージョン ネットワーク ファイアウォール ポリシー ルールとグローバル ネットワーク ファイアウォール ポリシー ルール)の評価順序を VPC ネットワークごとに入れ替えることが可能です。

https://cloud.google.com/firewall/docs/firewall-policies-overview?hl=ja#change_policy_and_rule_evaluation_order

入れ替えを行うと、ルールの評価順序が以下のように変更されます。

  1. 階層型ファイアウォール ポリシー
  2. グローバル ネットワーク ファイアウォール ポリシー
  3. リージョン ネットワーク ファイアウォール ポリシー
  4. VPC ファイアウォール ルール
  5. 暗黙の VPC ファイアウォール ルール

評価順序の変更は、以下のコマンドで行うことができます。

gcloud compute networks update <VPC_NETWORK> \
    --network-firewall-policy-enforcement-order BEFORE_CLASSIC_FIREWALL

https://cloud.google.com/sdk/gcloud/reference/compute/networks/update

順序変更前
6

順序変更後
7

元に戻す場合は、 networkFirewallPolicyEnforcementOrder 属性を AFTER_CLASSIC_FIREWALL に設定するとデフォルトの評価順序に戻すことができます。

gcloud compute networks update <VPC_NETWORK> \
    --network-firewall-policy-enforcement-order AFTER_CLASSIC_FIREWALL

まとめ

今回は、Cloud Firewall サービスの違いと評価順序について解説しました。
VPC ファイアウォール ルールをグローバル ファイアファイアウォール ポリシー ルールへ移行するためのツールは現段階ではベータ段階ですが、便利な機能だと思いました。
これから作成する環境については、VPC ファイアウォールではなくファイアウォール ポリシー系のサービスを利用するのが良さそうです。

Discussion