始めに

今回はVPCフローログの取得と確認について書いていきます。初歩的な内容となります。
VPCフローログの使いどころとしては、「通信確認」「意図しない通信監視」「監査対応」等です。
VPC フローログは、VPC のネットワークインターフェイスとの間で行き来する IP トラフィックに関する情報をキャプチャできるようにする機能です。フローログデータは Amazon CloudWatch Logs または Amazon S3 に発行(保存先)できます。
VPCフローログは以下に対して設定出来ます。
- VPC
- サブネット
- ネットワークインタフェース
なお、VPC単位に設定した場合はVPC範囲内に存在するネットワークインターフェースに対するトラフィックがキャプチャされます。
本記事ではフローログを「サブネット」に設定し、出力先はS3とし、S3に格納されたログを確認していきたいと思います。

ログの確認ではAthenaにも少し触れます。
フローログの設定
前提(権限)
前提条件として、操作者(IAMアカウント)はS3バケットを作成可能であり、VPCフローログも作成可能とします。(両方に権限を持っていれば特にロールとか気にすることなく簡単に作れます)
準備(S3バケット作成)
最初に同一リージョンにS3バケットを作成しておきます。

今回は「flowtest00001」という名前で作成しました。作成後「ARN」をコピーしておきます。
任意サブネットにフローログを作成
VPCサービス内のサブネットメニューより、任意サブネットを選択して「フローログを作成」をクリックします。

今回は基本的にデフォルトのまま作成を進めますが、送信先の設定は「Amazon S3 バケットに送信」を選択して、S3バケットARNは先ほどコピーしたARNをペーストします。
以下のように作成されました。

フローログの確認
フローログの作成から5分か10分程度経過すると、S3バケットにフローログが次々と作成されます。
S3に格納されたファイルを確認
格納パスは「AWSLogs/{account_id}/vpcflowlogs/{region_code}/YYYY/MM/dd」であり、適当な単位でgz化されたファイルとして格納されます。

# 中身はこんな感じです。
version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes start end action log-status
2 111111111111 eni-0ba1267b9b9a2aaaa xx.xx.xx.xx xx.xx.xx.xx 49667 49654 6 2 80 1639542588 1639542590 ACCEPT OK
2 111111111111 eni-0ba1267b9b9a2aaaa xx.xx.xx.xx xx.xx.xx.xx 8080 49666 6 15 6528 1639542588 1639542590 ACCEPT OK
2 111111111111 eni-0ba1267b9b9a2aaaa xx.xx.xx.xx xx.xx.xx.xx 49654 49667 6 2 80 1639542588 1639542590 ACCEPT OK
2 111111111111 eni-0ba1267b9b9a2aaaa xx.xx.xx.xx xx.xx.xx.xx 49666 8080 6 18 5273 1639542588 1639542590 ACCEPT OK
Athenaを使ってみる
キャプチャ数が少ない時は、S3のgzファイルを個々に確認でも問題ありません。しかし数が多い場合はAthenaを利用するとクエリも使えます。
Amazon Athena はインタラクティブなクエリサービスで、Amazon S3 内のデータを標準 SQL を使用して簡単に分析できます。Athena はサーバーレスなので、インフラストラクチャの管理は不要です。実行したクエリに対してのみ料金が発生します。

コストは1TB辺り5$です(2021年12月時点)。少ないスキャン量でも最低10Mbyte分のコストになるため、1回スキャンで最低0.05$発生します。

公式ページに習って操作してみます。
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/vpc-flow-logs.html
■始めにテーブルを作成します。
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 (`date` date)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION 's3://your_log_bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/'
TBLPROPERTIES ("skip.header.line.count"="1");
※フィールドはフローログのデフォルト項目に合わせています。
※LOCATIONの「prefix」「account_id」「region_code」は適宜置き換えます。

■次にテーブルに対して具体的な日付でパーティションを追加します。
ALTER TABLE vpc_flow_logs
ADD PARTITION (`date`='YYYY-MM-dd')
location 's3://your_log_bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/YYYY/MM/dd';
※「YYYY」「MM」「dd」は任意日付で置き換えます。
※「prefix」「account_id」「region_code」も適宜置き換えます。

■最後に任意のクエリを実行すると結果が取得出来ます。
例:送信先IPアドレスがx.x.x.xのレコード
SELECT *
FROM vpc_flow_logs
WHERE destinationaddress = 'x.x.x.x'
LIMIT 100;

クエリ実行時に「スキャンしたデータ」も表示されます。上記の場合は10Mbyte未満のため、0.05$かかったということになります。
Athena統合を利用すると、Athenaでのクエリ実行までをより楽に準備出来ます。
後始末
確認後、以下は削除します。
- 設定したVPCフローログ
→削除しかありません(無効化とかありません)
不要であれば、S3バケット内のファイルも削除します。
まとめ
VPCフローログの設定方法と確認方法について記載しました。
私はAthenaは慣れていないせいか少し難しく感じました。データ量(スキャン量)に応じてコストが発生するため、不用意な使いすぎには注意しなきゃなと感じます。

最後までご覧いただき、ありがとうございました。
コメント