New RelicでAWS VPCフローログをモニタリングしてみる

VPCフローログをNew Relicで可視化すると、トラフィック量をノード単位・プロトコル単位で可視化できます。ちょっとやってみました。
2023.12.24

本記事はクラスメソッド DevOps・セキュリティのカレンダー | Advent Calendar 2023の24日目の記事です。明日がラスト!

New RelicはAWSのVPCフローログを取り込んで可視化する機能をもっています。2022年の9月に実装されました。

こちらの記事にあるように、そのことによって以下のことが可能になります(引用します):

  • New RelicでVPC内のネットワークトラフィックをモニターし、アラートを出す
  • すべてのTCPまたはUDPポートにおける1秒当たりのバイト数とパケット数、1秒当たりの通信許可数および拒否数などのネットワークパフォーマンスのメトリクスを可視化する
  • フローログの偏差を調べて、ネットワークの流量や健全性に予期せぬ変化が生じていないかを確認する
  • 過度に制限されたセキュリティグループルールや潜在的に悪意のある意図しないトラフィックの問題を診断する

一方でそれなりに流量があるサービスの場合、取込データ量も多くなるため常用するにも注意が必要ですが、一部のデータをサンプリングして送信することも機能です(そのためのAWS Lambda関数が用意されています)。

とりあえず設定手順を書き出してみました。

準備 1 - バックアップ用S3バケットの作成

そのまえに。

VPCフローログはKinesis Data Firehose経由で送信されるのですが、送信できなかったときのデータを溜めておくS3バケットも必要です。
予め作っておくなりしておきましょう。今回は対象のVPCをオレゴンリージョンに作成することもあり、ここでは以下の名前としました。

S3バケット名
newrelic-firehose-backup-us-west-2

作成するリージョンは、対象となるVPC、Kinesis Data Firehoseに揃えておくといいと思います。
一方で複数のKinesis Data Firehoseでバックアップ先を共通のS3にできるし、そうそう送信失敗もしないと思うので、あまり気にする必要もないのかも知れません(あまりオススメというのもないです)。

準備 2 - 対象のVPC IDを調べる

VPCフローログを収集しNew Relicで可視化する対象のVPCのPVC IDも必要です。
調べておきましょう!

設定

では実際に設定を進めます。
大枠ではこちらのドキュメント、ならびにNew Relicのウィザードに従って進めます。

1. ガイド付きインストールプロセスの開始

上述のドキュメントにあるように、ウィザード(ガイド付きインストールプロセス)の起点はこちらのURLなのですが、複数のルートから辿ることもできます。

  • All Capabilities --> Network --> Cloud Flow Logs
  • Infrastructure --> Network --> Cloud Flow Logs
  • (Add more) --> Network --> Cloud Flow Logs

どのルートでも同じ画面に到達するので、そうしたら Start the guided install をクリックしてください。

2. Select your data

ここで「AWS VPC Flow Logs」を選択して「Continue」をクリックしてください。

3. Select your install method

CLIかCloudFormationの二通りの方法を教えてくれます。
どちらでもいいのですが、ひとまずCloudFormationにしてみましょう。

4. Connect VPC Flow Log telemetry

質問に答えていくかたちでパラメータをセットしていきます。

  • AWSリージョン名
  • 既存のKinesis Data Firehoseを再利用するか?
    • 既に作成済みでなければ No を選びます
  • ARN of the Firehose backup bucket
    • バックアップ用のS3バケットのARNを指定してください
  • Create a new IAM role for the Kinesis Firehose
    • 通常は✓でいいでしょう
  • Use sampling (requires a Lambda)
    • フローログを全て対象とせずにサンプリングして送信する場合は、そのためのLambdaを作成するステップが追加されます。全ての場合は✓をしないで良いです
  • Flow source ID
    • 対象のVPC IDを指定します

ここまで埋めつつ Next していると、ここでCFnテンプレートが提示されます。
コピペでファイルに保存し、実際にAWS上でスタックを作成してください。

作成されるリソースは以下のようになります。

論理ID 物理ID タイプ
DestinationFirehose NewRelic-Flow-Log-Ingestion-Firehose AWS::KinesisFirehose::DeliveryStream
FirehoseRole NewRelic-Flow-Log-Firehose-Role-us-west-2 AWS::IAM::Role
VpcFlowSource1 fl-xxxxxxxxxxxxxxxxx AWS::EC2::FlowLog

これで準備完了です!

実際の画面で確認してみて下さい。

後片付け

作成したスタックを削除したら、VPCフローログの送信も止まります。
試験的に作成した場合は、忘れずに削除しておきましょう!

まとめ

VPCフローログをNew Relicへ送信する手順をざっと追ってみました。

慣れないと少し戸惑うかもしれません(特にCFnのあたり)が、アプリケーション間・ノード間の通信をサンキーダイアグラムで可視化できる便利な機能ですので、まだ使ったことがなかったかたは是非試してみてください!