Amazon Athena
ユーザーガイド

Amazon VPC フローログのクエリ

Amazon Virtual Private Cloud フローログは VPC のネットワークインターフェイスとの間で行き来する IP トラフィックに関する情報をキャプチャします。このログを使用してネットワークトラフィックのパターンを調査し、VPC ネットワーク全体の脅威やリスクを特定します。

Athena でログのクエリを開始する前に、VPC フローログを有効化し、ログが Amazon S3 バケットに保存されるように設定します。ログを作成したら、それを数分間実行していくらかのデータを収集します。ログは Athena により直接クエリできる、GZIP 圧縮形式で作成されます。

VPC フローログのテーブルの作成

Amazon VPC テーブルを作成するには

  1. 次の DDL ステートメントをコピーして Athena コンソール内に貼り付けます。このクエリは ROW FORMAT DELIMITED を指定し、SerDe の指定が省略されます。つまり、クエリでは、CSV、TSV、およびカスタム区切りファイルの LazySimpleSerDe を使用します。また、このクエリでは、フィールドはスペースで終了します。

  2. ログデータの保存先の S3 バケットを指すように LOCATION 's3://your_log_bucket/prefix/AWSLogs/{subscribe_account_id}/vpcflowlogs/{region_code}' を変更します。

    CREATE EXTERNAL TABLE IF NOT EXISTS vpc_flow_logs ( version int, account string, interfaceid string, sourceaddress string, destinationaddress string, sourceport int, destinationport int, protocol int, numpackets int, numbytes bigint, starttime int, endtime int, action string, logstatus string ) PARTITIONED BY (dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LOCATION 's3://your_log_bucket/prefix/AWSLogs/{subscribe_account_id}/vpcflowlogs/{region_code}' TBLPROPERTIES ("skip.header.line.count"="1");
  3. Athena コンソールでクエリを実行します。クエリが完了すると、Athena は vpc_flow_logs テーブルを登録し、そのデータに対してクエリを発行できるように準備します。

  4. 次のサンプルクエリのように、パーティションを作成してデータを読み取れるようにします。このクエリは、指定日の 1 つのパーティションを作成します。必要に応じて、日付と場所のプレースホルダーを置き換えます。

    注記

    このクエリは、指定日に対して単一のパーティションのみを作成します。このプロセスを自動化するには、このクエリを実行するスクリプトを使用して、year/month/day にパーティションを作成する、または AWS Glue クローラを使用して、対象の Amazon S3 バケットのパーティションを作成します。詳細については、「AWS Glue データカタログと Amazon S3 を同期させるためのクローラのスケジュール設定」を参照してください。

    ALTER TABLE vpc_flow_logs ADD PARTITION (dt='YYYY-MM-dd') location 's3://your_log_bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/YYYY/MM/dd';

Amazon VPC フローログのクエリ例

次のクエリは、すべての拒否された TCP 接続を一覧表示します。新しく作成した日付パーティション列 dt を使用して、該当イベントが発生した週の曜日を抽出します。

このクエリは日付/時刻関数および演算子を使用します。dt 文字列の列の値を、日付関数 from_iso8601_timestamp(string) でタイムスタンプに変換し、day_of_week を使用してタイムスタンプから曜日を抽出します。

SELECT day_of_week(from_iso8601_timestamp(dt)) AS day, dt, interfaceid, sourceaddress, action, protocol FROM vpc_flow_logs WHERE action = 'REJECT' AND protocol = 6 LIMIT 100;

最大数の HTTPS リクエストを受信しているサーバーを確認するには、次のクエリを使用します。HTTPS ポート 443 で受信したパケット数をカウントし、送信先 IP アドレス別にグループ分けして、上位 10 のサーバーを返します。

SELECT SUM(numpackets) AS packetcount, destinationaddress FROM vpc_flow_logs WHERE destinationport = 443 GROUP BY destinationaddress ORDER BY packetcount DESC LIMIT 10;

詳細については、AWS Big Data Blog の記事「Amazon Kinesis Firehose、Athena、および Amazon QuickSight による VPC フローログの分析」を参照してください。