AWS VPC Flow Logs を収集する

パーサーのバージョン: 17.0

以下でサポートされています。

このドキュメントでは、Amazon S3(テキスト形式)、Kinesis Data Firehose を使用した Amazon CloudWatch Logs、Amazon S3 の CSV 形式の 3 つの方法を使用して、AWS VPC Flow Logs を Google Security Operations に取り込む方法について説明します。AWS VPC Flow Logs は、VPC 内のネットワーク インターフェースを経由する IP トラフィックに関する情報を取得できる機能です。この統合により、これらのログを Google SecOps に送信して分析とモニタリングを行うことができます。

サポートされている AWS VPC Flow Logs の形式

Google SecOps は、次の 2 つの主要なテキスト形式で AWS VPC フローログの取り込みをサポートしています。

  • JSON 形式: AWS_VPC_FLOW ログタイプは、JSON 形式のログを解析します。この形式では、各ログエントリにキーと対応する値の両方が含まれるため、データが自己記述型になります。
  • CSV 形式: Google SecOps には、CSV 形式の AWS VPC Flow Logs 用のパーサーも用意されています。この形式では、ヘッダー行にフィールド キーが 1 回だけリストされ、後続の行にはカンマ区切り値のみが含まれます。

CSV 形式では各ログエントリにフィールドキーが含まれていないため、AWS_VPC_FLOW_CSV パーサーは、事前定義された厳密な値の順序に依存します。CSV ファイルを正しく解析するには、次のフィールド順序に従う必要があります。

   Version,Account_id,Interface_id,Srcaddr,Dstaddr,Srcport,Dstport,Protocol,Packets,Bytes,Start,End,Action,Log_status,Vpc_id,Subnet_id,Instance_id,Tcp_flags,Type,Pkt_srcaddr,Pkt_dstaddr,Region,Az_id,Sublocation_type,Sublocation_id,Pkt_src_aws_service,Pkt_dst_aws_service,Flow_direction,Traffic_path,Ecs_cluster_arn,Ecs_cluster_name,Ecs_container_instance_arn,Ecs_container_instance_id,Ecs_container_id,Ecs_second_container_id,Ecs_service_name,Ecs_task_definition_arn,Ecs_task_arn,Ecs_task_id

CSV ログ行の例を次に示します。

   7,369096419186,eni-0520bb5efed19d33a,10.119.32.34,10.119.223.3,51256,16020,6,14,3881,1723542839,1723542871,ACCEPT,OK,vpc-0769a6844ce873a6a,subnet-0cf9b2cb32f49f258,i-088d6080f45f5744f,0,IPv4,10.119.32.34,10.119.223.3,ap-northeast-1,apne1-az4,-,-,-,-,ingress,,-,-,-,-,-,-,-,-,-,-

値がないフィールドには、CSV 行内の正しい位置順序を維持するために、空の値(,, など)を渡す必要があります。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス。
  • AWS への特権アクセス。

オプション 1: AWS S3(テキスト形式)を使用して AWS VPC フローログのエクスポートを構成する

次のセクションでは、Google SecOps による分析のために VPC Flow Logs のエクスポートを有効にするように Amazon S3 と Identity and Access Management の権限を構成する方法について説明します。

Google SecOps 用に AWS S3 バケットと IAM を構成する

  1. バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
  2. 後で参照できるように、バケットの名前とリージョンを保存します(例: aws-vpc-flowlogs)。
  3. IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
  4. 作成したユーザーを選択します。
  5. [セキュリティ認証情報] タブを選択します。
  6. [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
  7. [ユースケース] で [サードパーティ サービス] を選択します。
  8. [次へ] をクリックします。
  9. 省略可: 説明タグを追加します。
  10. [アクセスキーを作成] をクリックします。
  11. [CSV ファイルをダウンロード] をクリックし、[アクセスキー] と [シークレット アクセスキー] を保存して、今後の参照に備えます。
  12. [完了] をクリックします。
  13. [権限] タブを選択します。
  14. [権限ポリシー] セクションで [権限を追加] をクリックします。
  15. [権限を追加] を選択します。
  16. [ポリシーを直接アタッチする] を選択します。
  17. AmazonS3FullAccess ポリシーを検索します。
  18. ポリシーを選択します。
  19. [次へ] をクリックします。
  20. [権限を追加] をクリックします。

VPC Flow Logs を作成する(宛先: Amazon S3、テキスト形式)

  1. AWS コンソール > VPC > VPC/サブネット/ネットワーク インターフェースを開き、ロギングするスコープを選択します。
  2. [Actions] > [Create flow log] をクリックします。
  3. 次の構成情報を指定します。
    • フィルタ: ポリシーに応じて [すべて](または [承認] / [不承認])を選択します。
    • 最大集計間隔: [1 分](推奨)または [10 分] を選択します。
    • 宛先: [Amazon S3 バケットに送信] を選択します。
    • S3 バケット ARN: 前のセクションで作成したバケット名を arn:aws:s3:::<your-bucket> の形式で入力します。
    • ログ レコード形式: [AWS default format] を選択します。
    • ログファイル形式: [テキスト(標準)] を選択します。
    • 省略可: 必要がない限り、Hive 互換プレフィックスと時間単位のパーティションを無効にします。
  4. [フローログを作成] をクリックします。

AWS VPC Flow Logs(S3 テキスト)を取り込むように Google SecOps でフィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [+ 新しいフィードを追加] をクリックします。
  3. [フィード名] フィールドに、フィードの名前を入力します(例: AWS VPC Flow Logs - S3 (Text))。
  4. [ソースタイプ] として [Amazon S3 V2] を選択します。
  5. [Log type] として [AWS VPC Flow] を選択します。
  6. [次へ] をクリックします。
  7. 次の入力パラメータの値を指定します。
    • S3 URI: S3 バケットのアドレス(例: s3://<your-bucket>/AWSLogs/<account-id>/vpcflowlogs/<region>/)を入力します。
    • Source deletion options: 必要に応じて削除オプションを選択します。
    • Maximum File Age: デフォルトは 180 日です。
    • アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
    • シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。
    • アセットの名前空間: アセットの名前空間。
    • Ingestion labels: このフィードのイベントに適用されるラベル。
  8. [次へ] をクリックします。
  9. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

オプション 2: Amazon CloudWatch Logs と Kinesis Data Firehose を使用して AWS VPC Flow Logs のエクスポートを構成する

このオプションでは、CloudWatch に送信されるようにフローログを設定した後、Kinesis Data Firehose を使用して、選択した宛先にログデータをストリーミングすることで、データ エクスポートの追加レイヤを提供します。

VPC Flow Logs を作成する(宛先: Amazon CloudWatch Logs)

  1. AWS コンソール > VPC > [Your VPCs/Subnets/Network interfaces] を開きます。
  2. [Actions] > [Create flow log] をクリックします。
  3. 次の構成情報を指定します。
    • フィルタ: ポリシーに応じて、[すべて](または [承認] / [拒否])を選択します。
    • Maximum aggregation interval: [1 minute](推奨)または [10 minutes] を選択します。
    • 宛先: [CloudWatch Logs に送信] を選択します。
    • 宛先ロググループ: ロググループ(/aws/vpc/flowlogs など)を選択または作成します。
    • IAM ロール: CloudWatch Logs に書き込むことができるロールを選択します。
    • ログ レコード形式: [AWS default](バージョン 2)または [Custom](追加フィールドを含む)を選択します。
  4. [フローログを作成] をクリックします。

Google SecOps でフィードを作成してエンドポイント URL と秘密鍵を取得する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [+ 新しいフィードを追加] をクリックします。
  3. [フィード名] フィールドに、フィードの名前を入力します(例: AWS VPC Flow Logs - CloudWatch via Firehose)。
  4. [ソースタイプ] として [Amazon Data Firehose] を選択します。
  5. [Log type] として [AWS VPC Flow] を選択します。
  6. [次へ] をクリックします。
  7. 次の入力パラメータの値を指定します。
    • 分割区切り文字: 省略可能な n。
    • アセットの名前空間: アセットの名前空間(aws.vpc.flowlogs.cwl など)。
    • Ingestion labels: このフィードのイベントに適用されるラベル(例: source=vpc_flow_firehose)。
  8. [次へ] をクリックします。
  9. フィードの設定を確認し、[送信] をクリックします。
  10. [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
  11. このシークレットは再び表示できないため、秘密鍵をコピーして保存します。
  12. [詳細] タブに移動します。
  13. [エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。
  14. [完了] をクリックします。

Amazon Data Firehose フィード用の API キーを作成する

  1. Google Cloud コンソールの [認証情報] ページに移動します。
  2. [認証情報を作成] をクリックし、[API キー] を選択します。
  3. キーをコピーして安全な場所に保存します。
  4. API キーのアクセスを Google SecOps API に制限します。

CloudWatch Logs から Firehose への IAM 権限を構成する

  1. AWS コンソールで、[IAM] > [ポリシー] > [ポリシーの作成] > [JSON] に移動します。
  2. 次のポリシー JSON を貼り付けます。<region> と <account-id> は、AWS リージョンとアカウント ID に置き換えます。

    {
    "Version": "2012-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Action": [
          "firehose:PutRecord",
          "firehose:PutRecordBatch"
          ],
          "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/cwlogs-to-secops"
       }
    ]
    }
    
  3. ポリシーに CWLtoFirehoseWrite という名前を付けて、[ポリシーを作成] をクリックします。

  4. [IAM]> [ロール]> [ロールを作成] に移動します。

  5. [カスタム信頼ポリシー] を選択して、次の内容を貼り付けます。

    {
    "Version": "2012-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Principal": {
          "Service": "logs.<region>.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
       }
    ]
    }
    
  6. ポリシー CWLtoFirehoseWrite をロールにアタッチします。

  7. ロールに「CWLtoFirehoseRole」という名前を付け、[ロールを作成] をクリックします。

Amazon Kinesis Data Firehose を Google SecOps に構成する

  1. AWS コンソールで、[Kinesis] > [Data Firehose] > [Create delivery stream] に移動します。
  2. 次の構成情報を指定します。
    • ソース: [直接 PUT またはその他のソース] を選択します。
    • 宛先: [HTTP エンドポイント] を選択します。
    • 名前: cwlogs-to-secops
    • HTTP エンドポイント URL: Google SecOps のフィード HTTPS エンドポイント URL に API キーを追加した <ENDPOINT_URL>?key=<API_KEY> を入力します。
    • HTTP メソッド: [POST] を選択します。
  3. [アクセスキー] で、次の操作を行います。
    • Google SecOps フィードで生成された秘密鍵を入力します(これは X-Amz-Firehose-Access-Key ヘッダーになります)。
    • バッファリングのヒント: [バッファサイズ] = [1 MiB]、[バッファ間隔] = [60 秒] に設定します。
    • 圧縮: [無効] を選択します。
    • S3 バックアップ: [無効] を選択します。
    • 再試行とロギングの設定はデフォルトのままにします。
  4. [Create delivery stream] をクリックします。

CloudWatch Logs グループを Firehose ストリームに登録する

  1. [CloudWatch] > [ログ] > [ロググループ] に移動します。
  2. ターゲット ロググループ(/aws/vpc/flowlogs など)を選択します。
  3. [サブスクリプション フィルタ] タブを開き、[作成] をクリックします。
  4. [Amazon Kinesis Data Firehose サブスクリプション フィルタを作成] を選択します。
  5. 次の構成情報を指定します。
    • 宛先: 配信ストリーム cwlogs-to-secops を選択します。
    • 権限を付与: ロール CWLtoFirehoseRole を選択します。
    • フィルタ名: 「all-events」と入力します。
    • フィルタ パターン: すべてのイベントを送信する場合は、空のままにします。
  6. [ストリーミングを開始] をクリックします。

オプション 3: Amazon S3 を使用して CSV 形式で AWS VPC Flow Logs を構成する

ログを CSV 形式に変換する(省略可)

  1. CSV の行が、VPC Flow Logs のカスタム形式で選択したフィールド(正規の v2 フィールド セット、v5/v7 セットなど)と一致する厳密で一貫した列順序に従っていることを確認します。パーサー オプションでヘッダー行が想定されている場合を除き、本番環境ファイルにヘッダー行を含めないでください。
  2. CSV ファイルを安定した接頭辞(s3://<your-bucket>/vpcflowlogs-csv/<region>/year=<year>/month=<month>/day=<day>/ など)に書き込みます。

AWS VPC Flow Logs(CSV)を取り込むように Google SecOps でフィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [+ 新しいフィードを追加] をクリックします。
  3. [フィード名] フィールドに、フィードの名前を入力します(例: AWS VPC Flow Logs - S3 (CSV))。
  4. [ソースタイプ] として [Amazon S3 V2] を選択します。
  5. [Log type] で [AWS VPC Flow (CSV)] を選択します。
  6. [次へ] をクリックします。
  7. 次の入力パラメータの値を指定します。
    • S3 URI: S3 バケットのアドレス(例: s3://<your-bucket>/vpcflowlogs-csv/<region>/)を入力します。
    • Source deletion options: 必要に応じて削除オプションを選択します。
    • Maximum File Age: デフォルトは 180 日です。
    • アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
    • シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。
    • アセットの名前空間: アセットの名前空間。
    • Ingestion labels: このフィードのイベントに適用されるラベル。
  8. [次へ] をクリックします。
  9. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

UDM マッピング テーブル

ログのサンプル ログフィールド UDM マッピング
"entries: { data: ""7,11111111111,eni-11aa1a1a1a1aa1a,1.1.1.1,2.2.2.2,51256,16020,6,14,3881,1723542839,1723542871,ACCEPT,OK,vpc-1aa1a1a1a1aa1aa,subnet-1aa1a1a1a1aa1a1,i-1aa1a1a1a1aa1a,0,IPv4,1.1.1.1,2.2.2.2,ap-northeast-1,masked_zone,-,-,-,-,ingress,,-,-,-,-,-,-,-,-,-,-"" collection_time: { seconds: 1741159282 nanos: 254633949 } }" 7 metadata.product_version
11111111111 metadata.product_log_id
eni-11aa1a1a1a1aa1a principal.user.product_object_id
1.1.1.1 principal.ip
2.2.2.2 target.ip
51256 principal.port
16020 target.port
6 network.ip_protocol
14 network.sent_packets
3881 network.received_bytes
1723542839 metadata.event_timestamp about.resource.attribute.labels(start_time)
1723542871 metadata.ingested_timestamp about.resource.attribute.labels(end_time)
ACCEPT security_result.action security_result.action_details
OK about.resource.attribute.labels (log-status)
vpc-1aa1a1a1a1aa1a principal.resource.attribute.labels (vpcID)
subnet-a1a1a1a1a1 principal.asset_id
i-1aa1a1a1a1aa1a principal.resource_ancestors.product_object_id
0 about.resource.attribute.labels (type)
IPv4 additional.fields (pkt-srcaddr-ip)
1.1.1.1 intermediary.ip
2.2.2.2 additional.fields (tcp_flags)
ap-northeast-1 not getting mapped
masked_zone not getting mapped
- about.resource.attribute.labels (sublocation_type)
- about.resource.attribute.labels (sublocation_id)
- about.resource.attribute.labels (pkt_src_aws_service)
- about.resource.attribute.labels (pkt_dst_aws_service)
ingress network.direction
additional.fields (traffic_path)
- not getting mapped
- not getting mapped-
"entries: { data: ""7,11111111111,eni-11aa1a1a1a1aa1a,5.5.5.5,2.2.2.2,53102,16020,6,8,2112,1723542839,1723542871,ACCEPT,OK,vpc-1aa1a1a1a1aa1a,subnet-1aa1a1a1a1aa1a,i-1aa1a1a1a1aa1a,0,IPv4,5.5.5.5,2.2.2.2,ap-northeast-1,masked_zone,-,-,-,-,ingress,,-,-,-,-,-,-,-,-,-,-"" collection_time: { seconds: 1741159390 nanos: 374934225 } }" 7 metadata.product_version
11111111111 metadata.product_log_id
eni-11aa1a1a1a1aa1a principal.user.product_object_id
5.5.5.5 principal.ip
2.2.2.2 target.ip
53102 principal.port
16020 target.port
6 network.ip_protocol
8 network.sent_packets
2112 network.received_bytes
1723542839 metadata.event_timestamp about.resource.attribute.labels(start_time)
1723542871 metadata.ingested_timestamp about.resource.attribute.labels(end_time)
ACCEPT security_result.action security_result.action_details
OK about.resource.attribute.labels (log-status)
vpc-1aa1a1a1a1aa1a principal.resource.attribute.labels (vpcID)
subnet-1aa1a1a1a1aa1a principal.asset_id
i-1aa1a1a1a1aa1a principal.resource_ancestors.product_object_id
0 about.resource.attribute.labels (type)
IPv4 additional.fields (pkt-srcaddr-ip)
5.5.5.5 intermediary.ip
2.2.2.2 additional.fields (tcp_flags)
ap-northeast-1 not getting mapped
masked_zone not getting mapped
- about.resource.attribute.labels (sublocation_type)
- about.resource.attribute.labels (sublocation_id)
- about.resource.attribute.labels (pkt_src_aws_service)
- about.resource.attribute.labels (pkt_dst_aws_service)
ingress network.direction
additional.fields (traffic_path)
- not getting mapped
- not getting mapped1
"entries: { data: ""7,11111111111,eni-11aa1a1a1a1aa1a,1.1.2.2,1.1.2.1,36358,42659,6,1091,3.754327e+06,1747981553,1747981582,ACCEPT,OK,vpc-1aa1a1a1a1aa1a,subnet-1aa1a1a1a1aa1a,i-1aa1a1a1a1aa1a,0,IPv4,1.1.2.2,1.1.2.1,ap-northeast-1,apne1-az1,-,-,-,-,egress,1,-,-,-,-,-,-,-,-,-,-,604249"" collection_time: { seconds: 1748238552 nanos: 479960397 } }" 7 metadata.product_version
11111111111 metadata.product_log_id
eni-11aa1a1a1a1aa1a about.resource.attribute.labels
1.1.2.2 principal.ip
1.1.2.1 target.ip
36358 principal.port
42659 target.port
6 network.ip_protocol
1091 network.sent_packets
3.75E+06 network.sent_bytes
1747981553 metadata.event_timestamp about.resource.attribute.labels(start_time)
1747981582 metadata.ingested_timestamp about.resource.attribute.labels(end_time)
ACCEPT security_result.action security_result.action_details
OK about.resource.attribute.labels (log-status)
vpc-1aa1a1a1a1aa1a principal.resource.attribute.labels (vpcID)
subnet-1aa1a1a1a1aa1a principal.asset_id
i-1aa1a1a1a1aa1a principal.resource_ancestors.product_object_id
0 additional.fields (tcp_flags)
IPv4 about.resource.attribute.labels(type)
1.1.2.2 "additional.fields (pkt-srcaddr-ip)
条件:
if [pkt_dstaddr_ip] != [dstaddr] will map to intermediary.ip"
1.1.2.1 "additional.fields (pkt-dstaddr-ip)
条件:
if [pkt_srcaddr_ip] != [srcaddr] will map to intermediary.ip"
ap-northeast-1 principal.location.country_or_region
apne1-az1 principal.location.name
- about.resource.attribute.labels (sublocation_type)
- about.resource.attribute.labels (sublocation_id)
- about.resource.attribute.labels (pkt_src_aws_service)
- about.resource.attribute.labels (pkt_dst_aws_service)
egress network.direction
1 additional.fields (traffic_path)
- not getting mapped
604249 not getting mapped
Connection_info.Tcp_flags additional.fields
connection_info.tcp_flags additional.fields
Dst_endpoint.Interface_uid target.user.product_object_id
Log_status additional.fields
Src_endpoint.Instance_uid principal.user.product_object_id
Tcp_flags additional.fields
tcp_flags additional.fields
tgw_dst_az_id target.resource.attribute.cloud.availability_zone
tgw_id target.resource.product_object_id
tgw_src_az_id principal.location.name
Traffic_Bytes network.sent_bytes
Traffic_Packets network.sent_packets

リリースの差分

Google SecOps は、AWS VPC Flow Logs パーサーのバージョン 16.0 をリリースしました。これには、Parser_Name ログフィールドの UDM フィールドへのマッピングと、イベントタイプのマッピングに大幅な変更が含まれています。

ログフィールド マッピングの差分

ログフィールド 古いマッピング 現在のマッピング
bytes network.sent_bytes Removed
Connection_info.Tcp_flags network.dhcp.flags additional.fields
connection_info.tcp_flags network.dhcp.flags additional.fields
Dst_endpoint.Interface_uid additional.fields target.user.product_object_id
flow_direction about.resource.attribute.labels Removed
Log_status about.resource.attribute.labels additional.fields
Src_endpoint.Instance_uid additional.fields principal.user.product_object_id
Tcp_flags network.dhcp.flags additional.fields
tcp_flags network.dhcp.flags additional.fields
tgw_dst_az_id target.resource.attribute.labels target.resource.attribute.cloud.availability_zone
tgw_id additional.fields target.resource.product_object_id
tgw_src_az_id principal.resource.attribute.labels principal.location.name
Traffic_Bytes additional.fields network.sent_bytes
Traffic_Packets additional.fields network.sent_packets

イベントタイプ マッピングの差分

汎用的に分類されていた複数のイベントが、意味のあるイベントタイプで適切に分類されるようになりました。

イベントタイプ ログのフィールド 理由
FILE_UNCATEGORIZED Bytes この PR で新たに処理され、適切な特定のイベントタイプにマッピングされます。
NETWORK_CONNECTION protocol この PR で新たに処理され、適切な特定のイベントタイプにマッピングされます
NETWORK_UNCATEGORIZED Class_name この PR で新たに処理され、適切な特定のイベントタイプにマッピングされます
NETWORK_UNCATEGORIZED flow_direction この PR で新たに処理され、適切な特定のイベントタイプにマッピングされます
STATUS_UPDATE [src_endpoint][ip] この PR で新たに対応し、適切な特定のイベントタイプにマッピング

変更ログ

このパーサーの変更ログを表示する

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。