ファイアウォール ルール ロギングの使用

ファイアウォール ルール ロギングを使用すると、ファイアウォール ルールの効果を監査、検証、分析できます。たとえば、トラフィックを拒否するように設計されたファイアウォール ルールが意図したとおりに機能しているかどうかを判別できます。ファイアウォール ルール ロギングは、特定のファイアウォール ルールによって影響を受ける接続数を判別する必要がある場合にも役立ちます。

このページでは、ロギングを有効化および無効化する方法と、生成されたログを表示する方法を説明します。記録される内容、ロギングの例、およびログ形式の詳細については、ファイアウォール ルール ロギングの概要をご覧ください。

権限

ファイアウォール ルールの変更や、ログへのアクセスを行うには、IAM メンバーに次のいずれかの役割が割り当てられている必要があります。

タスク 必要な役割
ファイアウォール ルールの作成、削除、または更新 プロジェクトのオーナーまたは編集者、あるいはセキュリティ管理者
ログの表示 プロジェクトのオーナー、編集者、閲覧者 または ログ閲覧者
Logging IAM の役割の詳細については Logging アクセス制御ガイドをご覧ください。

ファイアウォール ルール ロギングの有効化と無効化

ファイアウォール ルールを作成する際に、ファイアウォール ルール ロギングを有効にするかどうかを選択できます。詳細については、ファイアウォール ルールを作成するをご覧ください。

既存のファイアウォール ルールに対してファイアウォール ルール ロギングを有効化または無効化する場合は、以下の手順に沿って行います。

ファイアウォール ルール ロギングを有効化する

Console

  1. Google Cloud Console の [ファイアウォール ルール] ページに移動します。
    [ファイアウォール ルール] ページに移動
  2. 更新するファイアウォール ルールを選択します。
  3. [編集] をクリックします。
  4. [ログ] 設定で、[オン] を選択します。
  5. [保存] をクリックします。

gcloud

    gcloud compute firewall-rules update NAME \
        --enable-logging
    

API

既存のファイアウォール ルールに対してロギングを有効にします。

    PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/RULE_NAME
    {
      "name": "RULE_NAME,
      "logConfig": {
        "enable": true
      }
    }
    

プレースホルダを有効な値に置き換えます。

  • [PROJECT_ID] は、ファイアウォール ルールが配置されているプロジェクトの ID です。
  • [RULE_NAME] は、ファイアウォール ルールの名前です。

詳細については、firewalls.patch メソッドをご覧ください。

ファイアウォール ルール ロギングを無効化する

Console

  1. Google Cloud Console の [ファイアウォール ルール] ページに移動します。
    [ファイアウォール ルール] ページに移動
  2. 更新するファイアウォール ルールを選択します。
  3. [編集] をクリックします。
  4. [ログ] 設定で、[オフ] を選択します。
  5. [保存] をクリックします。

gcloud

    gcloud compute firewall-rules update NAME \
        --no-enable-logging
    

API

既存のファイアウォール ルールに対してロギングを有効にします。

    PATCH https://www.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 ネットワークを使用します。ファイアウォール ルールのログは、そのホスト プロジェクト内に保管されます。

ファイアウォール ルールのログを表示するには、Cloud Console の [ログ] セクションを使用します。

以下の高度な Logging フィルタは、特定のファイアウォール イベントを検索する方法を示しています。各フィルタで、[PROJECT_ID] を実際のプロジェクト ID に置き換えてください。

すべてのファイアウォール ログ

    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall"
    

特定のサブネット

    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall"
    resource.labels.subnetwork_name="SUBNET_NAME"
    

[SUBNET_NAME] を特定のサブネットの名前に置き換えます。

特定の VM

    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall"
    jsonPayload.instance.vm_name="INSTANCE_NAME"
    

[INSTANCE_NAME] を、特定の VM インスタンスの名前に置き換えます。

特定の国からの接続

    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall"
    jsonPayload.remote_location.country=COUNTRY
    

COUNTRYISO 3166-1 alpha-3 コードです。

ログのエクスポート

ファイアウォール ルールのログをエクスポートする場合は、ログビューアによるエクスポートの手順に沿って行います。

高度なフィルタの例を使用して、エクスポートするログを絞り込むことができます。

相互作用の表

  • 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 分ごとに繰り返しログに記録されます。

トラブルシューティング

ログを表示できない

Cloud Console の [ログ] セクションでファイアウォール ルールのログを表示できない場合は、次の点を確認してください。

考えられる原因: 十分な権限がありません

プロジェクトに対する役割として、少なくともログ閲覧者の役割を IAM メンバーに割り当てるよう、プロジェクト オーナーに依頼します。詳細については、権限をご覧ください。
考えられる原因: サブネットワーク ログが Logging から除外されている可能性があります
Cloud Console で、[Logging] > [ログの取り込み] に移動し、GCE サブネットワーク除外されていないことを確認します。一部が除外されている場合は、除外フィルタがファイアウォール ログに適用されていないことを確認します。
考えられる原因: レガシーネットワークがサポートされていない
レガシー ネットワークではファイアウォール ルールのロギングを使用できません。サポートされているのは VPC ネットワークのみです。
考えられる原因: プロジェクトが正しいことを確認してください
ファイアウォール ルールのログは、対象のネットワークが含まれるプロジェクトで保管されるため、正しいプロジェクトでログを検索していることを確認してください。共有 VPC では、VM インスタンスはサービス プロジェクト内で作成されますが、これらのインスタンスはホスト プロジェクト内にある共有 VPC ネットワークを使用します。共有 VPC のシナリオでは、ファイアウォール ルールのログはそのホスト プロジェクトに保管されます。

共有 VPC が関係する場合、ファイアウォール ルールのログを表示するには、ホスト プロジェクトに対する適切な権限が必要です。VM インスタンス自体はサービス プロジェクト内にありますが、VM インスタンスのファイアウォール ルールのログはホスト プロジェクト内で保管されます。

ログエントリが見つからない

考えられる原因: 接続が、期待するファイアウォール ルールに一致していない可能性があります

期待するファイアウォール ルールが、インスタンスに適用されるファイアウォール ルールのリストに含まれていることを確認してください。Cloud Console を使用して該当するインスタンスの詳細を表示するには、[VM インスタンスの詳細] ページにある [ネットワーク インターフェース] セクションで、[詳細を表示] ボタンをクリックします。これによって表示される [ネットワーク インターフェースの詳細] ページの [ファイアウォール ルールとルートの詳細] セクションで、該当するファイアウォール ルールを調べます。

ファイアウォール ルールを正しく作成したことを確認するには、ファイアウォール ルールの概要を確認してください。

VM に対して tcpdump を使用すると、VM がトラフィックを送信または受信している接続のアドレス、ポート、プロトコルが、期待するファイアウォールに一致するかどうかを判別できます。

考えられる原因: 期待するファイアウォール ルールよりも優先順位が高く、ファイアウォール ルール ロギングが無効化されているルールが適用されている可能性があります

ファイアウォール ルールは優先順位に従って評価されます。VM インスタンスの観点からは、トラフィックには 1 つのファイアウォール ルールだけが適用されます。

最も高い優先順位で適用されると思われるルールが、実際にはそうでない場合もあります。その場合、それよりも優先順位が高い、ロギングが有効化されていないルールが適用される可能性があります。

トラブルシューティングを行うには、VM に適用される可能性のあるすべのファイアウォール ルールのロギングを一時的に有効にします。Cloud Console を使用して該当する VM の詳細を表示するには、[VM インスタンスの詳細] ページにある [ネットワーク インターフェース] セクションで、[詳細を表示] ボタンをクリックします。これによって表示される [ネットワーク インターフェースの詳細] ページの [ファイアウォール ルールとルートの詳細] セクションで、適用されるファイアウォール ルールを調べ、リスト内でカスタムルールを特定します。それらのカスタム ファイアウォール ルールのすべてに対し、一時的にロギングを有効化します。

ロギングを有効化することで、適用されているルールを識別できます。識別した後は、実際にはロギングを必要としないすべてのルールについて、必ずロギングを無効化してください。

ログエントリの一部にメタデータが欠落している

考えられる原因: 構成の反映遅延

ファイアウォール ロギングが有効化されているファイアウォール ルールを更新した場合、Google Cloud がその変更を反映し終わるまでに数分かかる場合があります。それまでは、そのルールで更新されたコンポーネントに一致するトラフィックは、ログに記録されません。

次のステップ

  • Logging のドキュメント表示
  • Logging のドキュメントを表示