Day 16: VPC Flow Logs:ネットワークトラフィックの可視化と分析
皆さん、こんにちは!「実践!AWSネットワーク構築・運用30日チャレンジ」のDay 16へようこそ!
昨日はAmazon CloudWatchを使って、CPU使用率やネットワークI/Oの総量といった「メトリクス」(数値的な量)を監視し、アラームを設定する方法を学びました。これはシステムの健全性を大まかに把握する上で非常に重要です。
しかし、ネットワークトラブルシューティングやセキュリティ分析においては、「誰が、どこへ、何を、いつ、どのように通信したのか」といった、より詳細な情報が必要となることが多々あります。例えば、「特定のIPアドレスから不正なアクセスがあったか?」、「アプリケーションサーバーから予期しない外部への通信が発生しているか?」、「通信が拒否されたのはなぜか?」といった疑問に答えるためには、メトリクスだけでは不十分です。
今日のテーマは、この詳細なネットワークトラフィック情報を提供する「VPC Flow Logs」です。VPC Flow Logsは、CloudWatch LogsやS3にネットワークフローのログを記録し、それを分析することで、VPC内のトラフィックを詳細に可視化できる強力なツールです。
1. VPC Flow Logsとは?なぜ詳細なログが必要か?
VPC Flow Logs (VPCフローログ) は、AWS VPC内のネットワークインターフェース(ENI)との間で送受信されるIPトラフィックに関する詳細なレコードをキャプチャする機能です。
なぜ詳細なネットワークログが必要なのか?
- セキュリティの可視化: 不審なIPアドレスからのアクセス試行、DDoS攻撃の兆候、ポートスキャン、内部ネットワークからの異常な外部通信などを検出できます。
- トラブルシューティング: 通信が確立できない、特定のポートが開かない、パフォーマンスが低下するといったネットワーク関連の問題の原因を特定するのに役立ちます。どのインスタンスが、どのIPアドレスと、どのポートで、許可または拒否された通信を試みたのかを把握できます。
- コンプライアンスと監査: ネットワークアクセスに関する規制要件や監査要件を満たすために、通信履歴の記録と分析が求められる場合があります。
- ネットワーク設計の最適化: どのサービスがどれくらいのトラフィックを生成しているかを分析し、ネットワーク設計の改善やリソースの適切なサイジングに役立てることができます。
- コスト最適化: データ転送量の多い通信を特定し、VPCエンドポイントの導入やアーキテクチャの見直しによるコスト削減のヒントを得られます。
VPC Flow Logsは、ネットワーク監視における「詳細な目」を提供するものであり、CloudWatchメトリクスと組み合わせて利用することで、より包括的な監視を実現します。
2. VPC Flow Logsの仕組みとログのフォーマット
VPC Flow Logsは、以下の3つのレベルで設定できます。
- VPC全体: VPC内の全てのENIからのトラフィックを記録。
- サブネット単位: 特定のサブネット内の全てのENIからのトラフィックを記録。
- ネットワークインターフェース (ENI) 単位: 特定のENIからのトラフィックのみを記録。
キャプチャされたログは、以下のいずれかの宛先に送信されます。
- Amazon CloudWatch Logs: ロググループにログイベントとして記録されます。CloudWatch Logs Insightsを使って分析できます。
- Amazon S3: S3バケットにファイルとして保存されます。Athenaや外部のログ分析ツールで分析できます。
VPC Flow Logsのログレコードのフォーマット
VPC Flow Logsの各レコードは、スペース区切りのテキスト形式で、通信に関する様々な情報を含んでいます。主要なフィールドは以下の通りです。
| フィールド名 | 説明 | 例 |
|---|---|---|
version |
フローログレコードのバージョン | 2 |
account-id |
AWSアカウントID | 123456789012 |
interface-id |
ネットワークインターフェースのID | eni-0abcdef1234567890 |
srcaddr |
送信元IPアドレス | 192.168.1.10 |
dstaddr |
宛先IPアドレス | 10.0.0.5 |
srcport |
送信元ポート | 52345 |
dstport |
宛先ポート | 80 |
protocol |
IPプロトコル番号 (6=TCP, 17=UDPなど) | 6 |
packets |
転送されたパケット数 | 10 |
bytes |
転送されたバイト数 | 1200 |
start |
トラフィックフローの開始時刻 (Unixエポックタイム) | 1678886400 |
end |
トラフィックフローの終了時刻 (Unixエポックタイム) | 1678886460 |
action |
トラフィックが許可されたか拒否されたか |
ACCEPT または REJECT
|
log-status |
フローログのログ記録ステータス | OK |
この詳細な情報があることで、特定の通信がなぜ成功/失敗したのか、どのセキュリティグループやNACLルールで拒否されたのかなどを分析できます。
3. VPC Flow Logsの設定実践
それでは、あなたのメインVPC (my-vpc) 全体でVPC Flow Logsを有効にし、CloudWatch Logsに送信するように設定してみましょう。
3.1. CloudWatch Logsグループの作成(ログの保存先)
VPC Flow Logsがログを送信するためのCloudWatch Logsグループを事前に作成します。
- AWSマネジメントコンソールで「CloudWatch」サービスを開きます。
- 左側ナビゲーションペインから「ロググループ」をクリックします。
- 「ロググループを作成」ボタンをクリックします。
-
ロググループ名:
/aws/vpc/flowlogs/my-vpc(推奨される命名規則) -
保持期間: 例えば
30 日(必要に応じて調整)
-
ロググループ名:
- 「ロググループを作成」をクリックします。
3.2. VPC Flow Logsの作成
次に、VPCに対してフローログを設定します。
- AWSマネジメントコンソールで「VPC」サービスを開きます。
- 左側ナビゲーションペインから「VPC」をクリックし、あなたのメインVPC (
my-vpcなど) を選択します。 - 「アクション」ドロップダウンから「フローログを作成」を選択します。
-
フローログの作成:
-
名前:
my-vpc-flow-log -
フィルター:
すべて(ACCEPTとREJECTの両方を記録)- ポイント: トラブルシューティングやセキュリティ分析のためには、通常「すべて」を選択します。
-
送信先:
CloudWatch Logs に送信 -
ロググループ: 先ほど作成した
/aws/vpc/flowlogs/my-vpcを選択します。 -
IAM ロール:
- 「新しい IAM ロールを作成する」を選択し、「IAM ロールのセットアップ」をクリックします。
- 新しいタブでIAMロール作成画面が開くので、デフォルトのままで「許可」をクリックします。
- IAMロールが自動的に作成され、元のフローログ作成画面に戻るので、作成されたIAMロール(例:
FlowLogsRole-xxxx)を選択します。- ポイント: VPC Flow LogsがログをCloudWatch Logsに書き込むための権限を持つIAMロールが必要です。
-
名前:
- 「フローログを作成」をクリックします。
これで、my-vpc 内のネットワークトラフィックがCloudWatch Logsに記録され始めます。ログの収集が開始されるまで数分かかる場合があります。
4. VPC Flow Logsの確認と分析
CloudWatch Logsにログが記録されたら、実際にログを確認し、分析してみましょう。
- AWSマネジメントコンソールで「CloudWatch」サービスを開きます。
- 左側ナビゲーションペインから「ロググループ」をクリックし、作成した
/aws/vpc/flowlogs/my-vpcロググループを選択します。 - ログストリームがいくつか表示されていることを確認します。これらは、各ネットワークインターフェースからのログが時系列で保存されています。
- ログストリームのいずれかをクリックすると、その中に詳細なフローログレコードが表示されます。
CloudWatch Logs Insightsによる分析
CloudWatch Logs Insightsは、SQLに似たクエリ言語を使ってログデータを強力に分析できるツールです。VPC Flow Logsの分析に非常に役立ちます。
-
CloudWatchの左側ナビゲーションペインから「Logs Insights」をクリックします。
-
分析したい「ロググループ」として
/aws/vpc/flowlogs/my-vpcを選択します。 -
期間を適切に設定します(例: 過去1時間)。
-
クエリを記述するエディタに、以下の基本的なクエリを入力し、「クエリの実行」をクリックします。
fields @timestamp, @message | sort @timestamp desc | limit 20これで最新の20件のログレコードが表示されます。
-
特定の送信元IPアドレスからの拒否された通信を検索する例:
fields @timestamp, interfaceId, srcAddr, dstAddr, srcPort, dstPort, action, protocol | filter action = 'REJECT' and srcAddr = 'xxx.xxx.xxx.xxx' # 特定のIPアドレスに置き換える | sort @timestamp desc -
最も通信量の多い宛先ポートを特定する例:
fields @timestamp, dstPort, bytes, action | stats sum(bytes) as total_bytes by dstPort, action | sort total_bytes desc | limit 10 -
特定の期間におけるWebサーバー(ポート80)へのアクセスを監視する例:
fields @timestamp, srcAddr, dstAddr, action | filter dstPort = 80 and action = 'ACCEPT' and dstAddr = 'YOUR_EC2_PRIVATE_IP' # Your EC2 Private IP に置き換える | stats count() by srcAddr | sort count() desc | limit 10これらのクエリを参考に、あなたのVPC内で実際に発生しているトラフィックを分析してみてください。
5. AI時代におけるVPC Flow Logsの活用シナリオ
AI/MLワークロードでは、大規模なデータ転送や複雑な分散処理が頻繁に発生するため、ネットワーク可視化は非常に重要です。
-
不正アクセスとデータ流出の検知:
- 外部からの不正なポートスキャンや攻撃試行(
REJECTログの分析)。 - 学習データが保存されているS3バケットへのアクセス元が不正でないか(VPCエンドポイント経由のS3アクセスログと突き合わせ)。
- 推論サーバーから予期しない外部IPアドレスへの通信(データ流出の兆候)を検知。
- 外部からの不正なポートスキャンや攻撃試行(
-
学習ジョブのネットワークボトルネック特定:
- 分散学習において、特定のGPUインスタンス間の通信量が少ない、あるいはエラーが多いなど、学習パフォーマンス低下の原因がネットワークにある場合に、詳細なフローログを分析してボトルネックを特定。
- データセットのダウンロード元(S3など)からの通信量とスループットを監視。
-
推論APIの通信状況分析:
- 推論APIエンドポイントへのアクセス元IPアドレスの傾向分析。
- 特定の推論リクエストが拒否された理由(セキュリティグループやNACL、ルーティングの問題)の特定。
-
コンプライアンスと監査証跡:
- 機密データを扱うVPCや、特定規制に準拠する必要があるワークロードにおいて、すべてのネットワーク通信履歴を記録し、監査要件を満たす。
- 誰が、いつ、どのシステムにアクセスしたかの証拠として利用。
-
異常検知の強化:
- VPC Flow LogsをAmazon Kinesis Data Firehose経由でAmazon S3に保存し、そこからAmazon SageMakerやAmazon OpenSearch Service(旧 Elasticsearch Service)を用いて、機械学習ベースの異常検知モデルを構築し、不審なネットワークパターンを自動で検出する。
本日のまとめと次へのステップ
今日は、AWSネットワークの「詳細な通信履歴」を提供する「VPC Flow Logs」について学び、CloudWatch Logsへの設定と、CloudWatch Logs Insightsを用いた基本的な分析を実践しました。
- VPC Flow Logsは、VPC内のENIとの送受信IPトラフィックに関する詳細なレコードをキャプチャする。
- セキュリティ分析、トラブルシューティング、コンプライアンス、ネットワーク最適化に不可欠な情報を提供する。
- CloudWatch LogsまたはS3にログを送信でき、CloudWatch Logs Insightsで強力に分析できる。
VPC Flow Logsは、CloudWatchメトリクスと並び、AWSネットワークの健全性を維持し、セキュリティを確保するための二大ツールと言えます。これを使いこなすことで、あなたのAWS環境はより強固になります。
明日のDay 17では、「AWS ConfigとCloudTrail:変更履歴と操作ログの追跡」と題して、AWSリソースの設定変更履歴や、アカウント内で行われたAPI操作の履歴を記録・追跡するための「AWS Config」と「AWS CloudTrail」について学びます。これらのサービスは、ネットワーク設定の変更管理やセキュリティ監査において非常に重要な役割を果たします。
今日のVPC Flow Logsの設定、無事にログが確認できましたか?これであなたのAWSネットワークは「見える化」されましたね!ぜひ「いいね」👍で教えてください!
