ファイアウォール ルールロギングの使用
ファイアウォール ルールロギングを使用すると、ファイアウォール ルールの効果を監査、検証、分析できます。たとえば、トラフィックを拒否するように設計されたファイアウォール ルールが意図したとおりに機能しているかどうかを判別できます。ファイアウォール ルールロギングは、特定のファイアウォール ルールによって影響を受ける接続数を判別する必要がある場合にも役立ちます。
このページでは、VPC ファイアウォール ルールのロギングを有効または無効にする方法について説明します。ファイアウォール ポリシールールのロギングの手順については、該当するドキュメントをご覧ください。
また、生成されたログを表示する方法についても説明します。記録される内容、ロギングの例、ログ形式の詳細については、ファイアウォール ルールロギングの概要をご覧ください。
ファイアウォール ルールのロギングを有効にすると、ファイアウォール インサイトからその分析情報と推奨事項を表示できます。詳細については、Network Intelligence Center のドキュメントのファイアウォール インサイトをご覧ください。
権限
ファイアウォール ルールの変更や、ログへのアクセスを行うには、IAM プリンシパルに次のいずれかのロールが割り当てられている必要があります。
タスク | 必要な役割 |
---|---|
ファイアウォール ルールの作成、削除、または更新 | プロジェクトのオーナーまたは編集者、あるいはセキュリティ管理者 |
ログの表示 | プロジェクトのオーナー、編集者、閲覧者またはログ閲覧者
Logging IAM のロールの詳細については Logging アクセス制御ガイドをご覧ください。 |
ファイアウォール ルールロギングの有効化と無効化
ファイアウォール ルールを作成する際に、ファイアウォール ルール ロギングを有効にするかどうかを選択できます。詳細については、ファイアウォール ルールを作成するをご覧ください。
既存のファイアウォール ルールに対してファイアウォール ルールロギングを有効化または無効化する場合は、以下の手順に沿って行います。ロギングを有効にする際には、メタデータ フィールドを含めるかどうかを制御できます。省略すると、ストレージ費用の節約が可能です。
ファイアウォール ルールロギングを有効化する
コンソール
- Google Cloud Console の [ファイアウォール] ページに移動します。
[ファイアウォール] ページに移動 - [ログ] 列で、各ファイアウォール ルールのファイアウォール ロギングがオンかオフかを確認します。
- 1 つ以上のファイアウォール ルールのロギングを有効にするには、各ルールの横にあるチェックボックスをオンにします。
- [ファイアウォール ルール] アクションバーで [ログを構成] をクリックします。
- [ログを構成] ダイアログで [オン] を選択します。
- メタデータ フィールドを省略するには、[ログの詳細] を展開して [メタデータを含める] をオフにします。
- [構成を保存] をクリックします。
gcloud
gcloud compute firewall-rules update NAME \ --enable-logging --logging-metadata=LOGGING_METADATA
プレースホルダを有効な値に置き換えます。
NAME
は、ファイアウォール ルールの名前です。LOGGING_METADATA
は、ファイアウォール ルールロギングについて、ファイアウォール ルールのログにメタデータ フィールドを含めるかどうかを指定します。このフィールドは、ロギングが有効になっている場合にのみ構成できます。値はexclude-all
またはinclude-all
にする必要があります。デフォルトでは、メタデータ フィールドが含まれます。
詳細については、SDK リファレンス ドキュメントをご覧ください。
API
既存のファイアウォール ルールに対してロギングを有効にします。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/RULE_NAME { "name": "RULE_NAME, "logConfig": { "enable": true, "metadata": LOGGING_METADATA } }
プレースホルダを有効な値に置き換えます。
PROJECT_ID
は、ファイアウォール ルールが配置されているプロジェクトの ID です。RULE_NAME
は、ファイアウォール ルールの名前です。LOGGING_METADATA
は、ファイアウォール ルールロギングについて、ファイアウォール ルールのログにメタデータ フィールドを含めるかどうかを指定します。このフィールドは、ロギングが有効になっている場合にのみ構成できます。値はexclude-all
またはinclude-all
にする必要があります。デフォルトでは、メタデータ フィールドが含まれます。
詳細については、firewalls.patch
メソッドをご覧ください。
Terraform
Terraform リソースを使用して、ロギングを有効にしたファイアウォール ルールを作成できます。
ファイアウォール ルールロギングを無効化する
コンソール
- Google Cloud Console の [ファイアウォール] ページに移動します。
[ファイアウォール] ページに移動 - [ログ] 列で、各ファイアウォール ルールのファイアウォール ロギングがオンかオフかを確認します。
- 1 つ以上のファイアウォール ルールのロギングを無効にするには、各ルールの横にあるチェックボックスをオンにします。
- [ファイアウォール ルール] アクションバーで [ログを構成] をクリックします。
- [ログを構成] ダイアログで [オフ] を選択し、[構成を保存] をクリックします。
gcloud
gcloud compute firewall-rules update NAME \ --no-enable-logging
API
既存のファイアウォール ルールに対してロギングを有効にします。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/RULE_NAME { "name": "RULE_NAME, "logConfig": { "enable": false } }
プレースホルダを有効な値に置き換えます。
PROJECT_ID
は、ファイアウォール ルールが配置されているプロジェクトの ID です。RULE_NAME
は、ファイアウォール ルールの名前です。
詳細については、firewalls.patch
メソッドをご覧ください。
ログの表示
ファイアウォール ルールのログは、VM インスタンスとファイアウォール ルールが含まれるネットワークをホストしているプロジェクト内で作成されます。共有 VPC では、VM インスタンスはサービス プロジェクト内で作成されますが、これらのインスタンスはホスト プロジェクト内にある共有 VPC ネットワークを使用します。ファイアウォール ルールのログは、そのホスト プロジェクト内に保管されます。
ファイアウォール ルールのログを表示するには、Google Cloud Console の [ログ] セクションを使用します。
次のフィルタは、特定のファイアウォール イベントを検索する方法を示しています。
すべてのファイアウォール ログ
- Google Cloud コンソールのログ エクスプローラに移動します。
ログ エクスプローラに移動 - 最初のプルダウン メニューで [サブネットワーク] を選択します。
- 2 番目のプルダウン メニューで、compute.googleapis.com/firewall を選択します。
- [OK] をクリックします。
または
- Google Cloud コンソールのログ エクスプローラに移動します。
ログ エクスプローラに移動 - [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
- フィールドに以下を貼り付けます。
PROJECT_ID
は実際のプロジェクト ID に置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall"
特定のサブネット
- Google Cloud コンソールのログ エクスプローラに移動します。
ログ エクスプローラに移動 - 最初のプルダウン メニューでカーソルを [サブネットワーク] に移します。カーソルをさらに右側に進めてそれぞれのサブネット選択メニューを開きます。
- 2 番目のプルダウン メニューで、compute.googleapis.com/firewall を選択します。
- [OK] をクリックします。
または
- Google Cloud コンソールのログ エクスプローラに移動します。
ログ エクスプローラに移動 - [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
- フィールドに以下を貼り付けます。
PROJECT_ID
をプロジェクト ID に、SUBNET_NAME
をサブネットワークに置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall" resource.labels.subnetwork_name="SUBNET_NAME"
特定の VM
- Google Cloud コンソールのログ エクスプローラに移動します。
ログ エクスプローラに移動 - [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
- フィールドに以下を貼り付けます。
PROJECT_ID
をプロジェクト ID に、INSTANCE_NAME
を VM に置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall" jsonPayload.instance.vm_name="INSTANCE_NAME"
特定の国からの接続
- Google Cloud コンソールのログ エクスプローラに移動します。
ログ エクスプローラに移動 - [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
- フィールドに以下を貼り付けます。
PROJECT_ID
は実際のプロジェクト ID に、COUNTRY
は ISO 3166-1 alpha-3 コードに置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall" jsonPayload.remote_location.country=COUNTRY
ログのエクスポート
ファイアウォール ルールのログをエクスポートする場合は、ログビューアによるエクスポートの手順に沿って行います。
高度なフィルタの例を使用して、エクスポートするログを絞り込むことができます。
相互作用の表
- VM 間通信の場合、それぞれに適用されているファイアウォール ルールによっては、両方の VM がログレコードを生成することもあります。
- 最初のパケットがファイアウォールで許可された場合、ログに記録される接続には双方向に流れるパケットが含まれます。
- 特定の VM への受信接続は、その VM 上に構成されているファイアウォール ルールと照合されます。また、特定の VM からの発信接続は、その VM 上に構成されている下りファイアウォール ルールと照合されます。
- 「許可してログに記録」するように指定しているファイアウォール ルールに一致して許可された接続は、一度だけログに記録されます。接続が維持されたとしても、ログエントリが 5 秒ごとに繰り返し記録されることはありません。
- 「拒否してログに記録」するように指定しているファイアウォール ルールに一致して拒否された接続は、その拒否対象の接続でパケットが観測される限り、5 秒ごとに繰り返しログに記録されます。
この表は、単一の VM の観点からのファイアウォールのロギング動作を示しています。
VM1 の上りルール R1 がパケットを照合し、下りルール R2 でもパケットを照合するというシナリオでは、ファイアウォールのロギング動作は次のようになります。
VM1 の上り(内向き)ルール R1(パケットを照合) | VM1 の下り(外向き)ルール R2(パケットを照合) | 接続方向 | 操作 | ログ |
---|---|---|---|---|
許可してログに記録 | 許可 | 上り | 許可 | 1 つのログエントリ: disposition=allow, rule=R1 |
拒否 | ||||
許可してログに記録 | ||||
拒否してログに記録 | ||||
許可 | 許可 | 上り | 許可 | ロギングなし |
拒否 | ||||
許可してログに記録 | ||||
拒否してログに記録 | ||||
拒否してログに記録 | 該当なし | 上り | 拒否 | 5 秒ごとに 1 つのログエントリ: disposition=deny, rule=R1 |
拒否 | 該当なし | 上り | 拒否 | ロギングなし |
許可 | 許可してログに記録 | 下り | 許可 | 1 つのログエントリ: disposition=allow, rule=R2 |
拒否 | ||||
許可してログに記録 | ||||
拒否してログに記録 | ||||
許可 | 許可 | 下り | 許可 | ロギングなし |
拒否 | ||||
許可してログに記録 | ||||
拒否してログに記録 | ||||
該当なし | 拒否してログに記録 | 下り | 拒否 | 5 秒ごとに 1 つのログエントリ: disposition=deny, rule=R2 |
該当なし | 拒否 | 下り | 拒否 | ロギングなし |
上りと下りは対称であるので注意してください。
以下に、ファイアウォール ログのセマンティックについて詳しく説明します。
許可してログに記録(ロギングは TCP と UDP でのみサポートされます)
- ルールが適用される方向で接続が開始されると、1 つのログレコードが作成されます。
- 接続トラッキングにより、応答トラフィックは許可されます。該当する方向に適用されるファイアウォール ルールに関係なく、応答トラフィックによってロギングが行われることはありません。
- ファイアウォールにより接続が失効すると(10 分間にわたり非アクティブであるか、TCP RST を受信した場合)、いずれかの方向での別のパケットによってロギングがトリガーされる場合があります。
- ロギングは 5 タプルに基づきます。TCP フラグはロギング動作に影響を与えません。
拒否してログに記録(ロギングは TCP と UDP でのみサポートされます)
- パケットはドロップされます(接続は開始されません)。
- 一意の 5 タプルに対応する各パケットが、失敗した接続試行としてログに記録されます。
- 引き続きパケットを受信する場合、同じ 5 タプルが 5 分ごとに繰り返しログに記録されます。
トラブルシューティング
ログを表示できない
Google Cloud Console の [ログ] セクションでファイアウォール ルールのログを表示できない場合は、次の点を確認してください。
考えられる原因: 十分な権限がありません
プロジェクトに対して、少なくともログ閲覧者のロールを IAM プリンシパルに割り当てるよう、プロジェクト オーナーに依頼します。詳細については、権限をご覧ください。考えられる原因: サブネットワーク ログが Logging から除外されている可能性があります
Google Cloud Console で、[ロギング] > [Logs ingestion] に移動し、GCE サブネットワークが除外されていないことを確認します。一部が除外されている場合は、除外フィルタがファイアウォール ログに適用されていないことを確認します。考えられる原因: レガシーネットワークがサポートされていない
レガシー ネットワークではファイアウォール ルールのロギングを使用できません。サポートされているのは VPC ネットワークのみです。考えられる原因: プロジェクトが正しいことを確認してください
ファイアウォール ルールのログは、対象のネットワークが含まれるプロジェクトで保管されるため、正しいプロジェクトでログを検索していることを確認してください。共有 VPC では、VM インスタンスはサービス プロジェクト内で作成されますが、これらのインスタンスはホスト プロジェクト内にある共有 VPC ネットワークを使用します。共有 VPC のシナリオでは、ファイアウォール ルールのログはそのホスト プロジェクトに保管されます。共有 VPC が関係する場合、ファイアウォール ルールのログを表示するには、ホスト プロジェクトに対する適切な権限が必要です。VM インスタンス自体はサービス プロジェクト内にありますが、VM インスタンスのファイアウォール ルールのログはホスト プロジェクト内で保管されます。
ログエントリが見つからない
考えられる原因: 接続が、期待するファイアウォール ルールに一致していない可能性があります
期待するファイアウォール ルールが、インスタンスに適用されるファイアウォール ルールのリストに含まれていることを確認してください。Google Cloud Console を使用して該当するインスタンスの詳細を表示し、次に、VM インスタンスの詳細ページにあるネットワーク インターフェースセクションの詳細を表示するボタンをクリックします。これによって表示される [ネットワーク インターフェースの詳細] ページの [ファイアウォール ルールとルートの詳細] セクションで、該当するファイアウォール ルールを調べます。ファイアウォール ルールを正しく作成したことを確認するには、ファイアウォール ルールの概要を確認してください。
VM に対して tcpdump を使用すると、VM がトラフィックを送信または受信している接続のアドレス、ポート、プロトコルが、期待するファイアウォールに一致するかどうかを判別できます。
考えられる原因: 期待するファイアウォール ルールよりも優先順位が高く、ファイアウォール ルールロギングが無効化されているルールが適用されている可能性があります
ファイアウォール ルールは優先順位に従って評価されます。VM インスタンスの観点からは、トラフィックには 1 つのファイアウォール ルールだけが適用されます。最も高い優先順位で適用されると思われるルールが、実際にはそうでない場合もあります。その場合、それよりも優先順位が高い、ロギングが有効化されていないルールが適用される可能性があります。
トラブルシューティングを行うには、VM に適用される可能性のあるすべてのファイアウォール ルールのロギングを一時的に有効にします。Google Cloud Console を使用して該当する VM の詳細を表示し、次に、VM インスタンスの詳細ページにあるネットワーク インターフェースセクションの詳細を表示するボタンをクリックします。これによって表示される [ネットワーク インターフェースの詳細] ページの [ファイアウォール ルールとルートの詳細] セクションで、適用されるファイアウォール ルールを調べ、リスト内でカスタムルールを特定します。それらのカスタム ファイアウォール ルールのすべてに対し、一時的にロギングを有効化します。
ロギングを有効化することで、適用されているルールを識別できます。識別した後は、実際にはロギングを必要としないすべてのルールについて、必ずロギングを無効化してください。
ログエントリの一部にメタデータが欠落している
考えられる原因: 構成の伝搬遅延
ファイアウォール ロギングが有効化されているファイアウォール ルールを更新した場合、Google Cloud がその変更を反映し終わるまでに数分かかる場合があります。それまでは、そのルールで更新されたコンポーネントに一致するトラフィックは、ログに記録されません。
次のステップ
- Logging のドキュメントを参照する
- Logging でのエクスポートのドキュメントを参照する