「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」を指定することが重要なので気をつける。

f:id:tmknom:20180830103529p:plain f:id:tmknom:20180830103550p:plain

フローログ作成

ここでは、サブネットのフローログを作成する。まずは、サブネットのページを開く。

次に、ログを取得したいサブネットを選択する。そして、「フローログ」タブを選択して、「フローログ作成」ボタンをクリック。

f:id:tmknom:20180830103818p:plain

フィルターによって、取得するログの種類を選択できる。

ここではフィルター「拒否」を選択する。次にDestination log groupに適当なロググループ名を入力。最後にIAM Roleに先ほど作成したロールを選択し、「作成」ボタンをクリック。

f:id:tmknom:20180830103933p:plain

拍子抜けするほど簡単だが、以上で作成完了である。

f:id:tmknom:20180830103956p:plain

ログの確認

本記事では、フィルタ設定で「拒否」を選択しているので、拒否された通信のログだけ、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

f:id:tmknom:20180830104217p:plain

率直に言えば、人類には早すぎる感じの、味気ないログである。

ログ詳細

ログの意味は、フローログレコードに記載がある。先ほど提示したログの意味を整理してみよう。

フィールド 説明
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を有効にしておくのは悪くなさそう。

参考