VPC フローログの使用

VPC フローログには、VM インスタンスによって送受信されたネットワーク フローのサンプルが記録されます。これには GKE ノードとして使用されるインスタンスも含まれます。これらのログは、ネットワーク モニタリング、フォレンジック、リアルタイム セキュリティ分析、および費用の最適化に使用できます。

フローログは Cloud Logging で表示でき、Cloud Logging のエクスポート先としてサポートされている任意の宛先にエクスポートできます。

フローログは、Compute Engine VM からの接続ごとに集計され、リアルタイムでエクスポートされます。Pub/Sub に登録すると、リアルタイム ストリーミングの API を使用してフローログを分析できます。

基本特性

  • VPC サブネットごとに VPC フローログを有効または無効にできます。サブネットに対して有効になっている場合、VPC フローログはそのサブネット内のすべての VM インスタンスからデータを収集します。
  • VM は、すべての TCP フローと UDP フローについて報告します。各フローレコードには、レコードの形式セクションで説明されている情報が含まれます。
  • 各 VM は、検出されたインバウンドとアウトバウンドの TCP フローと UDP フローをサンプリングします。これは、そのフローが、別の VM、オンプレミス データセンターのホスト、Google サービス、インターネット上のホストのどれに対して送受信されているかにかかわらず行われます。通信している 2 つの GCP VM の両方が、VPC フローログが有効になっているサブネットにある場合、両方の VM によってフローが報告されます。
  • フィルタを使用して、特定のフローログを Logging の対象から除外することや、フローログを絞り込んで外部 API にエクスポートすることができます。
  • VPC フローログは、VPC ネットワーク インフラストラクチャのネットワーキング スタックにネイティブで組み込まれています。記録対象である IP パケットの宛先へのルーティングでは、余分な遅延やパフォーマンスの低下は発生しません。

使用例

ネットワーク モニタリング

VPC フローログを使用すると、ネットワークのスループットとパフォーマンスをリアルタイムで把握できます。以下を実現できます。

  • VPC ネットワークをモニタリングする
  • ネットワーク診断を実行する
  • VM とアプリケーションによりフローログをフィルタ処理して、トラフィックの変化を理解する
  • トラフィックの増加を把握し、キャパシティの予測に役立てる

ネットワーク使用方法の理解とネットワーク トラフィック費用の最適化

VPC フローログを使用すると、ネットワーク使用量を分析できます。ネットワーク フローを分析して次のことを把握できます。

  • リージョンとゾーンの間のトラフィック
  • インターネットでの特定の国へのトラフィック
  • トラフィック使用量が特に多いプロセス

分析を基にして、ネットワーク トラフィックの費用を最適化できます。

ネットワーク フォレンジック

VPC フローログをネットワーク フォレンジックに利用できます。たとえば、インシデントが発生した場合、以下を調べることができます。

  • どの IP が、いつ、どの相手と情報をやり取りしたか
  • 不正使用された IP(すべての受信と送信のネットワーク フローを分析して調査)

リアルタイムのセキュリティ分析

リアルタイム ストリーミングの API を(Pub/Sub 経由で)利用し、SIEM(Security Information and Event Management)システムと統合できます。これにより、リアルタイムのモニタリング、イベントの相関、分析、およびセキュリティ アラートを提供できます。

ログの収集

フローログは特定の間隔で各 VM 接続に関して収集されます。特定の接続について特定の間隔で収集されたすべてのパケットは、一定期間(集計間隔)で単一のフローログ エントリに集計されます。このデータは Logging に送信されます。

ログは Logging に 30 日間保存されます。それより長く保持するには、サポートされている宛先にエクスポートする必要があります。

ログのサンプリングと処理

Google Cloud は、VM で送受信されたパケットをサンプリングして、フローログを生成します。すべてのパケットが独自のログレコードに収集されるとは限りません。10 パケットごとに約 1 パケットがキャプチャされますが、このサンプリング レートは VM の負荷に応じて低くなることもあります。このレートは調整できません。

Google Cloud で生成されたフローログは、次の手順で処理されます。

  1. 集計: サンプリングされたパケットの情報が、ユーザーが構成可能な集計間隔で集計され、フローログ エントリが生成されます。
  2. フローログのサンプリング: これは 2 番目のサンプリング処理です。ユーザーが構成可能なサンプルレートのパラメータに従って、フローログのエントリがさらにサンプリングされます。
  3. メタデータ: 有効にするとメタデータ アノテーションが追加されます。
  4. Logging への書き込み: 最終的なログエントリが Cloud Logging に書き込まれます。

Google Cloud ではすべてのパケットをキャプチャしませんが、ログレコードのキャプチャは非常に大きくなる可能性があります。ログ収集の以下の側面を調整することで、トラフィックの可視性とストレージ費用のニーズのバランスをとることができます。

  • 集計間隔: 一定の時間間隔でサンプリングされたパケットは、単一のログエントリに集計されます。この時間間隔は、5 秒(デフォルト)、30 秒、1 分、5 分、10 分、15 分から選択できます。
  • サンプルレート: データベースに書き込む前に、ログの数をサンプリングして減らすことができます。デフォルトでは、ログエントリのボリュームが 0.50(50%)に縮小されます。つまり、エントリの半分が保持されます。このサンプルレートは 1.0(100%、すべてのログエントリを保持)から 0.0(0%、ログを保持しない)の範囲で設定できます。
  • メタデータ アノテーション: デフォルトでは、フローログ エントリには、送信元と宛先の VM の名前や、外部の送信元と宛先の地理的リージョンなどのメタデータ情報でアノテーションが付きます。ストレージ スペースを節約するために、このメタデータ アノテーションをオフにできます。

レコードの形式

ログレコードには、各ログレコードのコアフィールドであるベース フィールドと、詳細情報を追加するメタデータ フィールドが含まれています。メタデータ フィールドは、ストレージ費用を節約するために省略できます。

一部のログフィールドはマルチ フィールド形式であり、所定のフィールドに複数のデータが含まれます。たとえば、connection フィールドは IpConnection 形式で、送信元と宛先の IP アドレスとポート、およびプロトコルが 1 つのフィールドに格納されます。これらのマルチ フィールドのフィールドについては、レコードの形式に関する表の次に説明します。

フィールド フィールドの形式 フィールド タイプ: 基本またはオプションのメタデータ
connection IpConnection
この接続に関する説明を含む 5 つのタプル。
基本
start_time string
集計対象である時間間隔で最初に観測されるパケットのタイムスタンプ(RFC 3339 の日付文字列形式)
基本
end_time string
集計対象である時間間隔で最後に観測されるパケットのタイムスタンプ(RFC 3339 の日付文字列形式)
基本
bytes_sent int64
送信元から宛先に送信されるバイト数
基本
packets_sent int64
送信元から宛先に送信されるパケット数
基本
rtt_msec int64
時間間隔中に測定されたレイテンシ(対象は TCP フローのみ)。これは、SEQ を送信してから対応する ACK を受信するまでの経過時間であり、ネットワークの RTT とアプリケーション関連の遅延が含まれます。
基本
reporter string
フローを報告した側。「SRC」と「DEST」のいずれかになります。
基本
src_instance InstanceDetails
接続の送信元が同じ VPC 上の VM である場合、このフィールドには VM インスタンスの詳細が入力されます。共有 VPC 構成の場合、project_id はインスタンスを所有するプロジェクト(通常はサービス プロジェクト)に対応します。
メタデータ
dest_instance InstanceDetails
接続の宛先が同じ VPC 上の VM である場合、このフィールドには VM インスタンスの詳細が入力されます。共有 VPC 構成の場合、project_id はインスタンスを所有するプロジェクト(通常はサービス プロジェクト)に対応します。
メタデータ
src_vpc VpcDetails
接続の参照元が同じ VPC 上の VM である場合、このフィールドには VPC ネットワークの詳細が入力されます。共有 VPC 構成の場合、project_id はホスト プロジェクトの詳細に対応します。
メタデータ
dest_vpc VpcDetails
接続の宛先が同じ VPC 上の VM である場合、このフィールドには VPC ネットワークの詳細が入力されます。共有 VPC 構成の場合、project_id はホスト プロジェクトの詳細に対応します。
メタデータ
src_location GeographicDetails
接続の参照元が Google VPC の外部にある場合、このフィールドには使用可能な場所のメタデータが入力されます。
メタデータ
dest_location GeographicDetails
接続の宛先が Google VPC の外部にある場合、このフィールドには使用可能な場所のメタデータが入力されます。
メタデータ

IpConnection フィールドの形式(5 タプル)

フィールド 説明
src_ip 文字列 送信元 IP アドレス
src_port int32 送信元ポート
dest_ip 文字列 宛先 IP アドレス
dest_port int32 宛先ポート
protocol int32 IANA プロトコル番号

InstanceDetails フィールドの形式

フィールド 説明
project_id 文字列 VM を含むプロジェクトの ID
vm_name 文字列 VM のインスタンス名
region 文字列 VM のリージョン
zone 文字列 VM のゾーン

VpcDetails フィールドの形式

フィールド 説明
project_id 文字列 VPC を含むプロジェクトの ID
vpc_name 文字列 VM が動作している VPC
subnetwork_name 文字列 VM が動作しているサブネットワーク

GeographicDetails フィールドの形式

フィールド 説明
continent 文字列 外部エンドポイントの大陸
country 文字列 外部エンドポイントの国で、ISO 3166-1 Alpha-3 の国コードにより表されます。
region 文字列 外部エンドポイントのリージョン
city 文字列 外部エンドポイントの都市
asn int32 このエンドポイントが属する外部ネットワークの自律システム番号(ASN)

トラフィック パターンの例

このセクションでは、次のユースケースでの VPC フローログの動作を示します。

  • 同一 VPC 内での VM から VM へのフロー
  • VM から外部へのフロー
  • 共有 VPC での VM から VM へのフロー
  • VPC ピアリングでの VM から VM へのフロー
  • 内部負荷分散での VM から VM へのフロー

同一 VPC 内での VM から VM へのフロー

VPC 内での VM のフロー(クリックで拡大)
VPC 内での VM のフロー(クリックで拡大)

同じ VPC での VM から VM へのフローの場合、VPC フローログが有効になっているサブネット内に要求側の VM と応答側の VM の両方がある場合に限り、フローログはそれら両方の VM から報告されます。この例では、VM 10.10.0.2 が 1,224 バイトのリクエストを、同様にロギングが有効になっているサブネット内にある VM 10.50.0.2 に送信します。次に、10.50.0.2 はリクエストに対して、5,342 バイトを含む応答を返します。リクエストと応答の両方が、要求側 VM と応答側 VM の両方から記録されます。

要求側 VM(10.10.0.2)による報告
リクエスト / 応答 connection.src_ip connection.dest_ip bytes_sent VPC アノテーション
リクエスト 10.10.0.2 10.50.0.2 1224 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*
応答 10.50.0.2 10.10.0.2 5342 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*
応答側 VM(10.50.0.2)による報告
リクエスト / 応答 connection.src_ip connection.dest_ip bytes VPC アノテーション
リクエスト 10.10.0.2 10.50.0.2 1224 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*
応答 10.50.0.2 10.10.0.2 5342 src_instance.*
dest_instance.*
src_vpc.*
dest_vpc.*

VM から外部へのフロー

VM から外部へのフロー(クリックで拡大)
VM から外部へのフロー(クリックで拡大)

VM と外部エンティティ間のフローの場合、フローログは VM からのみ報告されます。

  • 下りフローの場合、ログはトラフィックの送信元である VM から報告されます。
  • 上りフローの場合、ログはトラフィックの宛先である VM から報告されます。

これは次のトラフィックに適用されます。

  • VPN または Cloud Interconnect を経由する、VPC ネットワークとオンプレミス ネットワーク間のトラフィック
  • VM とインターネット上のロケーションの間のトラフィック

次の例では、VM 10.10.0.2 とオンプレミス エンドポイント 10.30.0.2 は、VPN ゲートウェイまたは Cloud Interconnect を介して接続されています。10.10.0.2 から 10.30.0.2 に送信された 1,224 バイトの発信トラフィックは、送信元 VM 10.10.0.2 から報告されます。10.30.0.2 から 10.10.0.2 に送信された 5,342 バイトの受信トラフィックは、トラフィックの宛先である VM 10.10.0.2 から報告されます。

リクエスト / 応答 connection.src_ip connection.dest_ip bytes_sent VPC アノテーション
リクエスト 10.10.0.2 10.30.0.2 1224 src_instance.*
src_vpc.*
dest_location.*
応答 10.30.0.2 10.10.0.2 5342 dest_instance.*
dest_vpc.*
src_location.*

共有 VPC での VM から VM へのフロー

共有 VPC でのフロー(クリックで拡大)
共有 VPC でのフロー(クリックで拡大)

共有 VPC での VM から VM へのフローの場合は、ホスト プロジェクトでサブネットに対して VPC フローログを有効にできます。たとえば、サブネット 10.10.0.0/20 が、ホスト プロジェクトで定義されている共有 VPC ネットワークに属しているとします。このサブネットに属する VM のフローログを確認できます(サービス プロジェクトによって作成されたものを含みます)。この例では、サービス プロジェクトは "webserver"、"recommendation"、"database" と呼ばれます。

VM から VM へのフローの場合に、両方の VM が同じプロジェクト内にある場合、または共有ネットワーク内にある場合、同じホスト プロジェクトや、プロジェクト ID のアノテーションなどが接続のもう一方のエンドポイントで提供されます。他の VM が別のプロジェクトにある場合、その他の VM のアノテーションは提供されません。

次の表には、10.10.0.10 または 10.10.0.20 で報告されるフローが示されています。

  • src_vpc.project_iddest_vpc.project_id は VPC サブネットがホスト プロジェクトに属しているため、ホスト プロジェクト用のものです。
  • src_instance.project_iddest_instance.project_id はインスタンスがサービス プロジェクトに属しているため、サービス プロジェクト用のものです。
connection
.src_ip
src_instance
.project_id
src_vpc
.project_id
connection
.dest_ip
dest_instance
.project_id
dest_vpc
.project_id
10.10.0.10 webserver host_project 10.10.0.20 recommendation host_project

サービス プロジェクトは独自の共有 VPC ネットワークを所有していないため、共有 VPC ネットワークのフローログにアクセスできません。

VPC ピアリングでの VM から VM へのフロー

VPC ピアリングでのフロー(クリックで拡大)
VPC ピアリングでのフロー(クリックで拡大)

両方の VM が同じ GCP プロジェクトにない場合、ピアリングされた VPC の VM から VM へのフローは外部エンドポイントの場合と同じ方法で報告されます。他の VM に関するプロジェクトとその他のアノテーション情報は提供されません。両方の VM が同じプロジェクトにある場合、異なるネットワーク上にある場合でも、プロジェクトとその他のアノテーション情報は他の VM についても提供されます。

次の例では、プロジェクト analytics-prod の VM 10.10.0.2 およびプロジェクト webserver-test の VM 10.50.0.2 のサブネットが VPC ピアリングで接続されています。VPC フローログがプロジェクト analytics-prod で有効になると、10.10.0.2 から 10.50.0.2 に送信されるトラフィック(1,224 バイト)が、フローの送信元である VM 10.10.0.2 から報告されます。10.50.0.2 から 10.10.0.2 に送信されるトラフィック(5,342 バイト)も、フローの宛先である VM 10.10.0.2 から報告されます。

この例では、VPC フローログはプロジェクト webserver-test で有効になっていないため、VM 10.50.0.2 でログは記録されません。

reporter connection.src_ip connection.dest_ip bytes_sent VPC アノテーション
送信元 10.10.0.2 10.50.0.2 1224 src_instance.*
src_vpc.*
宛先 10.50.0.2 10.10.0.2 5342 dest_instance.*
dest_vpc.*

内部負荷分散での VM から VM へのフロー

内部負荷分散でのフロー(クリックで拡大)
内部負荷分散でのフロー(クリックで拡大)

内部ロードバランサのバックエンド サービスに VM を追加すると、Linux または Windows のゲスト環境で VM のローカル ルーティング テーブルにロードバランサの IP アドレスが追加されます。これにより、宛先がロードバランサの IP アドレスに設定されたリクエスト パケットを VM が受け入れられるようになります。VM が応答すると、そのレスポンスが直接送信されます。ただし、レスポンス パケットの送信元 IP アドレスは、負荷分散される VM ではなく、ロードバランサの IP アドレスに設定されます。

内部ロードバランサを経由して送信される VM から VM へのフローは、送信元と宛先の両方から報告されます。HTTP リクエスト / レスポンスのペアの例について、監視されたフローログのエントリに使用されるフィールドを以下の表で説明します。これを示すために、以下のネットワーク構成を想定します。

  • ブラウザ インスタンス(192.168.1.2)
  • 内部ロードバランサ(10.240.0.200)
  • ウェブサーバー インスタンス(10.240.0.3)
トラフィックの方向 reporter connection.src_ip connection.dest_ip connection.src_instance connection.dest_instance
リクエスト SRC 192.168.1.2 10.240.0.200 ブラウザ インスタンス
リクエスト DEST 192.168.1.2 10.240.0.3 ブラウザ インスタンス ウェブサーバー インスタンス
レスポンス SRC 10.240.0.3 192.168.1.2 ウェブサーバー インスタンス ブラウザ インスタンス
レスポンス DEST 10.240.0.200 192.168.1.2 ブラウザ インスタンス

要求側 VM は、どの VM がリクエストに応答するのかを認識しません。また、相手側 VM は送信元アドレスとして内部ロードバランサの IP を使用してレスポンスを送信するため、どの VM が応答したかも認識しません。このため、要求側 VM は dest_instance 情報をレポートに追加できず、src_instance 情報のみを追加できます。応答側 VM は要求側 VM の IP アドレスを認識しているため、src_instancedest_instance の両方の情報を提供できます。

VPC フローログの有効化

VPC フローログを有効にすると、サブネット内のすべての VM に対して有効にすることになります。ロギングをオンにするときに、ログ サンプリング パラメータも指定できます。制御できるパラメータの詳細については、ログのサンプリングと集計をご覧ください。

サブネット作成時の VPC フローログの有効化

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. サブネットを追加するネットワークをクリックします。
  3. [サブネットを追加] をクリックします。
  4. [フローログ] で [オン] を選択します。
  5. ログのサンプリングと集計を調整する場合は、[ログを構成] をクリックして次のいずれかを調整します。
    • 集計間隔
    • 最終ログエントリにメタデータを含めるかどうか
    • サンプルレート 100% はすべてのエントリが保持されることを意味します。
  6. 必要に応じて他のフィールドに値を入力します。
  7. [追加] をクリックします。

gcloud

gcloud compute networks subnets create NAME \
    --enable-flow-logs \
    [--logging-aggregation-interval=INTERVAL \
    [--logging-flow-sampling=0.0...1.0] \
    [--logging-metadata=(include-all | exclude-all)] \
    [other flags as needed]

ここで

  • --logging-aggregation-interval=<var>INTERVAL</var> は、そのサブネットのフローログの集計間隔を設定します。間隔は、5 秒(デフォルト)、30 秒、1 分、5 分、10 分、15 分のいずれかに設定できます。
  • --logging-flow-sampling はフロー サンプリング レートです。フロー サンプリングは、0.0(サンプリングなし)から 1.0(すべてのログ)まで設定できます。デフォルトは 0.5 です。
  • --logging-metadata=(include-all | exclude-all) はメタデータ アノテーションをオンまたはオフにします。デフォルトは On です。

API

新しいサブネットの作成時に VPC フローログを有効にします。

POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
{
  "logConfig": {
    "aggregationInterval": "AGGREGATION_INTERVAL",
    "flowSampling": SAMPLING_RATE,
    "enable": true
  },
  "ipCidrRange": "IP_RANGE",
  "network": "NETWORK_URL",
  "name": "SUBNET_NAME"
}

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

  • PROJECT_ID は、サブネットが作成されるプロジェクトの ID です。
  • REGION は、サブネットが作成されるリージョンです。
  • AGGREGATION_INTERVAL は、そのサブネットのフローログの集計間隔を設定します。間隔は次のいずれかに設定できます。INTERVAL_5_SECINTERVAL_30_SECINTERVAL_1_MININTERVAL_5_MININTERVAL_10_MININTERVAL_15_MIN
  • SAMPLING_RATE はフロー サンプリング レートです。フロー サンプリングは、0.0(サンプリングなし)から 1.0(すべてのログ)まで設定できます。デフォルトは .0.5 です。
  • IP_RANGE は、サブネットのプライマリ内部 IP アドレス範囲です。
  • NETWORK_URL は、サブネットが作成される VPC ネットワーク URL です。
  • SUBNET_NAME はサブネットの名前です。

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

既存のサブネットの VPC フローログの有効化

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 更新するサブネットをクリックします。
  3. [編集] をクリックします。
  4. [フローログ] で [オン] を選択します。
  5. ログのサンプリングと集計を調整する場合は、[ログを構成] をクリックして次のいずれかを調整します。
    • 集計間隔
    • 最終ログエントリにメタデータを含めるかどうか
    • サンプルレート 100% はすべてのエントリが保持されることを意味します。
  6. [保存] をクリックします。

gcloud

gcloud compute networks subnets update NAME \
    --enable-flow-logs \
    [--logging-aggregation-interval=INTERVAL] \
    [--logging-flow-sampling=0.0...1.0 \
    [--logging-metadata=(include-all | exclude-all)]

ここで

  • --logging-aggregation-interval=<var>INTERVAL</var> は、そのサブネットのフローログの集計間隔を設定します。間隔は、5 秒(デフォルト)、30 秒、1 分、5 分、10 分、15 分のいずれかに設定できます。
  • --logging-flow-sampling はフロー サンプリング レートです。フロー サンプリングは、0.0(サンプリングなし)から 1.0(すべてのログ)まで設定できます。デフォルトは .0.5 です。
  • --logging-metadata=(include-all | exclude-all) はメタデータ アノテーションをオンまたはオフにします。デフォルトは On です。

API

既存のサブネットの VPC フローログを有効にします。

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
{
  "logConfig": {
    "enable": true
    ...other logging fields
  },
  "fingerprint": "SUBNETWORK_FINGERPRINT"
}

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

  • PROJECT_ID は、サブネットが存在するプロジェクトの ID です。
  • REGION は、サブネットが存在するリージョンです。
  • SUBNET_NAME は、既存のサブネットの名前です。
  • SUBNET_FINGERPRINT は既存のサブネットのフィンガー プリント ID で、サブネットの記述時に指定されます。
  • 他のロギング フィールドについては、サブネット作成時の VPC フローログの有効化を参照してください。

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

既存のサブネットの推定ログボリュームの表示

Google Cloud Console では、既存のサブネットのログボリュームを推定することにより、フローログを有効にするコストを見積もることができます。この推定値は、過去 7 日にわたり各サブネットで 5 秒間隔で取得されたフローに基づきます。また、各ログのサイズは、メタデータ アノテーションを有効にするかどうかによって異なります。

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. コストを推定するサブネットをクリックします。
  3. [編集] をクリックします。
  4. [フローログ] で [オン] を選択します。
  5. [ログを構成] をクリックします。
  6. [1 日あたりの生成ログの推定数] で、推定値を確認します。
  7. 変更が保存されないように [キャンセル] をクリックします。

VPC フローロギング パラメータの更新

ログ サンプリング パラメータを変更できます。制御できるパラメータの詳細については、ログのサンプリングと集計をご覧ください。

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 更新するサブネットをクリックします。
  3. [編集] をクリックします。
  4. ログのサンプリングと集計を調整するには、[ログを構成] をクリックします。
    • 集計間隔
    • 最終ログエントリにメタデータを含めるかどうか
    • サンプルレート 100% はすべてのエントリが保持されることを意味します。
  5. [保存] をクリックします。

gcloud

gcloud compute networks subnets update NAME \
    [--logging-aggregation-interval=INTERVAL] \
    [--logging-flow-sampling=0.0...1.0 \
    [--logging-metadata=(include-all | exclude-all)]

ここで

  • --logging-aggregation-interval=<var>INTERVAL</var> は、そのサブネットのフローログの集計間隔を設定します。間隔は、5 秒(デフォルト)、30 秒、1 分、5 分、10 分、15 分のいずれかに設定できます。
  • --logging-flow-sampling はフロー サンプリング レートです。フロー サンプリングは、0.0(サンプリングなし)から 1.0(すべてのログ)まで設定できます。デフォルトは .0.5 です。
  • --logging-metadata=(include-all | exclude-all) はメタデータ アノテーションをオンまたはオフにします。デフォルトは On です。

API

ログ サンプリング フィールドを変更して、VPC フローログの動作を更新します。

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
{
  "logConfig": {
    ...fields to modify
  },
  "fingerprint": "SUBNETWORK_FINGERPRINT"
}

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

  • PROJECT_ID は、サブネットが存在するプロジェクトの ID です。
  • REGION は、サブネットが存在するリージョンです。
  • SUBNET_NAME は、既存のサブネットの名前です。
  • SUBNET_FINGERPRINT は既存のサブネットのフィンガー プリント ID で、サブネットの記述時に指定されます。
  • 変更可能なフィールドについては、サブネット作成時の VPC フローログの有効化を参照してください。

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

サブネットの VPC フローログの無効化

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 更新するサブネットをクリックします。
  3. [編集] をクリックします。
  4. [フローログ] で [オフ] を選択します。
  5. [保存] をクリックします。

gcloud

gcloud compute networks subnets update NAME \
    --no-enable-flow-logs

API

ログレコードの収集を停止するには、サブネットの VPC フローログを無効にします。

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
{
  "logConfig": {
    "enable": false
  },
  "fingerprint": "SUBNETWORK_FINGERPRINT"
}

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

  • PROJECT_ID は、サブネットが存在するプロジェクトの ID です。
  • REGION は、サブネットが存在するリージョンです。
  • SUBNET_NAME は、既存のサブネットの名前です。
  • SUBNET_FINGERPRINT は既存のサブネットのフィンガー プリント ID で、サブネットの記述時に指定されます。

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

Logging を使用するログへのアクセス

IAM の構成

Logging のアクセス制御ガイドの手順に従って操作します。

[ログビューア] ページからログを表示します。

これらのコマンドには、プロジェクトのプロジェクト ID が必要です。

すべてのフローログへのアクセス

  1. Google Cloud Console の [ログ] ページに移動します。
    [ログ] ページに移動
  2. 最初のプルダウン メニューで [GCE サブネットワーク] を選択します。
  3. 2 番目のプルダウン メニューで [vpc_flows] を選択します。
  4. [OK] をクリックします。

別の方法:

  1. Google Cloud Console の [ログ] ページに移動します。
    [ログ] ページに移動
  2. [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
  3. フィールドに以下を貼り付けます。PROJECT_ID を実際のプロジェクト ID に置き換えます。
    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
    
  4. [フィルタを送信] をクリックします。

特定のサブネットのログへのアクセス

  1. Google Cloud Console の [ログ] ページに移動します。
    [ログ] ページに移動
  2. 最初のプルダウン メニューでカーソルを [GCE サブネットワーク] に移します。カーソルをさらに右側に進めてそれぞれのサブネット選択メニューを開きます。
  3. 2 番目のプルダウン メニューで、[vpc_flows] を選択します。
  4. [OK] をクリックします。

別の方法:

  1. Google Cloud Console の [ログ] ページに移動します。
    [ログ] ページに移動
  2. [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
  3. フィールドに以下を貼り付けます。PROJECT_ID を実際のプロジェクト ID、SUBNETWORK_NAME をサブネットワークに置き換えてください。
    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
    resource.labels.subnetwork_name="SUBNETWORK_NAME"
    
  4. [フィルタを送信] をクリックします。

特定の VM のログへのアクセス

  1. Google Cloud Console の [ログ] ページに移動します。
    [ログ] ページに移動
  2. [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
  3. フィールドに以下を貼り付けます。PROJECT_ID を実際のプロジェクト ID、VM_NAME を VM に置き換えてください。
    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
    jsonPayload.src_instance.vm_name="VM_NAME"
    
  4. [フィルタを送信] をクリックします。

特定の接頭辞に対するトラフィックのログへのアクセス

  1. Google Cloud Console の [ログ] ページに移動します。
    [ログ] ページに移動
  2. [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
  3. フィールドに以下を貼り付けます。PROJECT_ID を実際のプロジェクト ID、SUBNETWORK_NAME をサブネットワークに置き換えてください。
    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
    ip_in_net(jsonPayload.connection.dest_ip, SUBNETWORK_NAME)
    
  4. [フィルタを送信] をクリックします。

特定のポートとプロトコルのログへのアクセス

単一のポートの場合

  1. Google Cloud Console の [ログ] ページに移動します。
    [ログ] ページに移動
  2. [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
  3. フィールドに以下を貼り付けます。PROJECT_ID を実際のプロジェクト ID、PORT をポート、PROTOCOL をプロトコルに置き換えてください。
    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
    jsonPayload.connection.src_port=PORT
    jsonPayload.connection.protocol=PROTOCOL
    
  4. [フィルタを送信] をクリックします。

複数のポートの場合

  1. Google Cloud Console の [ログ] ページに移動します。
    [ログ] ページに移動
  2. [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
  3. フィールドに以下を貼り付けます。PROJECT_ID を実際のプロジェクト ID、PORT1PORT2 をポート、PROTOCOL をプロトコルに置き換えてください。
    resource.type="gce_subnetwork"
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
    jsonPayload.connection.src_port=(PORT1 OR PORT2)
    jsonPayload.connection.protocol=PROTOCOL
    
  4. [フィルタを送信] をクリックします。

BigQuery、Pub/Sub、およびカスタム ターゲットへのログのエクスポート

Logging のフローログは、Logging のドキュメントの説明に沿って任意の宛先にエクスポートできます。フィルタの例については、前のセクションをご覧ください。

トラブルシューティング

Logging で gce_subnetwork リソースの下に vpc_flows が表示されない

  • VPC フローがサポートされるのは VPC ネットワークのみです。レガシー ネットワークを使用している場合、ログは表示されません。
  • 共有 VPC ネットワークでは、ログはホスト プロジェクトでのみ表示され、サービス プロジェクトでは表示されません。ホスト プロジェクトのログを調べていることを確認してください。
  • Logging の除外フィルタは、指定されたログをブロックします。VPC フローログを破棄する除外ルールが存在しないことを確認してください。
    1. [リソースの使用量] に移動します。
    2. [除外] タブをクリックします。
    3. VPC フローログを破棄する除外ルールが存在しないことを確認します。

一部のログで RTT 値またはバイト値が存在しない

  • RTT をキャプチャするのに十分なパケットがサンプリングされなかった場合、RTT の測定値が存在しないことがあります。この現象は、接続が少量である場合に発生する可能性が高くなります。
  • UDP フローでは RTT 値は提供されません。
  • 一部のパケットはペイロードなしで送信されます。ヘッダーのみのパケットがサンプリングされた場合、バイト値は 0 になります。

一部のフローが見つからない

  • サポートされているのは UDP プロトコルと TCP プロトコルのみです。VPC フローログは他のプロトコルをサポートしていません。
  • ログがサンプリングされます。非常に少量のフローでは、一部のパケットが失われる場合があります。

フローログを有効にした場合でも無効として表示される

  • 内部 HTTP(S) ロードバランサのプロキシ専用サブネットを構成し、gcloud compute networks subnets コマンドを使用して VPC フローログを有効にした場合、コマンドは成功したように見えますが、フローログは実際には有効になりません。--purpose=INTERNAL_HTTPS_LOAD_BALANCER フラグも指定した場合、--enable-flow-logs フラグは有効になりません。

    Cloud Console または API を使用してフローログを有効にすると、「Invalid value for field 'resource.enableFlowLogs': 'true'.Invalid field set in subnetwork with purpose INTERNAL_HTTPS_LOAD_BALANCER.」というエラー メッセージが表示されます。

    プロキシ専用サブネットには VM がないため、VPC フローログはサポートされません。これは想定どおりの挙動です。

料金

Logging、BigQuery、または Pub/Sub の標準料金が適用されます。VPC フローログの料金については、ネットワーク テレメトリーの料金をご覧ください。

よくある質問

  • VPC フローログには、ファイアウォール ルールに基づいて許可されるトラフィックと拒否されるトラフィックの両方が含まれていますか?

    • VPC フローログでは、VM の観点からトラフィックがカバーされます。VM からのすべての下り(発信)トラフィックは、ファイアウォールの下り拒否ルールによってブロックされていても記録されます。上り(着信)トラフィックは、ファイアウォールの上り許可ルールによって許可されている場合に記録されます。ファイアウォールの上り拒否ルールによってブロックされた上りトラフィックは記録されません。
  • VPC フローログは、インターフェースが複数ある VM インスタンスで動作しますか?

  • VPC フローログはレガシー ネットワークで動作しますか?

次のステップ