Amazon VPC Flow ログをSplunkへ送信する際のベスプラだと思う構成
今回は、Splunk Cloud に AWS の Amazon VPC Flow ログを送信してみます。
AWSのアーキテクチャはビルディングブロックと呼ばれ、様々なAWSサービスを組み合わせてシステムを構築できるようになっています。
ログの送信においてもインテグレーション方法は様々で、要件に合わせたサービスを組み合わせることができます。
VPC Flowログでは、ログの送信先を、Amazon S3
、Amazon CloudWatch Logs
、Amazon Data Firehose
の3つの中から選択することができます。詳細は下記のブログをご確認ください。
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 を選択します。
HTTP Event Collector で Add new を選択します。
HECの名前と、Enable indexer acknowledgement にチェックつけます。(Amazon Data Firehoseを利用時にはチェックが推奨されています)
Source type で Select を選択して、aws:cloudwatchlogs:vpcflow
を入力します。
Indexは指定したいものがあれば指定します。
設定が完了すると、エンドポイントのトークンが表示されるので、コピーしておきます。
SAMのデプロイ
Data Firehose でログを送信する際に、データの変換を行います。
Splunk であらかじめ、SAMのアプリが用意されているので、こちらを活用します。
AWS コンソールの SAM で splunk のキーワードで検索します。
先ほどGithubで確認したものと同じ、アプリケーションがあるので選択して、デプロイします。
デプロイが完了すると、Lambdaに以下のような関数ができます。
Amazon Data Firehoseの設定
次に Amazon Data Firehose の設定を行います。
Firehose ストリームを作成します。
以下のような設定を入れていきます。
ソース: Direct PUT
送信先: Splunk
Firehoseストリーム名: [ストリーム名]
データ変換をオンにする: ON
AWS Lambda 関数: SAMで作成されたLambda関数
Splunk クラスターエンドポイント: 利用しているSplunkの環境によって変わります。以下のURLから確認してください
認証: 認証トークン
認証トークン: HEC作成時に表示されたトークン
S3バックアップバケット: 作成するか、あらかじめFirehose用のバケットを作成したものを指定
Firehoseストリームを作成します。
VPC Flow ログの設定
次にVPCの設定で、フローログを作成します。
以下のような設定で作成します。
送信先: 同じアカウントの Amazon Data Firehose に送信
Amazon Firehose ストリーム名: [先ほど作成したFirehoseストリーム]
データ取り込みの確認
最後にSplunk Cloudでデータが取り込めているか確認します。
HEC の設定で指定したソースタイプでデータを検索することができます。
sourcetype="aws:cloudwatchlogs:vpcflow"
きちんとフィールドも抽出されていることも確認できます。
まとめ
AWSはサービスがたくさんあり、様々な選択肢がとることができます。
サービスの特徴とやりたいことの要件にあったものを選択する必要がありますが、VPCフローログを Splunk Cloud でリアルタイム監視を行いたい、なるべくコストパフォーマンスの高い構成にしたい、という観点でベストだと思う構成で考えてみました。
本記事がどなたかの一助になればと思います。