「VPC Flow Logs」をAWSマネジメントコンソールで設定する
VPC Flow Logs
概要
VPC Flow LogsはVPC内のIPトラフィックをキャプチャして、CloudWatch Logsに保存してくれる機能である。VPC Flow Logsでは、下記の単位でキャプチャすることが可能である。
本記事では、サブネット単位でキャプチャする例を提示する。VPC Flow Logsの詳細は公式ドキュメントを参照すること。
構築手順
VPC Flow Logsを使えるようにするには、大雑把に2つのことをやる。
- IAMロールの定義
- VPC Flow Logsの作成
IAMロール
公式ドキュメントでは、最低限必要なIAMポリシーが提示されている。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Effect": "Allow", "Resource": "*" } ] }
このポリシーをそのままIAMロールにアタッチしてもいいが、AWS管理ポリシーの一つ「AmazonAPIGatewayPushToCloudWatchLogs」をアタッチするほうが楽である。ちょっと余計な権限がついているが許容範囲だろう。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:PutLogEvents", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "*" } ] }
というわけで、最終的に、下記のようなIAMロールを作成した。信頼関係に「vpc-flow-logs.amazonaws.com」を指定することが重要なので気をつける。
フローログ作成
ここでは、サブネットのフローログを作成する。まずは、サブネットのページを開く。
次に、ログを取得したいサブネットを選択する。そして、「フローログ」タブを選択して、「フローログ作成」ボタンをクリック。
フィルターによって、取得するログの種類を選択できる。
ここではフィルター「拒否」を選択する。次にDestination log groupに適当なロググループ名を入力。最後にIAM Roleに先ほど作成したロールを選択し、「作成」ボタンをクリック。
拍子抜けするほど簡単だが、以上で作成完了である。
ログの確認
本記事では、フィルタ設定で「拒否」を選択しているので、拒否された通信のログだけ、CloudWatch Logsに記録される。
ログの生データ
CloudWatch Logsには、下記のようなレコードが記録される。
2 123456789012 eni-075e2563f4892db53 34.201.236.93 10.255.64.152 443 34012 6 11 660 1534471819 1534471865 REJECT OK
率直に言えば、人類には早すぎる感じの、味気ないログである。
ログ詳細
ログの意味は、フローログレコードに記載がある。先ほど提示したログの意味を整理してみよう。
フィールド | 説明 | 値 |
---|---|---|
version | VPC フローログバージョン。 | 2 |
account-id | フローログの AWS アカウント ID。 | 123456789012 |
interface-id | ログストリームが適用されるネットワークインターフェイスの ID。 | eni-075e2563f4892db53 |
srcaddr | 送信元の IPv4 または IPv6 アドレス。 | 34.201.236.93 |
dstaddr | 送信先の IPv4 または IPv6 アドレス。 | 10.255.64.152 |
srcport | トラフィックの送信元ポート。 | 443 |
dstport | トラフィックの送信先ポート。 | 34012 |
protocol | トラフィックの IANA プロトコル番号。 | 6 |
packets | キャプチャウィンドウ中に転送されたパケットの数。 | 11 |
bytes | キャプチャウィンドウ中に転送されたバイト数。 | 660 |
start | キャプチャウィンドウの開始時刻 (Unix 時間)。 | 1534471819 |
end | キャプチャウィンドウの終了時刻 (Unix 時間)。 | 1534471865 |
action | トラフィックに関連付けられたアクション(ACCEPT/REJECT)。 | REJECT |
log-status | フローログのロギングステータス。 | OK |
可視化
自分では検証してないが、AWSのブログにAmazon Kinesis Firehose, Amazon Athena, Amazon QuickSightを用いたVPCフローログの分析という記事があるので、可視化をしたい場合は参考にするといいだろう。
まとめ
VPC Flow Logsでトラフィックをキャプチャする方法を紹介した。トラブルシューティング上、必要に迫られて導入したが、非常に簡単に導入することができた。
それほど必要になる頻度は高くないが、トラフィック不達が原因のトラブル発生時には、VPC Flow Logs以外にログが残っていない、というケースもあるので、困ってなくてもとりあえずVPC Flow Logsを有効にしておくのは悪くなさそう。