始めに
今回は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を利用するとクエリも使えます。
公式ページに習って操作してみます。
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$かかったということになります。
後始末
確認後、以下は削除します。
- 設定したVPCフローログ
→削除しかありません(無効化とかありません)
不要であれば、S3バケット内のファイルも削除します。
まとめ
VPCフローログの設定方法と確認方法について記載しました。
私はAthenaは慣れていないせいか少し難しく感じました。データ量(スキャン量)に応じてコストが発生するため、不用意な使いすぎには注意しなきゃなと感じます。
最後までご覧いただき、ありがとうございました。
コメント