オンプレミス環境なら、スイッチのスパンポートでパケットをキャプチャできます。
しかしAWSのVPCでは、仮想スイッチに直接アクセスできません。
この記事では、AWS Traffic Mirroringを使ったネットワーク監視設計を解説します。
マルチAZ構成でのパケットキャプチャ収集先の配置、NLBを使った冗長化設計、AWS CLIによる設定手順まで紹介します。
この記事では、Amazon Linux 2023を搭載したEC2インスタンスを解析ツールの実行環境として説明します。
この記事のポイント
・AWS Traffic MirroringはVPCのパケットをコピーして解析できる仕組み
・マルチAZではAZごとに解析インスタンスを置くのが基本設計
・NLBをターゲットにするとHA構成と負荷分散が実現できる
・設定はAWS CLIで再現性よく管理できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
AWS Traffic Mirroringとは何か
AWSのVPCでは、ネットワークインターフェース(ENI)を流れるパケットをコピーして、別のENIやNetwork Load Balancerへ転送できます。
この機能がTraffic Mirroringです。
オンプレミスのスイッチで言えば、スパンポートに相当します。
コピーされたパケットは、解析用EC2インスタンス上のtcpdumpやWiresharkで受信・分析できます。
転送にはVXLANカプセリング(UDPポート4789)が使われます。
ミラーされたトラフィックは、オリジナルの通信には影響を与えません。
1. Traffic Mirroringの3つの構成要素
Traffic Mirroringの設定は3つのリソースで構成されます。・ミラーターゲット:コピーしたパケットの送り先。解析用のENIまたはNLBを指定します
・ミラーフィルター:どのトラフィックをコピーするかのルール定義。
送信元・宛先のCIDRやプロトコルで絞り込めます
・ミラーセッション:「どのENIから」「どのフィルターで」「どのターゲットへ」の3つをひも付けます
対応しているのは、Nitroシステムを搭載したインスタンスタイプのみです。
C5、M5、T3など多くの現行世代が対象ですが、T2インスタンスはNitroシステム非搭載のため使えません。
2. 料金と主な制限事項
Traffic Mirroringはミラーセッション1件につき時間単位の料金が発生します。(最新の料金はAWSの公式料金ページでご確認ください)
主な制限事項:
・1つのENIに設定できるミラーセッションは最大3件
・ピアリング接続やVPNを越えたクロスVPCミラーリングは不可
・ミラーソースとターゲットは同じVPC内に配置する必要があります
マルチAZ構成でのTraffic Mirroring設計
Traffic Mirroringでは、ミラーターゲットを監視対象と同じAZに配置するのが基本設計です。AZをまたいでパケットを転送すると、クロスAZのデータ転送費用が発生します。
本番環境では、AZごとに解析用インスタンスを配置してコストを最小化するのが一般的です。
1. AZごとに解析インスタンスを配置する構成
最もシンプルな構成は、監視対象EC2と同じAZに解析用EC2を1台ずつ置く方法です。・ap-northeast-1a:監視対象EC2 → 解析用EC2-AZ1a(ミラーターゲット)
・ap-northeast-1c:監視対象EC2 → 解析用EC2-AZ1c(ミラーターゲット)
解析用EC2が停止すると、そのAZの監視が停止します。
冗長性が必要な場合は、次のNLBを使った構成が有効です。
2. NLBをターゲットにしたHA構成
Network Load Balancer(NLB)をミラーターゲットにすると、複数の解析インスタンスへ負荷分散できます。
NLBのターゲットグループをUDP 4789で設定し、マルチAZを有効化します。
解析インスタンスを複数AZに分散配置すると、
1台が停止しても他のインスタンスへ引き継がれます。
NLBを使う際のポイント:
・NLBはInternal(内部向き)で作成する
・ターゲットグループのプロトコルはUDP、ポートは4789に設定する
・ヘルスチェックプロトコルはTCPを使用する(UDPはヘルスチェック非対応のため)
コストと冗長性のバランスで、どちらの構成を選ぶか検討してください。
Traffic Mirroringの設定手順(AWS CLI)
ここからは、AWS CLIを使ってTraffic Mirroringを設定する手順を説明します。LinuxサーバーからAWSリソースをCLIで操作する土台として、Amazon Linux の基本セットアップもあわせて確認してみてください。
1. ミラーターゲットの作成(解析用EC2のENI)
解析用EC2インスタンスのENI IDを指定してターゲットを作成します。# 解析用EC2のENI IDを確認する aws ec2 describe-instances \ --instance-ids i-0xxxxxxxxxxxxxxx \ --query "Reservations[*].Instances[*].NetworkInterfaces[*].NetworkInterfaceId" \ --output text # ミラーターゲットを作成する aws ec2 create-traffic-mirror-target \ --network-interface-id eni-0xxxxxxxxxxxxxxx \ --description "analysis-instance-az1a"
{ "TrafficMirrorTarget": { "TrafficMirrorTargetId": "tmt-0xxxxxxxxxxxxxxx", "NetworkInterfaceId": "eni-0xxxxxxxxxxxxxxx", "Type": "network-interface", "Description": "analysis-instance-az1a" } }
2. ミラーフィルターとルールの作成
すべてのインバウンド・アウトバウンドトラフィックを対象にするフィルターを作成します。# フィルターを作成する aws ec2 create-traffic-mirror-filter \ --description "all-traffic-filter" # インバウンドルールを追加する(すべてのトラフィック) aws ec2 create-traffic-mirror-filter-rule \ --traffic-mirror-filter-id tmf-0xxxxxxxxxxxxxxx \ --traffic-direction ingress \ --rule-number 100 \ --rule-action accept \ --destination-cidr-block "0.0.0.0/0" \ --source-cidr-block "0.0.0.0/0" \ --description "all-ingress" # アウトバウンドルールを追加する aws ec2 create-traffic-mirror-filter-rule \ --traffic-mirror-filter-id tmf-0xxxxxxxxxxxxxxx \ --traffic-direction egress \ --rule-number 100 \ --rule-action accept \ --destination-cidr-block "0.0.0.0/0" \ --source-cidr-block "0.0.0.0/0" \ --description "all-egress"
--protocolや--destination-cidr-blockを指定してルールを追加します。
3. ミラーセッションの作成
ミラーソース(監視対象EC2のENI)、ターゲット、フィルターをひも付けます。# ミラーセッションを作成する aws ec2 create-traffic-mirror-session \ --network-interface-id eni-0yyyyyyyyyyyyyyy \ --traffic-mirror-target-id tmt-0xxxxxxxxxxxxxxx \ --traffic-mirror-filter-id tmf-0xxxxxxxxxxxxxxx \ --session-number 1 \ --description "web-server-az1a-session"
同一ENIに複数のセッションを設定する場合、番号が小さいセッションが優先されます。
4. 設定の確認
作成したミラーセッションを確認します。# ミラーセッションの一覧を確認する aws ec2 describe-traffic-mirror-sessions # 特定のセッションを確認する aws ec2 describe-traffic-mirror-sessions \ --traffic-mirror-session-ids tms-0xxxxxxxxxxxxxxx
解析インスタンスでのパケット確認
解析用EC2インスタンスにSSHログインして、VXLANで届くパケットをtcpdumpで確認します。
# VXLAN(UDP 4789)のパケットをキャプチャする sudo tcpdump -i eth0 udp port 4789 -n # ファイルに保存してWiresharkで解析する sudo tcpdump -i eth0 udp port 4789 -w /tmp/capture.pcap # VXLANカプセルを剥がして内側のパケットを確認する sudo ip link add vxlan0 type vxlan id 12288 dstport 4789 local 10.0.1.100 sudo ip link set vxlan0 up sudo tcpdump -i vxlan0 -n
カプセルを剥がすことで、ミラーされた元のパケットをプロトコルレベルで解析できます。
解析用インスタンスのセキュリティグループに、UDP 4789のインバウンドルールを追加することを忘れないでください。
よくあるエラーと対処法
1. パケットが届かない
原因の多くはセキュリティグループの設定漏れです。解析用EC2のセキュリティグループに、UDP 4789のインバウンドルールを追加してください。
確認すべきポイント:
・解析用EC2のSGにUDP 4789のインバウンド許可があるか
・ミラーソースとターゲットが同じVPC内にあるか
・監視対象インスタンスのタイプがNitroシステム対応か(T2などは不可)
解析インスタンスでVXLANポートの受信状態を確認するには、
Linux ポート確認の全コマンドが参考になります。
2. ミラーセッション数の上限エラー
1つのENIにセッションを4件以上作成しようとすると、上限エラーになります。使っていないセッションを削除するか、フィルタリングで監視対象を絞り込んでください。
3. T2インスタンスで設定が通らない
T2インスタンスはNitroシステム非搭載のため、Traffic Mirroringをサポートしていません。インスタンスタイプをT3以降に変更してください。
本記事のまとめ
Traffic Mirroringを使ったAWSネットワーク監視設計をまとめます。| やりたいこと | 設定・確認方法 |
|---|---|
| パケットキャプチャの送り先を設定する | aws ec2 create-traffic-mirror-target |
| キャプチャ対象のトラフィックを絞り込む | aws ec2 create-traffic-mirror-filter-rule |
| ミラーリングを開始する | aws ec2 create-traffic-mirror-session |
| 届いたパケットをキャプチャする | sudo tcpdump -i eth0 udp port 4789 |
| ミラーセッションの設定を確認する | aws ec2 describe-traffic-mirror-sessions |
Traffic Mirroringを活用することで、ENIレベルのパケットキャプチャが実現できます。
マルチAZ構成では、AZごとに解析インスタンスを配置するか、
NLBを使ったHA構成を選びます。
コストと冗長性のバランスを考慮して設計してください。
Linuxを実践的なハンズオンで学びたい方には、>>【初心者向けLinuxセミナー(2日間ハンズオン)】もご覧ください。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:AWSURL監視をSyntheticsで設計する方法|CanaryスクリプトとアラートSNS連携の実践
- この記事の属するカテゴリ:AWS(Amazon Linux)へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます