VPCフローログのAthena統合を試してみた

2022.05.17

こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です。

今回は、VPC フローログのAthena統合機能を試してみようと思います。

Athena統合機能とは

VPC フローログにおけるAthena統合機能とは、ざっくり言うと事前定義したクエリをCloudFormationでデプロイして利用する機能です。

CloudWatch Logsの「サンプルクエリ」は知っていたのですが、Athenaでも同じようなクエリセットがあるとは知りませんでした。

今回は、そんなAthena統合機能を使用してVPC フローログを分析してみようと思います。

VPCフローログに対してのクエリセット

はじめに、事前定義されたクエリセットとしてVPCフローログでは、以下のクエリが用意されています。

多くの事前定義されたクエリが用意されているためSQLやAthena初心者にはとても優しいなと思います。

  • vpcFlowLogsAcceptedTraffic — セキュリティグループとネットワーク ACL に基づいて許可された TCP 接続。
  • vpcFlowLogsAdminPortTraffic — 管理ポートでリクエストを処理するアプリケーションによって記録された、トラフィックが最も多い上位 10 個の IP アドレス。
  • vpcFlowLogsIPv4Traffic — 記録された IPv4 トラフィックの合計バイト数。
  • vpcFlowLogsIPv6Traffic — 記録された IPv6 トラフィックの合計バイト数。
  • vpcFlowLogsRejectedTCPTraffic — セキュリティグループまたはネットワーク ACL に基づいて拒否された TCP 接続。
  • vpcFlowLogsRejectedTraffic — セキュリティグループまたはネットワーク ACL に基づいて拒否されたトラフィック。
  • vpcFlowLogsShrdpTraffic — SSH および RDP トラフィック。
  • vpcFlowLogStopTalkers — 記録されたトラフィックが最も多い50個のIPアドレス。
  • vpcFlowLogStopTalkersPacketLevel — 記録されたトラフィックが最も多くある 50 個のパケットレベルの IP アドレス。
  • vpcFlowLogStopTalkingInstances — 記録されたトラフィックが最も多い50個のインスタンスの ID。
  • vpcFlowLogStopTalkingSubnets — 記録されたトラフィックが最も多くある 50 個のサブネットの ID。
  • vpcFlowLogStopTcpTraffic — 送信元 IP アドレスに対して記録されたすべての TCP トラフィック。
  • vpcFlowLogstotalBytestRansFerred — 記録されたバイト数が最も多い送信元と送信先 IP アドレスの 50 個のペア。
  • vpcFlowLogstotalBytestRansFerredPacketLevel — 記録されたバイト数が最も多いパケットレベルの送信元および送信先 IP アドレスの 50 個のペア。
  • vpcFlowLogStrafficFrmsrcaddr — 特定の送信元 IP アドレスについて記録されたトラフィック。
  • vpcFlowLogStadfficToDr — 特定の送信先 IP アドレスについて記録されたトラフィック。

事前に定義されたクエリ

使ってみた

CloudFormation テンプレートの作成

VPCフローログ管理画面で、「アクション」から、「Athena 統合を生成」をクリックします。

「Athena 統合を生成」画面で、各種設定値を入力し「Athena 統合を生成」をクリックします。

Athena 統合を生成すると「CloudFormation テンプレート S3 バケット」内に、クエリセットをデプロイするためのCloudFormationテンプレートが格納される仕組みとなっています。

S3コンソールからも、オブジェクト(CloudFormationテンプレート)を確認可能で、「VPCFlowLogsIntegrationTemplate_フローログID_UTCの作成時刻.yml」の形式で生成されていました。

スタックの作成

作成したテンプレートのオブジェクト URLをコピーしてスタックの作成を行います。

作成されるリソースは以下の通りです。Lambdaに関するリソースは、「Athena 統合を生成」画面で「ロード頻度のパーティション」を指定した場合に作成されます。

  • AWS::Glue::Database(用途:データベースの作成)
  • AWS::Glue::Table(用途:テーブルの作成)
  • AWS::Athena::WorkGroup(用途:ワークグループの作成)
  • AWS::Athena::NamedQuery(用途:事前定義済クエリの作成)
  • AWS::Lambda::Function(用途:テーブルの定期更新)
  • AWS::IAM::Role(用途:LambdaのIAMロール)
  • Custom::VPCFlowLogsAthenaStartInitializer(用途:Lambdaの初回実行)

クエリの実行

実際にクエリを実行してみましょう。利用可能な事前定義済みクエリ数は、取得するフローログレコードの形式によって異なるため注意が必要です。

例えば、デフォルトのログレコード形式でフローログを取得している場合、以下の事前定義済みクエリが利用可能です。

  • vpcFlowLogsAdminPortTraffic — 管理ポートでリクエストを処理するアプリケーションによって記録された、トラフィックが最も多い上位 10 個の IP アドレス。
  • vpcFlowLogsRejectedTraffic — セキュリティグループまたはネットワーク ACL に基づいて拒否されたトラフィック。
  • vpcFlowLogsShrdpTraffic — SSH および RDP トラフィック。
  • vpcFlowLogStopTalkers — 記録されたトラフィックが最も多い50個のIPアドレス。
  • vpcFlowLogstotalBytestRansFerred — 記録されたバイト数が最も多い送信元と送信先 IP アドレスの 50 個のペア。
  • vpcFlowLogStrafficFrmsrcaddr — 特定の送信元 IP アドレスについて記録されたトラフィック。

より、多くの定義済みクエリや詳細な情報を利用する場合は、カスタム形式のレコードを定義する必要があります。

詳しくは以下のブログをご参照ください。

Athenaコンソールより、ワークグループの切り替えを行い「認証」をクリックします。

ワークグループの切り替えを行うと、「保存したクエリ」に事前定義済みクエリが保存されています。

試しに「vpcFlowLogsShrdpTraffic」でどのIPアドレスからアクセスしているか実行してみました。

SQLに関してわからなくても、簡単にログ分析できるのはとてもイイ機能だと思いました。

おわりに

今回は、Athena統合を使用してVPCフローログを分析してみました。

手始めにAthenaを使ってみたい」、「複雑な分析は行わない」などのケースに大変有効だと思いました。

この記事がどなたかの参考になれば幸いです。

以上、AWS事業本部コンサルティング部のたかくに(@takakuni_)でした!