AWS で VPC Flow Log を S3 に保存し Athena で解析する
AWS VPC でトラフィックフローを取得する際、ログの保存先は以下から選択できます。
- CloudWatch Logs
- S3
今回は「S3 上にログを保存し、Athena 上から SQL でクエリーする」までの手順をメモしておきます。
S3¶
まず始めにログを保存しておく S3 Bucket を作成しておきます。
Step.1¶
S3 の管理画面から バケットを作成
をクリックします。
Step.2¶
S3 Bucket のパラメータは基本的にデフォルトのままで問題ありません。
Step.3¶
これで S3 Bucket が作成されました。
VPC¶
次は VPC で Flow Log を有効化します。
Step.4¶
VPC の管理画面からトラフィックログを取得したい VPC を選択し、フローログを作成
をクリックします。
Step.5¶
今回は以下画像、赤線部分のように設定しました。 ログ保存先の S3 Bucket 名は arn:aws:s3:::BUCKET-NAME
のように指定します。 ログレコード形式は AWS のデフォルト形式
でも良いのですが、今回は カスタム形式
を選択し、更に 全て選択
をクリックして全てのフィールドをログに記録するようにしました。
尚、デフォルトのログ形式は以下の通りです。
${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status}
全てのフィールドを選択した場合は以下の通りです。
${account-id} ${action} ${az-id} ${bytes} ${dstaddr} ${dstport} ${end} ${flow-direction} ${instance-id} ${interface-id} ${log-status} ${packets} ${pkt-dst-aws-service} ${pkt-dstaddr} ${pkt-src-aws-service} ${pkt-srcaddr} ${protocol} ${region} ${srcaddr} ${srcport} ${start} ${sublocation-id} ${sublocation-type} ${subnet-id} ${tcp-flags} ${traffic-path} ${type} ${version} ${vpc-id}
Athena¶
最後は Athena で S3 Bucket 上のログを解析出来るように設定します。
Step.6¶
Athena の管理画面へアクセス、クエリエディタから 設定
→ 管理
をクリックします。
Step.7¶
解析対象になる S3 Bucket を指定します。
今回は LOCATION 's3://[BUCKET-NAME]/AWSLogs/[ACCOUNT-ID]/vpcflowlogs/
のような形式で設定しました。 予想されるバケット所有者
には解析対象となる S3 Bucket のアカウント ID を入力しておきます。
Step.8¶
これで解析対象となる S3 Bucket の設定が保存されました。
Step.9¶
次はクエリエディタの エディタ
からデータベースを作成します。 CREATE DATABASE [DB-NAME]
のように入力したら画面下部の 実行
をクリックします。
Step.10¶
これでデータベースが作成されました。
Step.11¶
次はテーブルを作成します。 先程作成したデータベースを選択した後、以下のクエリを入力して 実行
をクリックします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
Step.12¶
これでテーブルが作成されました。
後は任意の SQL を実行してトラフィックログを解析します。