🎯 結論ファースト:トラフィックミラーリングは4つのパーツでできている

VPCトラフィックミラーリングは、EC2インスタンスなどのネットワーク通信を丸ごとコピーして、セキュリティ分析ツールに転送する機能です。この機能は、以下の4つの構成要素を組み合わせて動作します。

① ミラーソース どこのトラフィックをコピーするか(カメラの設置場所)
② ミラーターゲット コピーしたデータをどこに送るか(警備室のモニター)
③ ミラーフィルター どのトラフィックをコピーするか(録画ルール)
④ ミラーセッション ①②③を結びつける設定(配線チャンネル)
💡 「どこで撮る?」「どこに映す?」「何を撮る?」「全部つなげる設定」の4ステップ

🏢 たとえ話:ビルの監視カメラシステムで理解しよう

VPCトラフィックミラーリングは、ビルの監視カメラシステムとそっくりです。
ビル内の各フロアにカメラを設置して、映像を警備室のモニターに送り、録画条件を設定して、配線で全部つなげる——
AWSのネットワーク監視も、まったく同じ発想で構成されています。

🔄 たとえ話 → AWS構成要素の対応

監視カメラのたとえ 📹 AWSの構成要素 具体的な役割
📷 カメラの設置場所(どのフロアのどのドア前) ① ミラーソース(ENI) EC2やNLBのネットワークインターフェースを指定して、通信をキャプチャする起点
🖥️ 警備室のモニター(映像の受信先) ② ミラーターゲット(NLB / ENI / GWLB) コピーされたパケットの送信先。分析ツールが稼働するリソース
🎚️ 録画ルール(営業時間外のみ・特定エリアのみ) ③ ミラーフィルター プロトコル・ポート・IPで条件を指定し、必要なパケットだけコピーする
🔗 カメラ→モニターの配線設定・チャンネル ④ ミラーセッション ソース・ターゲット・フィルターを結び付けて、ミラーリングを有効にする

🏗️ 全体アーキテクチャ:4つの構成要素の関係

4つの構成要素がどのように連携してトラフィックミラーリングが動作するのか、全体の流れを図で確認しましょう。

🌐 VPC 📷 ① ミラーソース (カメラの設置場所) 🖥️ EC2 インスタンス ENI(eni-abc123) ⚖️ NLB ノード ENI(eni-def456) コピー 🎚️ ③ ミラーフィルター (録画ルール) ✅ ACCEPT: TCP/443 ❌ REJECT: UDP/* 転送 🖥️ ② ミラーターゲット (警備室のモニター) ⚖️ NLB 背後にセキュリティツール 🔬 分析ツール Suricata / Zeek 等 🔗 ④ ミラーセッション(カメラ→モニターの配線設定) ソース・フィルター・ターゲットを1つに結び付け、ミラーリングを有効化する設定 📷 ソース指定 🎚️ フィルター適用 🖥️ ターゲット送信

📌 4つの構成要素のポイント

1

ミラーソース

🏢 たとえ:カメラの設置場所

トラフィックをキャプチャするENI(Elastic Network Interface)を指定する。EC2やNLBのネットワークインターフェースが対象。

2

ミラーターゲット

🏢 たとえ:警備室のモニター

コピーされたパケットの送信先。NLB、ENI、またはGateway Load Balancerエンドポイントを指定する。

3

ミラーフィルター

🏢 たとえ:録画ルール設定

どのトラフィックをコピーするかをルールで定義。プロトコル、ポート範囲、CIDR等で条件指定する。

4

ミラーセッション

🏢 たとえ:配線・チャンネル設定

ソース・フィルター・ターゲットを1つに結びつける設定。セッション番号で優先順位も管理できる。

📷 ① ミラーソース:「どこにカメラを置くか」

ミラーソースは、パケットのコピーを取得するネットワークインターフェース(ENI)です。ビルの例では「どのフロアのどのドア前にカメラを置くか」に相当します。

📋 ミラーソースとして指定できるリソース

EC2 インスタンス もっとも一般的なソース。WebサーバーやDBサーバーのENI
NLB(Network LB) NLBノードのENIからロードバランサーを通過するトラフィックをキャプチャ
その他ENI NAT Gateway、Transit Gateway Attachment等のENI付きリソース

⚠️ ソース指定の制約

NitroベースのインスタンスのENIのみがミラーソースになれます。旧世代(t2, m4, c4等)のインスタンスは非対応です。たとえるなら「古いビルの旧型カメラ端子には新しい録画装置を接続できない」のと同じです。

1つのENIは最大3つのミラーセッションのソースとして使えます。これは1台のカメラの映像を最大3つのモニターに同時配信できるイメージです。

🖥️ ② ミラーターゲット:「警備室のモニター」

ミラーターゲットは、コピーされたパケットの送信先です。ここにセキュリティ分析ツール(IDS/IPS等)が待ち構えており、パケットを受け取って解析します。

📋 3種類のミラーターゲット

Network Load Balancer 最も一般的。複数の分析インスタンスに負荷分散でき、高可用性を実現 🏢 大型警備室に複数モニター
ENI(単体) 特定の1台のEC2インスタンスに直接送信。小規模やテスト向き 🏢 1台のモニターに直結
GWLB エンドポイント Gateway LBを経由してサードパーティのセキュリティアプライアンスに転送 🏢 外部警備会社のシステム

💡 ターゲット選択のポイント

本番環境ではNLBをターゲットに選ぶのがベストプラクティスです。NLBの背後に複数の分析インスタンスを配置すれば、1台が故障しても残りがカバーでき、大量トラフィックにも対応できます。

ミラーターゲットはソースと同じVPC内、またはVPCピアリング/Transit Gateway経由の別VPCに配置できます。たとえるなら、カメラの映像を同じビル内の警備室に送ることも、隣のビルの中央警備センターに送ることもできるということです。

🎚️ ③ ミラーフィルター:「何を録画するかのルール」

ミラーフィルターは、どのトラフィックをキャプチャしてどれを除外するかをルールで定義します。全トラフィックをコピーするとコストが膨大になるため、必要なパケットだけを絞り込むのが現実的です。

📋 フィルタールールの設定項目

設定項目 説明 監視カメラのたとえ
ルール番号 ルールの優先順位(小さい番号ほど優先) 「ルール1が最優先、ルール2はその次…」
アクション ACCEPT = キャプチャする REJECT = しない 「このフロアは録画する/しない」
プロトコル TCP(6)、UDP(17)、ICMP(1) 等を番号で指定 「映像通話だけ録画」「電話だけ録画」
送信元 CIDR 送信元IPアドレスの範囲(0.0.0.0/0 で全通信) 「来訪者の出身エリアで絞る」
宛先 CIDR 宛先IPアドレスの範囲 「特定フロアへ向かう人だけ録画」
送信元ポート範囲 送信元ポートの範囲(例: 1024-65535) 「どの入口から来たか」
宛先ポート範囲 宛先ポートの範囲(例: 443-443 でHTTPSのみ) 「どの部屋に入ろうとしているか」

🔍 フィルターの動作イメージ

📦 全パケット ENIを通過する全通信 🎚️ ミラーフィルター ⬇️ インバウンドルール ✅ ルール100: TCP/443 ACCEPT ✅ ルール200: TCP/80 ACCEPT ❌ ルール300: ALL REJECT ⬆️ アウトバウンドルール ✅ ルール100: TCP/* ACCEPT ❌ ルール200: UDP/* REJECT ✅ ルール300: ICMP ACCEPT ✅ 通過パケット 条件に合致した パケットだけが ターゲットに転送 → 🖥️ ターゲットへ

重要:フィルターにはインバウンド(受信)とアウトバウンド(送信)それぞれにルールを設定します。ルールはNACLのように番号順に評価され、最初にマッチしたルールが適用されます。

🔗 ④ ミラーセッション:「すべてを結びつける配線」

ミラーセッションは、ここまでの3つの構成要素を1つのセットとして結びつける設定です。ビルの例では「このカメラの映像を、このルールで録画して、この警備室モニターに送る」という配線チャンネルの設定に相当します。

🔄 セッションが結びつける流れ

📷 ミラーソース
ENI指定
🎚️ ミラーフィルター
ルール適用
🖥️ ミラーターゲット
分析ツールへ

📋 セッションの主要パラメータ

🔢 セッション番号(Session Number)

1つのENIに複数セッションがある場合の優先順位。番号が小さいほどパケットが先に評価される。同じパケットを複数のターゲットに送りたいときに使う。

📐 パケット長(Packet Length)

ミラーリングするパケットの最大バイト数を指定。ヘッダーだけ必要な場合は短く設定してコスト削減。省略すると全体をコピー。

🔖 VNI(Virtual Network Identifier)

VXLANカプセル化で使用する識別番号。ターゲット側で複数のセッションからのトラフィックを区別するために使う。

📝 説明(Description)

セッションの用途をメモする任意フィールド。「本番WebサーバーHTTPS監視用」のように、運用時にわかりやすい説明を付ける。

💻 AWS CLIでセッションを作成する例

# ミラーセッションの作成 aws ec2 create-traffic-mirror-session \ --traffic-mirror-target-id tmt-0abcd1234efgh5678 \ --network-interface-id eni-0a1b2c3d4e5f6g7h8 \ --traffic-mirror-filter-id tmf-0abcd1234efgh5678 \ --session-number 1 \ --description "Web-server-HTTPS-monitoring"

🛠️ 実践的な構成パターン

📷 ミラーソース群 🖥️ Web Server 1 eni-web01 🖥️ Web Server 2 eni-web02 🗄️ DB Server eni-db01 🎚️ フィルター ✅ TCP/443 ✅ TCP/3306 ❌ ICMP ❌ その他UDP ⚖️ NLB ミラーターゲット 🔬 Suricata #1 IDS/IPS 🔬 Suricata #2 IDS/IPS 🔗 ミラーセッション ×3(各ソースに対して1セッション → 同じフィルター&ターゲットを共有) Session #1: Web01 → Filter → NLB | Session #2: Web02 → Filter → NLB | Session #3: DB01 → Filter → NLB

このパターンでは、3台のサーバーそれぞれに個別のミラーセッションを作成し、同じフィルターと同じNLBターゲットを共有しています。フィルターとターゲットは複数セッションで再利用可能なので、管理がシンプルに保てます。

⚠️ 注意点 & ベストプラクティス

⚠️ よくある落とし穴

  • 非Nitroインスタンスではミラーリング不可(t2, m4, c4等は非対応)
  • フィルターなしの全パケットコピーはコストが急増する(帯域も消費)
  • 1つのENIにつき最大3セッションまで。それ以上はエラー
  • ミラーリングされたパケットはVXLANでカプセル化される。分析ツールがVXLAN対応であること
  • ソースのEC2にパフォーマンス影響が出る場合がある(高トラフィック時)

✅ ベストプラクティス

  • まずフィルターで対象を絞る(必要なポート・プロトコルだけ)
  • ターゲットはNLBを使う(高可用性・スケーラビリティ)
  • パケット長を制限(ヘッダーだけで十分な場合はバイト数を指定)
  • セッション説明に目的と対象を明記(運用時に混乱防止)
  • テスト環境で検証してから本番導入。段階的にソースを追加

❓ よくある質問(FAQ)

Q.トラフィックミラーリングとVPC Flow Logsの違いは?

Flow Logsはメタデータ(IP・ポート・バイト数等)だけを記録しますが、トラフィックミラーリングはパケットの中身(ペイロード)まで丸ごとコピーします。深い分析が必要ならミラーリング、ログ記録だけならFlow Logsを使います。

Q.ミラーリングするとEC2のパフォーマンスに影響がある?

Nitroベースのインスタンスではハードウェアレベルでパケットコピーが行われるため、影響は最小限です。ただし、大量のミラーリングトラフィックが発生すると、ネットワーク帯域を消費します。フィルタリングで対象を絞ることが重要です。

Q.別のVPCのターゲットにパケットを送れる?

はい。VPCピアリングまたはTransit Gatewayを使えば、ソースとは別のVPCにあるターゲットにミラーパケットを送信できます。セキュリティ専用VPCに分析基盤を集約する構成が一般的です。

Q.コストはどう計算される?

ミラーリング自体の追加料金はありません。ただし、コピーされたパケットが通過するデータ転送料金、ターゲット(NLB等)の利用料金、分析ツールのEC2コストが発生します。フィルタリングでトラフィック量を抑えるのがコスト最適化の鍵です。

Q.Lambda関数やFargateのトラフィックもミラーリングできる?

いいえ。ミラーソースに指定できるのはNitroベースインスタンスに接続されたENIのみです。LambdaやFargateは自前のENIを持ちますが、現時点ではミラーソースとして指定できません。

🎓 まとめ

📷 ① ミラーソース パケットをコピーするENI。Nitroベースのインスタンスが必要。1 ENIにつき最大3セッション。
🖥️ ② ミラーターゲット パケットの送信先。NLB(推奨)/ ENI / GWLBエンドポイント。別VPCも可能。
🎚️ ③ ミラーフィルター キャプチャ条件を定義するルール。プロトコル・ポート・CIDRで絞り込みコスト最適化。
🔗 ④ ミラーセッション ソース・フィルター・ターゲットを結合。セッション番号で優先順位管理。CLIやコンソールで作成。
🏆 覚え方:「どこで撮る(ソース)→ 何を撮る(フィルター)→ どこに映す(ターゲット)→ 全部つなげる(セッション)」

Created by SSuzuki1063

AWS SAP Learning Resources