Amazon Athena を使用して VPC フローログを分析する方法を教えてください。

所要時間2分
0

Amazon Athena を使用して Amazon 仮想プライベートクラウド (Amazon VPC) フローログを分析したいと考えています。

簡単な説明

Amazon VPC フローログを使用してネットワークトラフィックパターンを分析し、Amazon VPC ネットワーク全体の脅威とリスクを特定します。

解決策

Athena を使用して Amazon VPC フローログを分析する

Athena を使用して Amazon VPC フローログを分析するには、次の手順を実行します。

  1. Amazon Athena コンソールのクエリエディタを使用して、次のコマンドを実行してデータベースを作成します。test_db_vpclogs を、使用しているデータベースの名前に置き換えてください。

    CREATE DATABASE test_db_vpclogs;
    

    **重要:**フローログが保存されている Amazon Simple Storage Service (Amazon S3) バケットと同じ AWS リージョンにデータベースを作成するのがベストプラクティスです。

  2. データベースで、次のコマンドを実行して VPC フローログのテーブルを作成しますtest_table_vpclogs を実際のテーブルの名前に置き換えてください。また、LOCATION パラメータを変更して、ログデータを含む Amazon S3 バケットを指すようにします。

    CREATE EXTERNAL TABLE `test_table_vpclogs`(
      `version` int,
      `account_id` string,
      `interface_id` string,
      `srcaddr` string,
      `dstaddr` string,
      `srcport` int,
      `dstport` int,
      `protocol` bigint,
      `packets` bigint,
      `bytes` bigint,
      `start` bigint,
      `end` bigint,
      `action` string,
      `log_status` string,
      `vpc_id` string,
      `subnet_id` string,
      `instance_id` string,
      `tcp_flags` int,
      `type` string,
      `pkt_srcaddr` string,
      `pkt_dstaddr` string,
      `az_id` string,
      `sublocation_type` string,
      `sublocation_id` string,
      `pkt_src_aws_service` string,
      `pkt_dst_aws_service` string,
      `flow_direction` string,
      `traffic_path` int)
    PARTITIONED BY (
      `region` string,
      `day` string)
    ROW FORMAT DELIMITED
      FIELDS TERMINATED BY ' '
    STORED AS INPUTFORMAT
      'org.apache.hadoop.mapred.TextInputFormat'
    OUTPUTFORMAT
      'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION
      's3://awsexamplebucket/awsexampleprefix/awsexamplelogs/1111222233334444/vpcflowlogs/'
    TBLPROPERTIES (
      'projection.day.format'='yyyy/MM/dd',
      'projection.day.range'='2021/01/01,NOW',
      'projection.day.type'='date',
      'projection.enabled'='true',
      'projection.region.type'='enum',
      'projection.region.values'='us-east-1,us-west-2,ap-south-1,eu-west-1',
      'skip.header.line.count'='1',
      'storage.location.template'='s3://awsexamplebucket/awsexampleprefix/awsexamplelogs/1111222233334444/vpcflowlogs/${region}/${day}'
      )

    **注記:**上記のコマンドは、パーティションプロジェクションを使用してテーブルを作成し、テーブルをパーティション化し、自動的にパーティションを作成します。投影されたパーティションが Amazon S3 に存在しない場合でも、Athena はそのパーティションを投影します。クエリでは分割された属性を使用するのがベストプラクティスです。

  3. Amazon Athena コンソールのクエリエディタを使用して、テーブルに対する SQL ステートメントを実行します。クエリの保存、以前のクエリの表示、クエリ結果の CSV 形式でのダウンロードができます。

クエリの例

**注記:**test_table_vpclogs を実際のテーブルの名前に置き換えてください。クエリに合わせて列の値やその他の変数を変更します。

指定した期間の最初の 100 件のフローログエントリを時系列で表示するには、次のようなクエリを実行します。

SELECT *
 FROM test_table_vpclogs
 WHERE day >= '2021/02/01' AND day < '2021/02/28'
 ORDER BY day ASC
 LIMIT 100;

指定した期間に上位 10 件の HTTP パケットを受信したサーバーを表示するには、次のようなクエリを実行します。

SELECT SUM(packets) AS packetcount,
       dstaddr
FROM test_table_vpclogs
WHERE dstport = 443
  AND day >= '2021/03/01'
  AND day < '2021/03/31'
GROUP BY dstaddr
ORDER BY packetcount DESC
LIMIT 10;

前のクエリは、HTTPS ポート 443 で受信したパケットの数をカウントし、宛先 IP アドレスごとにグループ化します。次に、前週の上位 10 件のエントリを返します。

指定した時間範囲で作成されたログを確認するには、次のようなクエリを実行します。

SELECT interface_id,
       srcaddr,
       action,
       protocol,
       to_iso8601(from_unixtime(start)) AS start_time,
       to_iso8601(from_unixtime("end")) AS end_time
FROM test_table_vpclogs
WHERE DAY >= '2021/04/01'
  AND DAY < '2021/04/30';

指定した時間範囲における特定の送信元 IP アドレスのフローログを表示するには、次のようなクエリを実行します。

SELECT *
FROM test_table_vpclogs
WHERE srcaddr = '10.117.1.22'
  AND day >= '2021/02/01'
  AND day < '2021/02/28';

指定した時間範囲で拒否された TCP 接続を一覧表示するには、次のようなクエリを実行します。

SELECT day,
       interface_id,
       srcaddr,
       action,
       protocol
FROM test_table_vpclogs
WHERE action = 'REJECT'
    AND protocol = 6
    AND day >= '2021/02/01' AND day < '2021/02/28'
LIMIT 10;

「10.117」で始まる IP アドレス範囲のフローログを表示するには、次のようなクエリを実行します。

SELECT *
FROM test_table_vpclogs
WHERE split_part(srcaddr,'.', 1)='10'
  AND split_part(srcaddr,'.', 2) ='117'

時間範囲内の特定の宛先 IP アドレスのフローログを表示するには、次のようなクエリを実行します。

SELECT *
FROM test_table_vpclogs
WHERE dstaddr = '10.0.1.14'
AND day >= '2021/01/01'
AND day < '2021/01/31'

関連情報

フローログを使用して VPC のトラフィックをモニタリングするにはどうすればよいですか?

Amazon Athena と Amazon QuickSight を使用した VPC フローログの分析

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ