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
次はテーブルを作成します。 先程作成したデータベースを選択した後、以下のクエリを入力して 実行
をクリックします。
CREATE EXTERNAL TABLE IF NOT EXISTS `vpc_flow_logs` (
`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,
`region` 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 (`date` date)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION 's3://[BUCKET-NAME]/AWSLogs/[ACCOUNT-ID]/vpcflowlogs/ap-northeast-1/'
TBLPROPERTIES ("skip.header.line.count"="1");
Step.12
これでテーブルが作成されました。
後は任意の SQL を実行してトラフィックログを解析します。
コメント