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

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

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

権限

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

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

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

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

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

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

Console

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

gcloud

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

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

Console

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

gcloud

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

ログの表示

ファイアウォール ルールのログは、VM インスタンスとファイアウォール ルールが含まれるネットワークをホストしているプロジェクト内で作成されます。共有 VPC では、VM インスタンスはサービス プロジェクト内で作成されますが、これらのインスタンスはホスト プロジェクト内にある共有 VPC ネットワークを使用します。ファイアウォール ルールのログは、そのホスト プロジェクト内に保管されます。

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

以下の高度な Stackdriver フィルタは、特定のファイアウォール イベントを検索する方法を示しています。各フィルタでは、[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]

[COUNTRY] は、ISO 3166-1 alpha-3 コードです。

ログのエクスポート

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

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

相互作用の表

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

トラブルシューティング

ログを表示できない

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

考えられる原因: 構成の伝搬遅延

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

次のステップ

このページは役立ちましたか?評価をお願いいたします。