VPC フローログには、VM インスタンスによって送受信されたネットワーク フローのサンプルが記録されます。これには GKE ノードとして使用されるインスタンスも含まれます。これらのログは、ネットワーク モニタリング、フォレンジック、リアルタイム セキュリティ分析、および費用の最適化に使用できます。
このページは、VPC フローログの概要で説明されているコンセプトを理解していることを前提としています。
VPC フローロギングの有効化
VPC フローログを有効にすると、サブネット内のすべての VM に対して有効にすることになります。ただし、Logging に書き込まれる情報の量は削減されます。制御できるパラメータの詳細については、ログのサンプリングと集計をご覧ください。
サブネット作成時の VPC フローログの有効化
Console
- Google Cloud Console で [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - サブネットを追加するネットワークをクリックします。
- [サブネットを追加] をクリックします。
- [フローログ] で [オン] を選択します。
- ログのサンプリングと集計を調整する場合は、[ログを構成] をクリックして次のいずれかを調整します。
- 集計間隔
- 最終ログエントリにメタデータを含めるかどうか
デフォルトでは、[メタデータを含める] によって特定のフィールドのみが含まれるように処理されます。詳細については、メタデータ フィールドのカスタマイズをご覧ください。メタデータ フィールドをカスタマイズするには、gcloud
コマンドライン インターフェースまたは API を使用する必要があります。 - サンプルレート
100%
はすべてのエントリが保持されることを意味します。
- 必要に応じて他のフィールドに値を入力します。
- [追加] をクリックします。
gcloud
gcloud compute networks subnets create SUBNET_NAME \ --enable-flow-logs \ [--logging-aggregation-interval=AGGREGATION_INTERVAL \ [--logging-flow-sampling=0.0...1.0] \ [--logging-filter-expr=EXPRESSION] \ [--logging-metadata=(include-all | exclude-all | custom)] \ [--logging-metadata-fields=FIELDS] \ [other flags as needed]
ここで
--logging-aggregation-interval=
AGGREGATION_INTERVAL
は、そのサブネットのフローログの集計間隔を設定します。間隔は、5 秒(デフォルト)、30 秒、1 分、5 分、10 分、15 分のいずれかに設定できます。--logging-flow-sampling
はフロー サンプリング レートです。フロー サンプリングは、0.0
(サンプリングなし)から1.0
(すべてのログ)まで設定できます。デフォルトは0.5
です。--logging-filter-expr=
EXPRESSION
は、ログ コレクションを式に一致するログのみに制限します。詳細については、ログのフィルタリングをご覧ください。--logging-metadata=(include-all | exclude-all | custom)
は、レコードのメタデータ アノテーションをオンまたはオフにするか、custom
に設定します。custom
に設定した場合は、--logging-metadata-fields
も指定します。デフォルトはinclude-all
です。注:include-all
にはすべてのフィールドが含まれているわけではありません。詳細については、メタデータ フィールドのカスタマイズをご覧ください。--logging-metadata-fields
は、ログに含めるメタデータ フィールドのカンマ区切りのリストです(例:--logging-metadata-fields=src_instance,dst_instance
)。--logging-metadata=custom
の場合にのみ設定できます。
API
新しいサブネットの作成時に VPC フローログを有効にします。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "logConfig": { "aggregationInterval": "AGGREGATION_INTERVAL", "flowSampling": SAMPLING_RATE, "filterExpr": EXPRESSION, "metadata": METADATA_SETTING, "metadataFields": METADATA_FIELDS, "enable": true }, "ipCidrRange": "IP_RANGE", "network": "NETWORK_URL", "name": "SUBNET_NAME" }
プレースホルダを有効な値に置き換えます。
PROJECT_ID
は、サブネットが作成されるプロジェクトの ID です。REGION
は、サブネットが作成されるリージョンです。AGGREGATION_INTERVAL
は、サブネット内のフローログの集計間隔を設定します。間隔は次のいずれかに設定できます。INTERVAL_5_SEC
、INTERVAL_30_SEC
、INTERVAL_1_MIN
、INTERVAL_5_MIN
、INTERVAL_10_MIN
、INTERVAL_15_MIN
。SAMPLING_RATE
はフロー サンプリング レートです。フロー サンプリングは、0.0
(サンプリングなし)から1.0
(すべてのログ)まで設定できます。デフォルトは.0.5
です。EXPRESSION
は、実際に書き込まれるログをフィルタリングするために使用するフィルタ式です。詳細については、ログのフィルタリングをご覧ください。METADATA_SETTING
により、すべてのメタデータがログに記録されるか(INCLUDE_ALL_METADATA
)、メタデータが記録されない(EXCLUDE_ALL_METADATA
)か、特定のメタデータのみがログに記録されるか(CUSTOM_METADATA
)を指定します。このフィールドがCUSTOM_METADATA
に設定されている場合は、metadataFields
フィールドも設定します。INCLUDE_ALL_METADATA
にはすべてのフィールドが含まれているわけではありません。詳細については、メタデータ フィールドのカスタマイズをご覧ください。METADATA_FIELDS
は、metadata: CUSTOM_METADATA
を設定した場合に取得するメタデータ フィールドです。これは、src_instance, src_vpc.project_id
などのメタデータ フィールドのカンマ区切りのリストです。IP_RANGE
は、サブネットのプライマリ内部 IP アドレスの範囲です。NETWORK_URL
は、サブネットが作成される VPC ネットワーク URL です。SUBNET_NAME
はサブネットの名前です。
詳細については、subnetworks.insert
メソッドをご覧ください。
既存のサブネットの VPC フローログの有効化
Console
- Google Cloud Console で [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - 更新するサブネットをクリックします。
- [編集] をクリックします。
- [フローログ] で [オン] を選択します。
- ログのサンプリングと集計を調整する場合は、[ログを構成] をクリックして次のいずれかを調整します。
- 集計間隔
- 最終ログエントリにメタデータを含めるかどうか
デフォルトでは、[メタデータを含める] によって特定のフィールドのみが含まれるように処理されます。詳細については、メタデータ フィールドのカスタマイズをご覧ください。メタデータ フィールドをカスタマイズするには、gcloud
コマンドライン インターフェースまたは API を使用する必要があります。 - サンプルレート
100%
はすべてのエントリが保持されることを意味します。
- [保存] をクリックします。
gcloud
gcloud compute networks subnets update SUBNET_NAME \ --enable-flow-logs \ [--logging-aggregation-interval=AGGREGATION_INTERVAL] \ [--logging-flow-sampling=0.0...1.0] \ [--logging-filter-expr=EXPRESSION] \ [--logging-metadata=(include-all | exclude-all | custom)] \ [--logging-metadata-fields=FIELDS]
ここで
--logging-aggregation-interval=
AGGREGATION_INTERVAL
は、そのサブネットのフローログの集計間隔を設定します。間隔は、5 秒(デフォルト)、30 秒、1 分、5 分、10 分、15 分のいずれかに設定できます。--logging-flow-sampling
はフロー サンプリング レートです。フロー サンプリングは、0.0
(サンプリングなし)から1.0
(すべてのログ)まで設定できます。デフォルトは.0.5
です。--logging-filter-expr=
EXPRESSION
は、ログ コレクションを式に一致するログのみに制限します。詳細については、ログのフィルタリングをご覧ください。--logging-metadata=(include-all | exclude-all | custom)
は、レコードのメタデータ アノテーションをオンまたはオフにするか、custom
に設定します。custom
に設定した場合は、--logging-metadata-fields
も指定します。デフォルトはオンです。注:include-all
には GKE アノテーションは含まれません。GKE アノテーションを表示するには、[custom
] を選択してアノテーションを指定します。--logging-metadata-fields
は、ログに含めるメタデータ フィールドのカンマ区切りのリストです(例:--logging-metadata-fields=src_instance,dst_instance
)。--logging-metadata=custom
の場合にのみ設定できます。
API
既存のサブネットの VPC フローログを有効にします。
PATCH https://compute.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 秒間隔で取得されたフローに基づきます。また、各ログのサイズは、メタデータ アノテーションを有効にするかどうかによって異なります。
- Google Cloud Console で [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - 費用を推定するサブネットをクリックします。
- [編集] をクリックします。
- [フローログ] で [オン] を選択します。
- [ログを構成] をクリックします。
- [1 日あたりの生成ログの推定数] で、推定値を確認します。
- 変更が保存されないように [キャンセル] をクリックします。
VPC フローログが有効になっているサブネットの表示
VPC フローログが有効になっているネットワーク内のサブネットを確認できます。
Console
- Google Cloud Console で [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - [フローログ] 列を表示して、Logging がオンかオフかを確認します。
gcloud
gcloud compute networks subnets list \ --project PROJECT_ID \ --filter="network=NETWORK_URL" \ --format="csv(name,logConfig.enable)"
ここで
PROJECT_ID
は、クエリするプロジェクトの ID です。NETWORK_URL
は、サブネットを含むネットワークの完全修飾ドメイン名です。
VPC フローロギング パラメータの更新
ログ サンプリング パラメータを変更できます。制御できるパラメータの詳細については、ログのサンプリングと集計をご覧ください。
Console
- Google Cloud Console で [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - 更新するサブネットをクリックします。
- [編集] をクリックします。
- ログのサンプリングと集計を調整するには、[ログを構成] をクリックします。
- 集計間隔
- 最終ログエントリにメタデータを含めるかどうか
デフォルトでは、[メタデータを含める] によって特定のフィールドのみが含まれるように処理されます。詳細については、メタデータ フィールドのカスタマイズをご覧ください。メタデータ フィールドをカスタマイズするには、gcloud
コマンドライン インターフェースまたは API を使用する必要があります。 - サンプルレート
100%
はすべてのエントリが保持されることを意味します。
- [保存] をクリックします。
gcloud
gcloud compute networks subnets update SUBNET_NAME \ [--logging-aggregation-interval=AGGREGATION_INTERVAL] \ [--logging-flow-sampling=0.0...1.0] \ [--logging-filter-expr=EXPRESSION] \ [--logging-metadata=(include-all | exclude-all | custom)] \ [--logging-metadata-fields=FIELDS]
ここで
--logging-aggregation-interval=
AGGREGATION_INTERVAL
は、そのサブネットのフローログの集計間隔を設定します。間隔は、5 秒(デフォルト)、30 秒、1 分、5 分、10 分、15 分のいずれかに設定できます。--logging-flow-sampling
はフロー サンプリング レートです。フロー サンプリングは、0.0
(サンプリングなし)から1.0
(すべてのログ)まで設定できます。デフォルトは.0.5
です。--logging-filter-expr=
EXPRESSION
は、ログ コレクションを式に一致するログのみに制限します。詳細については、ログのフィルタリングをご覧ください。--logging-metadata=(include-all | exclude-all | custom)
は、レコードのメタデータ アノテーションをオンまたはオフにするか、custom
に設定します。custom
に設定した場合は、--logging-metadata-fields
も指定します。デフォルトはオンです。注:include-all
には GKE アノテーションは含まれません。GKE アノテーションを表示するには、[custom
] を選択してアノテーションを指定します。--logging-metadata-fields
は、ログに含めるメタデータ フィールドのカンマ区切りのリストです(例:--logging-metadata-fields=src_instance,dst_instance
)。--logging-metadata=custom
の場合にのみ設定できます。
API
ログ サンプリング フィールドを変更して、VPC フローログの動作を更新します。
PATCH https://compute.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
- Google Cloud Console で [VPC ネットワーク] ページに移動します。
[VPC ネットワーク] ページに移動 - 更新するサブネットをクリックします。
- [編集] をクリックします。
- [フローログ] で [オフ] を選択します。
- [保存] をクリックします。
gcloud
gcloud compute networks subnets update SUBNET_NAME \ --no-enable-flow-logs
API
ログレコードの収集を停止するには、サブネットの VPC フローログを無効にします。
PATCH https://compute.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 が必要です。
すべてのフローログへのアクセス
- Google Cloud Console の [ログ] ページに移動します。
[ログ] ページに移動 - 最初のプルダウン メニューで [サブネットワーク] を選択します。
- 2 番目のプルダウン メニューで compute.googleapis.com/vpc_flows を選択します。
- [OK] をクリックします。
別の方法:
- Google Cloud Console の [ログ] ページに移動します。
[ログ] ページに移動 - [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
- フィールドに以下を貼り付けます。
PROJECT_ID
は実際のプロジェクト ID に置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
- [フィルタを送信] をクリックします。
特定のサブネットのログへのアクセス
- Google Cloud Console の [ログ] ページに移動します。
[ログ] ページに移動 - 最初のプルダウン メニューでカーソルを [サブネットワーク] に移します。カーソルをさらに右側に進めてそれぞれのサブネット選択メニューを開きます。
- 2 番目のプルダウン メニューで compute.googleapis.com/vpc_flows を選択します。
- [OK] をクリックします。
別の方法:
- Google Cloud Console の [ログ] ページに移動します。
[ログ] ページに移動 - [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
- フィールドに以下を貼り付けます。
PROJECT_ID
をプロジェクト ID に、SUBNET_NAME
をサブネットワークに置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" resource.labels.subnetwork_name="SUBNET_NAME"
- [フィルタを送信] をクリックします。
特定の VM のログに対するアクセス
- Google Cloud Console の [ログ] ページに移動します。
[ログ] ページに移動 - [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
- フィールドに以下を貼り付けます。
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"
- [フィルタを送信] をクリックします。
特定のサブネット範囲へのトラフィックのログに対するアクセス
- Google Cloud Console の [ログ] ページに移動します。
[ログ] ページに移動 - [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
- フィールドに以下を貼り付けます。
PROJECT_ID
をプロジェクト ID に、SUBNET_RANGE
を CIDR 範囲(192.168.1.0/24
)に置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" ip_in_net(jsonPayload.connection.dest_ip, SUBNET_RANGE)
- [フィルタを送信] をクリックします。
特定の GKE クラスタのログに対するアクセス
- Google Cloud Console の [ログ] ページに移動します。
[ログ] ページに移動 - [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
- フィールドに以下を貼り付けます。
PROJECT_ID
をプロジェクト ID に、SUBNET_NAME
をサブネットワークに置き換えます。resource.type="gce_subnetwork" logName="projects/{#project_id}/logs/vpc_flows" jsonPayload.src_gke_details.cluster.cluster_name="{#cluster_name}" OR jsonPayload.dest_gke_details.cluster.cluster_name="{#cluster_name}"
- [フィルタを送信] をクリックします。
特定のポートとプロトコルのログへのアクセス
個別の宛先ポートの場合
- Google Cloud Console の [ログ] ページに移動します。
[ログ] ページに移動 - [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
- フィールドに以下を貼り付けます。
PROJECT_ID
をプロジェクト ID に、PORT を宛先ポートに、PROTOCOL をプロトコルに置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" jsonPayload.connection.dest_port=PORT jsonPayload.connection.protocol=PROTOCOL
- [フィルタを送信] をクリックします。
複数の宛先ポートの場合
- Google Cloud Console の [ログ] ページに移動します。
[ログ] ページに移動 - [ラベルまたはテキスト検索でフィルタ] フィールドの右側にある下矢印をクリックし、[高度なフィルタに変換] を選択します。
- フィールドに以下を貼り付けます。
PROJECT_ID
をプロジェクト ID に、PORT1 と PORT2 を宛先ポートに、PROTOCOL をプロトコルに置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" jsonPayload.connection.dest_port=(PORT1 OR PORT2) jsonPayload.connection.protocol=PROTOCOL
- [フィルタを送信] をクリックします。
BigQuery、Pub/Sub、およびカスタム ターゲットへのログのエクスポート
Logging のフローログは、Logging のドキュメントの説明に沿って任意の宛先にエクスポートできます。フィルタの例については、前のセクションをご覧ください。
トラブルシューティング
Logging で gce_subnetwork
リソースの下に vpc_flows
が表示されない
- 指定したサブネットで Logging が有効になっていることを確認します。
- VPC フローがサポートされるのは VPC ネットワークのみです。レガシー ネットワークを使用している場合、ログは表示されません。
- 共有 VPC ネットワークでは、ログはホスト プロジェクトでのみ表示され、サービス プロジェクトでは表示されません。ホスト プロジェクトのログを調べていることを確認してください。
- Logging の除外フィルタは、指定されたログをブロックします。VPC フローログを破棄する除外ルールが存在しないことを確認してください。
- [リソースの使用量] に移動します。
- [除外] タブをクリックします。
- VPC フローログを破棄する除外ルールが存在しないことを確認します。
一部のログで RTT 値またはバイト値が存在しない
- RTT をキャプチャするのに十分なパケットがサンプリングされなかった場合、RTT の測定値が存在しないことがあります。この現象は、接続が少量である場合に発生する可能性が高くなります。
- UDP フローでは RTT 値は提供されません。
- 一部のパケットはペイロードなしで送信されます。ヘッダーのみのパケットがサンプリングされた場合、バイト値は 0 になります。
一部のフローが見つからない
- サポートされているのは UDP プロトコルと TCP プロトコルのみです。VPC フローログは他のプロトコルをサポートしていません。
- ログがサンプリングされます。非常に少量のフローでは、一部のパケットが失われる場合があります。
一部のログで GKE アノテーションが見つからない
GKE アノテーションの詳細については、GKE のアノテーションをご覧ください。
- クラスタで Google Kubernetes Engine Monitoring が有効になっていることを確認します。場合によっては、GKE Monitoring が有効になっていない場合、アノテーションの一部が欠落することがあります。こちらの手順で、クラスタで GKE Monitoring が有効になっているかどうかを確認してください。
- クラスタで GKE Monitoring が有効になっていても、GKE アノテーションが欠落している場合は、Cloud Console のプロジェクトの API Monitoring ダッシュボードにアクセスして、メタデータの更新を Monitoring に送信するエージェントが正常に更新を送信しているか確認します。API の割り当てを超えたためにエラーが発生することもあります。API の割り当てダッシュボードに移動し、割り当て超過のエラーがないか確認してください。割り当て超過エラーが発生している場合は、割り当ての管理の手順に従って、割り当ての増加をリクエストしてください。
一部の GKE フローのログが見つからない
クラスタでノード内の可視化が有効になっていることを確認してください。有効になっていない場合、同じノード上の Pod 間のフローはログに記録されません。
フローログを有効にした場合でも無効として表示される
内部 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 フローログの料金については、ネットワーク テレメトリーの料金をご覧ください。
次のステップ
- Logging のドキュメントを参照する
- Logging でのエクスポートのドキュメントを参照する