Amazon VPC Flow ログをSplunkへ送信する際のベスプラだと思う構成

Amazon VPC Flow ログをSplunkへ送信する際のベスプラだと思う構成

Amazon VPC Flow ログをSplunkに送信する時の構成を考えてみました。
Clock Icon2024.12.07

今回は、Splunk Cloud に AWS の Amazon VPC Flow ログを送信してみます。
AWSのアーキテクチャはビルディングブロックと呼ばれ、様々なAWSサービスを組み合わせてシステムを構築できるようになっています。

ログの送信においてもインテグレーション方法は様々で、要件に合わせたサービスを組み合わせることができます。

VPC Flowログでは、ログの送信先を、Amazon S3Amazon CloudWatch LogsAmazon Data Firehoseの3つの中から選択することができます。詳細は下記のブログをご確認ください。

https://dev.classmethod.jp/articles/where-vpc-flow-log-send/

VPC Flowログはセキュリティを強化する上でも重要なログの一つとされていますが、何せログの量が多くコストもかさみがちです。
また、VPC Flowログはセキュリティグループに従い、VPC内のネットワーク通信が許可されたのか、拒否されたのかが記録されます。
そのため不正アクセスの兆候や、重要データへの不用意なアクセスなどのリアルタイム監視が必要となるログの一つです。
外部システムへのログ送信時のリアルタイム性を実現するために、AWSのマネージドサービスである、Data Firehose を使うのが理想的かと思います。

VPC Flowログの送信先と、外部システムへのログの送信に Data Firehose を使うことを組み合わせると以下の2通りの連携が考えられます。

  • VPC Flow ログ -> Amazon CloudWatch Logs -> Amazon Data Firehose
  • VPC Flow ログ -> Amazon Data Firehose

当然後者の方が Amazon CloudWatch Logs を経由していない分コスト的に安くすみます。(CloudWatch Logs はログが多くなった時に料金が爆発的に高くなるサービスの一つでもあります。)
特に CloudWatch 側でアラートを出したいなどの要件が無ければ、アラート機能も含めて Splunk Cloud に集約するのがいいかと思います。

ということで、最も機能性とコストパフォーマンスのバランスがとれると思われる「VPC Flow ログ -> Amazon Data Firehose -> Splunk Cloud」の連携でログを送信してみます。

前提

Splunk Add-on fow AWS か、Splunk Add-on for Amazon Kinesis Firehose をインストールしておく必要があります。

今回、私はSplunk Add-on fow AWSを事前にインストールしています。

Splunk Cloud で HEC の設定

まずはじめに、Splunk Cloud でデータを受け取るためのエンドポイントの設定を行います。

Settings で Data input を選択します。

image-1733495003037.png

HTTP Event Collector で Add new を選択します。

image-1733495745620.png

HECの名前と、Enable indexer acknowledgement にチェックつけます。(Amazon Data Firehoseを利用時にはチェックが推奨されています)

Screenshot 2024-12-06 at 23.33.36.jpg

Source type で Select を選択して、aws:cloudwatchlogs:vpcflow を入力します。
Indexは指定したいものがあれば指定します。

image-1733496140407.png

設定が完了すると、エンドポイントのトークンが表示されるので、コピーしておきます。

image-1733496203414.png

SAMのデプロイ

Data Firehose でログを送信する際に、データの変換を行います。
Splunk であらかじめ、SAMのアプリが用意されているので、こちらを活用します。

https://github.com/splunk/splunk-aws-firehose-flowlogs-processor

AWS コンソールの SAM で splunk のキーワードで検索します。

image-1733496417226.png

先ほどGithubで確認したものと同じ、アプリケーションがあるので選択して、デプロイします。

Screenshot 2024-12-06 at 23.47.15.jpg

Screenshot 2024-12-06 at 23.48.35.jpg

デプロイが完了すると、Lambdaに以下のような関数ができます。

image-1733496659622.png

Amazon Data Firehoseの設定

次に Amazon Data Firehose の設定を行います。

Firehose ストリームを作成します。

Screenshot 2024-12-06 at 23.52.17.jpg

以下のような設定を入れていきます。

ソース: Direct PUT
送信先: Splunk
Firehoseストリーム名: [ストリーム名]

Screenshot 2024-12-06 at 23.53.39.jpg

データ変換をオンにする: ON
AWS Lambda 関数: SAMで作成されたLambda関数

image-1733496946951.png

Splunk クラスターエンドポイント: 利用しているSplunkの環境によって変わります。以下のURLから確認してください
https://docs.splunk.com/Documentation/Splunk/latest/Data/UsetheHTTPEventCollector#Send_data_to_HTTP_Event_Collector
Splunk エンドポイントタイプ: Raw
認証: 認証トークン
認証トークン: HEC作成時に表示されたトークン

image-1733497233101.png

S3バックアップバケット: 作成するか、あらかじめFirehose用のバケットを作成したものを指定

image-1733497400940.png

Firehoseストリームを作成します。

VPC Flow ログの設定

次にVPCの設定で、フローログを作成します。

image-1733497552171.png

以下のような設定で作成します。

送信先: 同じアカウントの Amazon Data Firehose に送信
Amazon Firehose ストリーム名: [先ほど作成したFirehoseストリーム]

Screenshot 2024-12-07 at 0.11.05.jpg

データ取り込みの確認

最後にSplunk Cloudでデータが取り込めているか確認します。

HEC の設定で指定したソースタイプでデータを検索することができます。

sourcetype="aws:cloudwatchlogs:vpcflow"

image-1733498039593.png

きちんとフィールドも抽出されていることも確認できます。

image-1733498097849.png

まとめ

AWSはサービスがたくさんあり、様々な選択肢がとることができます。
サービスの特徴とやりたいことの要件にあったものを選択する必要がありますが、VPCフローログを Splunk Cloud でリアルタイム監視を行いたい、なるべくコストパフォーマンスの高い構成にしたい、という観点でベストだと思う構成で考えてみました。
本記事がどなたかの一助になればと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.