【実務・中級編】 VPCファイアウォールルールのロギング機能とログ解析 – クラウドインフラと仮想化ネットワーク実践ガイド

「なぜ弾かれた?」を即断する:GCP VPCファイアウォールログの極意

ネットワークエンジニアにとって、一番の悪夢は「何が起きているか分からない」状態です。特にGCP(Google Cloud)のVPCファイアウォールで通信が遮断されたとき、ログを正しく読み解けるかどうかで、障害復旧までの時間は雲泥の差が出ます。

今回は、公式ドキュメントの奥底に眠っている「VPCファイアウォールログ」の真の活用法と、現場で必ず使うべき解析の勘所を伝授します。

—

1. VPCファイアウォールログは「究極のブラックボックス」を解明する鍵

VPCファイアウォールルールは、いわばクラウド環境の「検問所」です。デフォルトではログが無効化されていますが、本番環境でこれをオフにしているのは、目隠しをして高速道路を走るようなものです。

まずは、ログを有効化する際の鉄則から。すべてのルールでログを出すとコストが跳ね上がります。「許可(Allow)」のログは監査用にサンプリングしつつ、「拒否(Deny)」のログは全量取得するのが、SREとしての定石です。

ログを有効化する設定(gcloudコマンド)

# 特定の拒否ルールに対してログ出力を有効化する例
gcloud compute firewall-rules update [ルール名] \
    --enable-logging \
    --project [プロジェクトID]

—

2. ログの中身を解剖する:パケットの「身元」を特定する

ファイアウォールログがCloud Logging(旧Stackdriver)に吐き出されるとき、そこにはパケットの指紋とも言えるメタデータが詰め込まれています。

特に注目すべきは以下のフィールドです。

  • connection.src_ip / connection.dest_ip: 通信の起点と終点。これがNATゲートウェイを通っている場合は、期待したIPか確認が必要です。
  • connection.src_port / connection.dest_port: 特にEphemeralポートの枯渇や、期待しないポートへのアクセスを検知します。
  • disposition: DENY か ALLOW か。これがすべてを物語ります。
  • matched_rule: どのルールにヒットしたか。「意図しないルール」に先制攻撃されていないかを確認するのがトラブルシューティングの第一歩です。

—

3. 実践:ログを用いたデバッグのフロー

Web APIで「なぜか特定のクライアントから接続できない」という事象が発生したとしましょう。

手順1: ログを絞り込むクエリ(Log Explorer)

まずは以下のクエリで、拒否されたパケットを炙り出します。

# 拒否された通信だけを抽出し、時間軸でソート
resource.type="gce_subnetwork"
jsonPayload.disposition="DENY"

手順2: Pythonで自動解析(Cloud Logging API)

手動で検索するのも良いですが、頻発する拒否ログを自動検知してアラートを飛ばすPythonスクリプトの断片を紹介します。

from google.cloud import logging_v2

def check_firewall_denials(project_id):
    client = logging_v2.LoggingServiceV2Client()
    # フィルタリング条件(拒否されたパケットのみ)
    filter_str = 'resource.type="gce_subnetwork" AND jsonPayload.disposition="DENY"'
    
    # ログエントリを取得
    entries = client.list_log_entries(
        resource_names=[f"projects/{project_id}"],
        filter_=filter_str
    )
    
    for entry in entries:
        payload = entry.json_payload
        print(f"拒否発生: {payload['connection']['src_ip']} -> {payload['connection']['dest_ip']}")
        print(f"ヒットしたルール: {payload['matched_rule']['rule_id']}")

—

4. 現場で役立つ「罠」とTips

優先順位(Priority)を疑え

GCPのファイアウォールは、数値が小さい方が優先度が高いという仕様です。意外と多いのが、「あとから追加した許可ルールが、既存の拒否ルールよりも優先度が低く、永遠に適用されない」というケースです。ログを確認する際は、matched_rule.priority を必ずチェックしてください。

コンテナネットワーク(GKE)の盲点

GKEを利用している場合、firewall-rulesだけでなく、NetworkPolicyも関わってきます。ファイアウォールのログに何も出ていないのに通信が通らない場合は、Kubernetesレイヤーでの制御(Calicoなどによるポリシー)を疑う必要があります。

監査ログとファイアウォールログを混同するな

  • ファイアウォールログ: パケットごとの許可/拒否の結果。
  • 監査ログ (Admin Activity): 「誰がルールを書き換えたか」という操作ログ。

セキュリティ事故の調査では、この2つを組み合わせて「誰が、いつ、どのルールを弄り、その結果どの通信が遮断されたか」という相関関係を突き止めるのが、プロの仕事です。

—

まとめ:ネットワークは「観測」から始まる

クラウドインフラにおいて、ネットワークは目に見えない空気のようなものです。しかし、ログという「観測機器」を正しく設定すれば、そこには極めて論理的で美しい通信フローが浮かび上がります。

「接続できない」と相談されたら、まずは焦って再起動する前に、Cloud Loggingを開いてください。パケットは必ず何らかの証拠を残しています。その証拠を読み解く力こそが、SREとしてのあなたの武器になるはずです。

次回は、これらを応用した「VPCフローログによるコスト最適化と不正アクセス検知」について深掘りしていきましょう。それでは、良いインフラライフを!

コメント

タイトルとURLをコピーしました