LoginSignup
7
1

More than 1 year has passed since last update.

S3に格納されているVPCフローログをAthenaでサクっと抽出する手順

Posted at

はじめに

外部環境⇒自社管理のAWS環境内リソースへの通信がうまくいかないことがあり、
VPCフローログでアクセス拒否されているのか調査したい場面がありました。
ログが少なければ「該当しそうなログをダウンロードしてGrep検索」で乗り切れますが、
大量のログが吐かれていたので、Athenaで対象のログを抽出しました。
備忘として記載します。

やりたいこと & 前提

・IPアドレス(xxx.xxx.xxx.xx)⇒IPアドレス(△△.△△.△.△△)の通信を、VPCフローログから抽出したい。
・VPCフローログはS3に格納されている。

事前確認

対象のVPCフローログをコンソールで確認し、保存先のS3バケットを特定します。

VPCフローログの設定確認 & 保存先S3バケット確認

VPC画面にて、対象VPCの詳細画面に遷移します。
「フローログ」タブを開き、「送信先タイプ」「送信先名」を確認します。
「tst」というS3バケットに保存されていることが分かりました。
athena1.png

S3バケットのディレクトリ構成確認

「フローログ」タブの「送信先」を押下し、保存先のS3バケットに移動します。
確認したい日付のフォルダまで遷移し、画面上部のディレクトリ構成を確認します。
athena2.png

Athenaでの抽出手順

Athena画面に遷移します。
athena3.png

データベース作成

クエリ画面にて、データベースを作成します。
下記SQLをコピペして実行します。
正常終了すると、データベースのドロップダウンリストに「VPCFlowLogs」が追加されます。
データベースのドロップダウンリストから「VPCFlowLogs」を選択します。
データベース名は、任意の名前で指定可能です(今回は「VPCFlowLogs」と指定しています)。

 ※「実行」ボタンがグレーアウトされていて押下できない場合、Athena自身のログ格納先(S3バケット)設定をしてください。
athena4.png

CREATE DATABASE VPCFlowLogs;

テーブル作成

クエリ画面にて、テーブルを作成します。
(データベース作成のSQLは削除してしまって大丈夫です。)
下記SQLをコピペし、事前に確認したディレクトリ情報に書き換えた後、実行します。
基本的には、S3バケット名・AWSアカウント番号の書き換えのみになります。
athena5.png

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://{S3バケット名}/AWSLogs/{AWSアカウント番号}/vpcflowlogs/ap-northeast-1/'
TBLPROPERTIES ("skip.header.line.count"="1");

S3バケットのVPCフローログをAthenaに取り込む

クエリ画面にて、S3バケットに格納されているVPCフローログをAthenaに取り込みます。
日付毎に取り込む必要がある為、下記日付部分を変更しつつ必要な日数分、実行します。
 ・dt=YYYY-MM-DD
 ・s3://{S3バケット名}/AWSLogs/{AWSアカウント番号}/vpcflowlogs/ap-northeast-1/YYYY/MM/DD

 ※dt=YYYY/MM/DDと指定するとパーティションが壊れ、やり直しになるのでご注意ください。
athena6.png

ALTER TABLE vpc_flow_logs
ADD PARTITION (dt='2023-04-01')
location 's3://{S3バケット名}/AWSLogs/{AWSアカウント番号}/vpcflowlogs/ap-northeast-1/2023/04/01';

セットアップは以上になります。

対象ログを抽出してみる

クエリ画面にて、下記SQLをコピペし、実際のIPアドレスに書き換えた後、実行します。
画面下部のクエリ結果を確認します。
確認したかったログが抽出できました!
athena8.png

SELECT *
FROM vpc_flow_logs
WHERE sourceaddress = 'xxx.xxx.xxx.xx' and 	destinationaddress = '△△.△△.△.△△';

他者に当該ログを共有したい場合は、結果をCSVでダウンロードすることも可能です。

参考にさせて頂いた記事

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1