ファイアウォール ルールのロギング
ファイアウォール ルール ロギングを使用すると、ファイアウォール ルールの効果を監査、検証、分析できます。たとえば、トラフィックを拒否するように設計されたファイアウォール ルールが意図したとおりに機能しているかどうかを判別できます。ファイアウォール ルールロギングは、特定のファイアウォール ルールによって影響を受ける接続数を判別する必要がある場合にも役立ちます。
ファイアウォール ルールに一致する接続をログに記録する必要がある場合、そのファイアウォール ルールに対してファイアウォール ルールロギングを個別に有効化します。ルールの動作(allow
、deny
)や方向(上り(内向き)、下り(外向き))に関係なく、あらゆるファイアウォール ルールに任意でファイアウォール ルールロギングを有効化できます。
ファイアウォール ルールのロギングでは、Compute Engine 仮想マシン(VM)インスタンス間のトラフィックが記録されます。これには、Google Kubernetes Engine(GKE)クラスタや App Engine フレキシブル環境のインスタンスなど、Compute Engine VM 上に構築された Google Cloud プロダクトが含まれます。
ファイアウォール ルールに対してロギングを有効化すると、そのルールによってトラフィックが許可または拒否されるたびに、Google Cloud が接続レコードと呼ばれるエントリを作成します。これらのレコードは Cloud Logging で表示でき、Cloud Logging のエクスポート先としてサポートされている任意の宛先にログをエクスポートできます。
接続レコードごとに、送信元 IP アドレス、宛先 IP アドレス、プロトコルとポート、日時、およびトラフィックに適用されたファイアウォール ルールへの参照が記録されます。
ファイアウォール ルールのロギングは、VPC ファイアウォール ルールと階層型ファイアウォール ポリシーの両方で使用できます。
ログの表示については、ファイアウォール ルール ロギングを使用するをご覧ください。
仕様
ファイアウォール ルールロギングの仕様は次のとおりです。
- ファイアウォール ルールロギングを有効化できるルールは、Virtual Private Cloud(VPC)ネットワーク内のルールに限られます。レガシー ネットワークはサポートされていません。
- ファイアウォール ルールロギングで記録される接続は、TCP 接続と UDP 接続に限られます。他のプロトコルに適用可能なファイアウォール ルールを作成することはできますが、それらの接続をログに記録することはできません。他のプロトコルも記録する場合は、パケット ミラーリングの使用を検討してください。
- 暗黙の上り(内向き)拒否ルールと暗黙の下り(外向き)許可ルールに対してファイアウォール ルールロギングを有効化することはできません。
- ログエントリは VM の観点から記述されます。ログエントリが作成されるのは、ファイアウォール ルールのロギングが有効化されていて、かつ、そのルールが VM との間で送受信されるトラフィックに適用される場合のみです。エントリは、接続ロギング上限に従ってベスト エフォート ベースで作成されます。
- 特定の時間内でログに記録できる接続の数は、マシンタイプに基づきます。
- ファイアウォール ルールの変更は VPC 監査ログで確認できます。
ロギングの例
ロギングが有効化されたファイアウォール ルールがトラフィックに適用されるたびに、ログエントリが生成されます。パケットフローによっては複数のログエントリが生成されることもありますが、個別の VM の観点からは、トラフィックに適用されるファイアウォール ルールでロギングが有効化されている場合、生成されるログエントリは最大で 1 つだけです。
次の例で、ファイアウォール ログの仕組みを説明します。
下り(外向き)拒否ルールの例
この例では次のようになります。
example-proj
プロジェクトに含まれるexample-net
VPC ネットワーク内の VM インスタンス間のトラフィックが評価されます。- 2 つの VM インスタンスは次のとおりです。
- VM1 は
west-subnet
(us-west1
リージョン)内のゾーンus-west1-a
にあり、IP アドレス10.10.0.99
が割り当てられています。 - VM2 は
east-subnet
(us-east1
リージョン)内のゾーンus-east1-b
にあり、IP アドレス10.20.0.99
が割り当てられています。
- VM1 は
- ルール A: 下り(外向き)拒否のファイアウォール ルールのターゲットは、ネットワーク内のすべてのインスタンスです。このルールは、宛先を
10.20.0.99
(VM2)とするトラフィックに対して TCP ポート 80 に適用されます。- このルールについてはロギングが有効化されています。
- ルール B: 上り(内向き)許可のファイアウォール ルールのターゲットは、ネットワーク内のすべてのインスタンスです。このルールは、送信元を
10.10.0.99
(VM1)とするトラフィックに対して TCP ポート 80 に適用されます。- このルールについてもロギングが有効化されています。
次の gcloud
コマンドを使用して、ファイアウォール ルールを作成できます。
ルール A: すべてのインスタンスをターゲットに、
10.20.0.99
を宛先とするトラフィックに対して TCP 80 に適用する下り(外向き)拒否ルール。gcloud compute firewall-rules create rule-a \ --network example-net \ --action deny \ --direction egress \ --rules tcp:80 \ --destination-ranges 10.20.0.99/32 \ --priority 10 \ --enable-logging
ルール B: すべてのインスタンスをターゲットに、
10.10.0.99
を送信元とするトラフィックに対して TCP 80 に適用する上り(内向き)許可ルール。gcloud compute firewall-rules create rule-b \ --network example-net \ --action allow \ --direction ingress \ --rules tcp:80 \ --source-ranges 10.10.0.99/32 \ --priority 10 \ --enable-logging
VM1 が VM2 に TCP ポート 80 で接続しようとしているとします。この場合、次のファイアウォール ルールがログに記録されます。
- VM1 が
10.20.0.99
(VM2)への接続を試行すると、VM1 の観点からルール A のログエントリが生成されます。 - 実際はルール A によってトラフィックがブロックされるため、ルール B が考慮されることはありません。したがって、VM2 の観点からルール B のログエントリが記録されることもありません。
次のようなファイアウォール ログレコードが生成されます。
フィールド | 値 |
---|---|
connection | src_ip=10.10.0.99 src_port=[EPHEMERAL_PORT] dest_ip=10.20.0.99 dest_port=80 protocol=6 |
disposition | DENIED |
rule_details | reference = "network:example-net/firewall:rule-a" priority = 10 action = DENY destination_range = 10.20.0.99/32 ip_port_info = tcp:80 direction = egress |
instance | project_id="example-proj" instance_name=VM1 region=us-west1 zone=us-west1-a |
vpc | project_id="example-proj" vpc_name=example-net subnetwork_name=west-subnet |
remote_instance | project_id="example-proj" instance_name=VM2 region=us-east1 zone=us-east1-b |
remote_vpc | project_id="example-proj" vpc_name=example-net subnetwork_name=east-subnet |
remote_location | 情報はありません。このフィールドは、宛先が VPC ネットワークの外部である場合にのみ使用されます。 |
下り(外向き)許可ルール、上り(内向き)許可ルールの例
この例では次のようになります。
example-proj
プロジェクトに含まれるexample-net
VPC ネットワーク内の VM インスタンス間のトラフィックが評価されます。- 2 つの VM インスタンスは次のとおりです。
- VM1 は
west-subnet
(us-west1
リージョン)内のゾーンus-west1-a
にあり、IP アドレス10.10.0.99
が割り当てられています。 - VM2 は
east-subnet
(us-east1
リージョン)内のゾーンus-east1-b
にあり、IP アドレス10.20.0.99
が割り当てられています。
- VM1 は
- ルール A: 下り(外向き)許可のファイアウォール ルールのターゲットは、ネットワーク内のすべてのインスタンスです。このルールは、宛先を
10.20.0.99
(VM2)とするトラフィックに対して TCP ポート 80 に適用されます。- このルールについてはロギングが有効化されています。
- ルール B: 上り(内向き)許可のファイアウォール ルールのターゲットは、ネットワーク内のすべてのインスタンスです。このルールは、送信元を
10.10.0.99
(VM1)とするトラフィックに対して TCP ポート 80 に適用されます。- このルールについてもロギングが有効化されています。
次の gcloud
コマンドを使用して、2 つのファイアウォール ルールを作成できます。
ルール A: すべてのインスタンスをターゲットに、
10.20.0.99
(VM2)を宛先とするトラフィックに対して TCP 80 に適用する下り(外向き)許可ルール。gcloud compute firewall-rules create rule-a \ --network example-net \ --action allow \ --direction egress \ --rules tcp:80 \ --destination-ranges 10.20.0.99/32 \ --priority 10 \ --enable-logging
ルール B: すべてのインスタンスをターゲットに、
10.10.0.99
(VM1)を送信元とするトラフィックに対して TCP 80 に適用する上り(内向き)許可ルール。gcloud compute firewall-rules create rule-b \ --network example-net \ --action allow \ --direction ingress \ --rules tcp:80 \ --source-ranges 10.10.0.99/32 \ --priority 10 \ --enable-logging
VM1 が VM2 に TCP ポート 80 で接続しようとしているとします。この場合、次のファイアウォール ルールがログに記録されます。
- VM1 が
10.20.0.99
(VM2)に接続すると、VM1 の観点からルール A のログエントリが生成されます。 - VM2 が
10.10.0.99
(VM1)からの受信接続を許可すると、VM2 の観点からルール B のログエントリが生成されます。
次のように、VM1 からのファイアウォール ログレコードが生成されます。
フィールド | 値 |
---|---|
connection | src_ip=10.10.0.99 src_port=[EPHEMERAL_PORT] dest_ip=10.20.0.99 dest_port=80 protocol=6 |
disposition | ALLOWED |
rule_details | reference = "network:example-net/firewall:rule-a" priority = 10 action = ALLOW destination_range = 10.20.0.99/32 ip_port_info = tcp:80 direction = egress |
instance | project_id="example-proj" instance_name=VM1 region=us-west1 zone=us-west1-a |
vpc | project_id="example-proj" vpc_name=example-net subnetwork_name=west-subnet |
remote_instance | project_id="example-proj" instance_name=VM2 region=us-east1 zone=us-east1-b |
remote_vpc | project_id="example-proj" vpc_name=example-net subnetwork_name=east-subnet |
remote_location | 情報はありません。このフィールドは、宛先が VPC ネットワークの外部である場合にのみ使用されます。 |
次のように、VM2 からのファイアウォール ログレコードが生成されます。
フィールド | 値 |
---|---|
connection | src_ip=10.10.0.99 src_port=[EPHEMERAL_PORT] dest_ip=10.20.0.99 dest_port=80 protocol=6 |
disposition | ALLOWED |
rule_details | reference = "network:example-net/firewall:rule-b" priority = 10 action = ALLOW source_range = 10.10.0.99/32 ip_port_info = tcp:80 direction = ingress |
instance | project_id="example-proj" instance_name=VM2 region=us-east1 zone=us-east1-b |
vpc | project_id="example-proj" vpc_name=example-net subnetwork_name=east-subnet |
remote_instance | project_id="example-proj" instance_name=VM1 region=us-west1 zone=us-west1-a |
remote_vpc | project_id="example-proj" vpc_name=example-net subnetwork_name=west-subnet |
remote_location | 情報はありません。このフィールドは、宛先が VPC ネットワークの外部である場合にのみ使用されます。 |
インターネット上り(内向き)ルールの例
この例では次のようになります。
example-net
VPC ネットワークの外部にあるシステムからそのネットワーク内の VM インスタンスへのトラフィックが評価されます。このネットワークはexample-proj
プロジェクトにあります。- インターネット上のシステムには、IP アドレス
203.0.113.114
が割り当てられています。 - VM1 は
west-subnet
(us-west1
リージョン)内のゾーンus-west1-a
にあり、IP アドレス10.10.0.99
が割り当てられています。 - ルール C: 上り(内向き)許可のファイアウォール ルールのターゲットは、ネットワーク内のすべてのインスタンスです。このルールは、任意の IP アドレス(
0.0.0.0/0
)を送信元とするトラフィックに対して TCP ポート 80 に適用されます。- このルールについてはロギングが有効化されています。
- ルール D: 下り(外向き)拒否のファイアウォール ルールのターゲットは、ネットワーク内のすべてのインスタンスです。このルールは、宛先を任意の IP アドレス(
0.0.0.0/0
)とし、すべてのプロトコルに適用されます。- このルールについてもロギングが有効化されています。
次の gcloud
コマンドを使用して、ファイアウォール ルールを作成できます。
ルール C: すべてのインスタンスをターゲットに、任意の送信元のトラフィックに対して TCP 80 に適用する上り(内向き)許可ルール。
gcloud compute firewall-rules create rule-c \ --network example-net \ --action allow \ --direction ingress \ --rules tcp:80 \ --source-ranges 0.0.0.0/0 \ --priority 10 \ --enable-logging
ルール D: すべてのインスタンスをターゲットに、任意の宛先のトラフィックに対してすべてのプロトコルに適用する下り(外向き)拒否ルール。
gcloud compute firewall-rules create rule-d \ --network example-net \ --action deny \ --direction egress \ --rules all \ --destination-ranges 0.0.0.0/0 \ --priority 10 \ --enable-logging
IP アドレス 203.0.113.114
が割り当てられたシステムが、VM1 に TCP ポート 80 で接続しようとしているとします。この場合、次のようになります。
- VM1 が
203.0.113.114
からのトラフィックを受け入れると、VM1 の観点からルール C のログエントリが生成されます。 - Google Cloud ファイアウォール ルールはステートフルであるため、VM1 はルール D にかかわらず、受信リクエストに応答できます。受信したリクエストが許可されている場合、確立されたレスポンスを下り(外向き)ルールでブロックすることはできません。
- ルール D は適用されないため、ルール D が考慮されてログエントリが記録されることはありません。
次のようなファイアウォール ログレコードが生成されます。
フィールド | 値 |
---|---|
connection | src_ip=203.0.113.114 src_port=[EPHEMERAL_PORT] dest_ip=10.10.0.99 dest_port=80 protocol=6 |
disposition | ALLOWED |
rule_details | reference = "network:my-vpc/firewall:rule-c" priority = 10 action = ALLOW source_range = 0.0.0.0/0 ip_port_info = tcp:80 direction = ingress |
instance | project_id="example-proj" instance_name=VM1 region=us-west1 zone=us-west1-a |
vpc | project_id="example-proj" vpc_name=example-net subnetwork_name=west-subnet |
remote_location | continent country region city |
ファイアウォール ログ形式
仕様に従い、ロギングが有効化されているファイアウォール ルールが VM インスタンスへのトラフィックまたは VM インスタンスからのトラフィックに適用されるたびに、Cloud Logging 内にログエントリが作成されます。ログレコードは、Logging の LogEntry の JSON ペイロード フィールドに含まれます。
ログレコードには、各ログレコードのコアフィールドであるベース フィールドと、詳細情報を追加するメタデータ フィールドが含まれています。メタデータ フィールドを含めるかどうかを制御できます。省略すると、ストレージ費用の節約が可能です。
一部のログフィールドでは、フィールドでもある値がサポートされています。これらのフィールドには、所定のフィールドに複数のデータを含めることができます。たとえば、connection
フィールドは IpConnection
形式で、送信元と宛先の IP アドレスとポート、およびプロトコルが 1 つのフィールドに格納されます。これらのフィールドを次の表で説明します。
フィールド | 説明 | フィールド タイプ: 基本またはオプションのメタデータ |
---|---|---|
connection | IpConnection 送信元 IP アドレス、宛先 IP アドレス、送信元ポート、宛先ポート、この接続の IP プロトコルを記述する 5 タプル。 |
基本 |
disposition | string 接続が ALLOWED か DENIED かを示します。 |
基本 |
rule_details | RuleDetails この接続に適用されたルールの詳細。 |
|
rule.reference フィールド |
基本 | |
その他のルールの詳細フィールド | メタデータ | |
instance | InstanceDetails VM インスタンスの詳細。共有 VPC 構成の場合、 project_id はサービス プロジェクトの詳細に対応します。 |
メタデータ |
vpc | VpcDetails VPC ネットワークの詳細。共有 VPC 構成の場合、 project_id はホスト プロジェクトの詳細に対応します。 |
メタデータ |
remote_instance | InstanceDetails 接続のリモート エンドポイントが Compute Engine にある VM の場合、このフィールドには VM インスタンスの詳細が入力されます。 |
メタデータ |
remote_vpc | VpcDetails 接続のリモート エンドポイントが VPC ネットワーク内にある VM の場合、このフィールドにはネットワークの詳細が入力されます。 |
メタデータ |
remote_location | GeographicDetails 接続のリモート エンドポイントが VPC ネットワークの外部にある場合、このフィールドには使用可能なロケーション メタデータが入ります。 |
メタデータ |
IpConnection
フィールド | タイプ | 説明 |
---|---|---|
src_ip | 文字列 | 送信元 IP アドレス。送信元が Compute Engine VM の場合、src_ip はプライマリ内部 IP アドレスか、VM のネットワーク インターフェースのエイリアス IP 範囲のアドレスです。外部 IP アドレスは示されません。VM に対して TCP ダンプを実行した場合と同じように、Logging では VM がパケット ヘッダーで確認する VM の IP が示されます。 |
src_port | 整数 | 送信元ポート |
dest_ip | 文字列 | 宛先 IP アドレス。宛先が Google Cloud VM の場合、dest_ip はプライマリ内部 IP アドレスか、VM のネットワーク インターフェースのエイリアス IP 範囲のアドレスです。外部 IP アドレスは、接続に使用されていても表示されません。 |
dest_port | 整数 | 宛先ポート |
protocol | 整数 | 接続の IP プロトコル |
RuleDetails
フィールド | タイプ | 説明 |
---|---|---|
reference | 文字列 | ファイアウォール ルールへの参照。形式:"network:{network name}/firewall:{firewall_name}" |
priority | 整数 | ファイアウォール ルールの優先順位。 |
action | 文字列 | ALLOW または DENY |
source_range[ ] | 文字列 | ファイアウォール ルールが適用される送信元範囲のリスト。 |
destination_range[ ] | 文字列 | ファイアウォール ルールが適用される宛先範囲のリスト。 |
ip_port_info[ ] | IpPortDetails | ルールが適用される IP プロトコルと該当するポート範囲のリスト。 |
direction | 文字列 | ファイアウォール ルールが適用される方向。 |
source_tag[ ] | 文字列 | ファイアウォール ルールが適用されるすべてのソースタグのリスト。 |
target_tag[ ] | 文字列 | ファイアウォール ルールが適用されるすべてのターゲットタグのリスト。 |
source_service_account[ ] | 文字列 | ファイアウォール ルールが適用されるすべてのソースサービス アカウントのリスト。 |
target_service_account[ ] | 文字列 | ファイアウォール ルールが適用されるすべてのターゲット サービス アカウントのリスト。 |
source_region_code[ ] | 文字列 | ファイアウォール ルールが適用されるすべての送信元ドメイン名のリスト。 |
destination_region_code[ ] | 文字列 | ファイアウォール ルールが適用されるすべての宛先ドメイン名のリスト。 |
source_fqdn[ ] | 文字列 | ファイアウォール ルールが適用されるすべての送信元の国コードのリスト。 |
destination_fqdn[ ] | 文字列 | ファイアウォール ルールが適用されるすべての宛先の国コードのリスト。 |
IpPortDetails
フィールド | タイプ | 説明 |
---|---|---|
ip_protocol | 文字列 | ファイアウォール ルールが適用される IP プロトコル。すべてのプロトコルに適用される場合は「ALL」となります。 |
port_range[ ] | 文字列 | ルールが適用されるポート範囲のリスト。例: 8080-9090 |
InstanceDetails
フィールド | タイプ | 説明 |
---|---|---|
project_id | 文字列 | VM を含むプロジェクトの ID |
vm_name | 文字列 | VM のインスタンス名 |
region | 文字列 | VM のリージョン |
zone | 文字列 | VM のゾーン |
VpcDetails
フィールド | タイプ | 説明 |
---|---|---|
project_id | 文字列 | ネットワークを含むプロジェクトの ID |
vpc_name | 文字列 | VM が動作しているネットワーク |
subnetwork_name | 文字列 | VM が動作しているサブネット |
GeographicDetails
フィールド | タイプ | 説明 |
---|---|---|
continent | 文字列 | 外部エンドポイントの大陸 |
country | 文字列 | 外部エンドポイントの国 |
region | 文字列 | 外部エンドポイントのリージョン |
city | 文字列 | 外部エンドポイントの都市 |
次のステップ
- ファイアウォール ルール ロギングを使用するを参照して、ロギングを設定してログを表示する。
- Cloud Logging で、ログデータやイベントの保存、検索、分析、モニタリング、通知の方法を確認する。
- シンクの構成と管理で、ログエントリのルーティング方法を確認する。