VPCフローログは、Amazon Web Services(AWS)などのクラウドサービスが提供する機能で、Virtual Private Cloud(VPC)内のネットワークインターフェースを出入りするIPトラフィックの情報を記録します。これらのログは、ネットワーク監視やセキュリティ分析、トラブルシューティングに利用されます。有効化すると、トラフィックの送信元・宛先・プロトコル、転送バイト数といったデータが取得でき、VPC内のネットワーク状況を把握するうえで欠かせない情報となります。異常なトラフィックパターンや潜在的なセキュリティ脅威の検知にもよく使われます。
VPCフローログを分析することで、管理者はネットワークの偵察行為、不正なデータ持ち出し、想定外のトラフィックパターンといった悪意ある挙動を特定できます。また、ネットワークポリシーや各種規制への準拠を確認するのにも役立ちます。たとえば、フローログを使えばネットワーク構成が自社のセキュリティ基準や規制要件を満たしているかを検証できます。さらにパフォーマンス分析にも有用で、VPC内のネットワークトラフィックやリソース配分の最適化にも活用できます。
VPCフローログのクエリに使えるAWSサービスはいくつかあり、Amazon Athena、Amazon CloudWatch Logs、AWS ElasticSearch Service、Amazon QuickSight、AWS Glue、Amazon Redshiftなどが代表的です。本記事では、AWS CloudFormationを使ってAthenaとS3の連携をセットアップする方法を解説します。
AWS Athenaは、標準SQLでAmazon S3上のデータを直接分析できるインタラクティブなクエリサービスです。S3バケットに保存したVPCフローログをそのままAthenaでクエリでき、サーバーレスでインフラ構築も不要なため、複雑なクエリやアドホック分析に最適です。
従来はAthenaのセットアップが煩雑で、S3をデータソースとして手作業で設定する必要があり、ログをクエリする際にも目的のデータを取得するためのSQLを自分で書く必要がありました。AWSはこのプロセスを簡素化し、CloudFormationテンプレートを生成する仕組みと、トラフィックフローの詳細を把握できる定義済みクエリを多数提供するようになりました。
セットアップ手順は次のとおりです。
ステップ1:VPCフローログを有効化する
VPCフローログを有効にするために必要な設定項目は以下のとおりです。有効化したら、指定したS3バケットを開いてログが届いているか確認してください。

VPCフローログの有効化
ステップ2:コンソールからCloudFormationテンプレートを生成する
VPCの画面を開き、Flow logsタブでAmazon S3に出力しているフローログを選択し、Actions、Generate Athena integrationの順にクリックします。

Athena連携の生成
Generate Athena Integrationをクリックすると、次の画面で必要な情報を入力します。本記事ではCloudFormationテンプレート用とクエリ結果用に同じS3バケットを使用していますが、別々のバケットを指定することも可能です。

Athena連携生成 — S3バケットの選択
ステップ2:CloudFormationスタックを作成する
「Generate Athena Integration」をクリックして次のページに進んだら、右上の「Create CloudFormation stack」ボタンからスタックを作成できます。緑色のポップアップは閉じないでください。閉じてしまうと、上記の手順を最初からやり直す必要があります。

CloudFormationスタック作成 1
「Create CloudFormation Stack」をクリックすると、AWS CloudFormationのページに遷移します。
そのページではNextをクリックします。

CloudFormationスタック作成 2
任意のスタック名を入力してNextをクリックします。

CloudFormationスタック作成 3
次の画面では設定はすべてそのままにし、Nextをクリックします。

CloudFormationスタック作成 4
すべての設定が正しいことを確認したら、I acknowledgeのチェックボックスをオンにしてSubmitします。

CloudFormationスタック作成 5
スタックの作成が完了するまで待ちます。

CloudFormationスタック作成 6
スタック作成後にAthenaを開くと、VPC Flow Log Databaseが作成され、Athenaでクエリ可能な状態になっています。クエリ結果の保存場所に関する警告が表示された場合は、「Edit Settings」をクリックし、結果を保存したいバケットを選択してください。本記事ではVPCフローログ用に作成したS3バケットと同じものを指定しました。

CloudFormationスタック作成 7
ステップ3:定義済みクエリを実行する
Athenaの左側ナビゲーションからQuery Editorを開き、CloudFormationテンプレートで作成されたワークグループを選択します。

定義済みクエリの実行 1
Saved queriesをクリックすると、各クエリで得られるインサイトの説明とともに、複数のクエリが事前登録されていることを確認できます。

定義済みクエリの実行 2
上のスクリーンショットはサンドボックスアカウントのためクエリ数が少なめですが、VPCフローログの内容によってはより多くのクエリが表示されます。提供されているクエリは以下のとおりです。
- VpcFlowLogsAcceptedTraffic — セキュリティグループおよびネットワークACLによって許可されたTCP接続。
- VpcFlowLogsAdminPortTraffic — 管理ポートでリクエストを処理するアプリケーションが記録した、トラフィック量の多いIPアドレス上位10件。
- VpcFlowLogsIPv4Traffic — 記録されたIPv4トラフィックの総バイト数。
- VpcFlowLogsIPv6Traffic — 記録されたIPv6トラフィックの総バイト数。
- VpcFlowLogsRejectedTCPTraffic — セキュリティグループまたはネットワークACLによって拒否されたTCP接続。
- VpcFlowLogsRejectedTraffic — セキュリティグループまたはネットワークACLによって拒否されたトラフィック。
- VpcFlowLogsSshRdpTraffic — SSHおよびRDPのトラフィック。
- VpcFlowLogsTopTalkers — 記録されたトラフィック量が最も多いIPアドレス上位50件。
- VpcFlowLogsTopTalkersPacketLevel — パケットレベルで記録されたトラフィック量が最も多いIPアドレス上位50件。
- VpcFlowLogsTopTalkingInstances — トラフィック量が最も多いインスタンスのID上位50件。
- VpcFlowLogsTopTalkingSubnets — トラフィック量が最も多いサブネットのID上位50件。
- VpcFlowLogsTopTCPTraffic — 特定の送信元IPアドレスについて記録されたすべてのTCPトラフィック。
- VpcFlowLogsTotalBytesTransferred — 記録されたバイト数が最も多い送信元・宛先IPアドレスの組み合わせ上位50件。
- VpcFlowLogsTotalBytesTransferredPacketLevel — パケットレベルで記録されたバイト数が最も多い送信元・宛先IPアドレスの組み合わせ上位50件。
- VpcFlowLogsTrafficFrmSrcAddr — 特定の送信元IPアドレスについて記録されたトラフィック。
- VpcFlowLogsTrafficToDstAddr — 特定の宛先IPアドレスについて記録されたトラフィック。
どのようなインサイトが得られるかを確認するため、サンプルとしてクエリを1つ実行してみましょう。ここではデータ転送バイト数の多いIPアドレス上位50件を取得する VpcFlowLogsTopTalkers を使用しました。

これで完了です。ネットワーク関連の問題をトラブルシューティングしたり、状況をより深く把握したりするためのクエリ環境が整いました。
Happy Troubleshooting !!!
参考資料:
[1] https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-athena.html