🌐 Amazon VPC — ネットワーキング & セキュリティ

VPCフローログ フィールド完全ガイド

srcaddr / dstaddr と pkt-srcaddr / pkt-dstaddr の違いを
「ホテルの荷物配送」で直感的に理解する

結論ファースト — 4つのフィールドを30秒で理解

srcaddr
送信元ENIのプライマリIPアドレスを記録。常にプライマリIPが表示される。
dstaddr
宛先ENIのプライマリIPアドレスを記録。セカンダリIP宛てでもプライマリIPが表示される。
pkt-srcaddr
パケットの実際の送信元IPを記録。セカンダリIPから送信された場合はそのIPが表示される。
pkt-dstaddr
パケットの実際の宛先IPを記録。セカンダリIP宛ての場合はそのIPが表示される。
💡
最重要ポイント:dstaddr は ENI のプライマリIPを「常に」表示するが、 pkt-dstaddr はパケットの実際の宛先IPを表示する。 ENIに複数のIPが割り当てられている場合、この2つの値は異なることがある。
1

たとえ話 — ホテルの荷物配送で理解する

🏨 ENI(ネットワークインターフェース)に複数のIPが付いている状況は、
1つのホテルに複数の客室があるのと同じです

📦 荷物が届くシーン

🏨 AWSホテル(= ENI)
ホテルの代表住所 10.0.1.100(プライマリIP)
🔑
101号室(プライマリIP)
10.0.1.100
🚪
202号室(セカンダリIP ①)
10.0.1.200
🚪
303号室(セカンダリIP ②)
10.0.1.300
📦 配送伝票(外箱)
宛先:AWSホテル
10.0.1.100
= dstaddr が記録する値
💌 中の手紙(実際の宛先)
宛先:202号室 様
10.0.1.200
= pkt-dstaddr が記録する値
  ホテルのたとえ AWSの実態 フローログフィールド
🏨 ホテルの代表住所 ENIのプライマリIPアドレス dstaddr / srcaddr
🚪 各客室の部屋番号 ENIのセカンダリIPアドレス pkt-dstaddr / pkt-srcaddr
📦 配送伝票の宛先(外箱) 常にプライマリIPを表示 dstaddr
💌 中の手紙の本当の宛先 パケットの実際の宛先IPを表示 pkt-dstaddr
2

技術詳細 — 4つのフィールドの正確な動作

📘 デフォルトフィールド

srcaddr / dstaddr — 常に記録される
  • 📍 ENIのプライマリIPアドレスを常に記録
  • 🔄 セカンダリIP宛てのトラフィックでもプライマリIPが表示
  • ⚙️ カスタムフォーマット不要で自動的に含まれる
  • 🏷️ 「このENIを通ったトラフィック」を特定するのに最適

📙 オプションフィールド

pkt-srcaddr / pkt-dstaddr — 明示的な追加が必要
  • 🎯 パケットの実際のIPアドレスを記録
  • 🔍 セカンダリIP宛てなら、セカンダリIPがそのまま表示
  • カスタムフォーマットで明示的に追加する必要あり
  • 🧩 NATやロードバランサーの元の送信元IP特定にも有効
フィールド名 種別 記録する内容 複数IPの場合
srcaddr デフォルト 送信元の ENI の IP アドレス 常にプライマリIPを表示
dstaddr デフォルト 宛先の ENI の IP アドレス 常にプライマリIPを表示
pkt-srcaddr オプション パケットの実際の送信元 IP 実際のIP(セカンダリの場合あり)
pkt-dstaddr オプション パケットの実際の宛先 IP 実際のIP(セカンダリの場合あり)
3

図解シナリオ — 値がどう変わるか見る

🅰️ シナリオA:プライマリIP宛てのトラフィック

外部から ENI のプライマリIP(10.0.1.100)にトラフィックが到達する場合
💻
送信元サーバー
192.168.1.50
➡️
🔌
宛先 ENI
Primary: 10.0.1.100
Secondary: 10.0.1.200
dstaddr =
10.0.1.100
✅ プライマリIP = 実際の宛先 → 一致
pkt-dstaddr =
10.0.1.100
✅ 実際の宛先もプライマリ → 一致

🅱️ シナリオB:セカンダリIP宛てのトラフィック ⚠️ ここが重要

外部から ENI のセカンダリIP(10.0.1.200)にトラフィックが到達する場合
💻
送信元サーバー
192.168.1.50
➡️
🔌
宛先 ENI
Primary: 10.0.1.100
→ Secondary: 10.0.1.200 🎯
dstaddr =
10.0.1.100
⚠️ セカンダリ宛てでもプライマリIPを表示!
pkt-dstaddr =
10.0.1.200
✅ 実際の宛先であるセカンダリIPを表示
📄 実際のフローログ出力例(カスタムフォーマット)

FLOW LOG FORMAT: ${srcaddr} ${dstaddr} ${pkt-srcaddr} ${pkt-dstaddr} ${action}

# シナリオA(プライマリIP宛て):
192.168.1.50 10.0.1.100 192.168.1.50 10.0.1.100 ACCEPT
# シナリオB(セカンダリIP宛て):
192.168.1.50 10.0.1.100 192.168.1.50 10.0.1.200 ACCEPT
フィールド: srcaddr   dstaddr   pkt-srcaddr   pkt-dstaddr   action
4

ユースケース — いつどのフィールドを使うか

🔍

セカンダリIPへのトラフィック分析

1つのENIに複数IPを割り当てている場合、どのIPにトラフィックが来ているかを正確に把握したい

pkt-dstaddr を使う
🌐

NATゲートウェイの元IP追跡

NATゲートウェイを経由したトラフィックの元の送信元IPアドレスを特定したい

pkt-srcaddr を使う
📊

ENI単位のトラフィック集計

どのENI(ネットワークインターフェース)にトラフィックが集中しているかを集計したい

srcaddr / dstaddr を使う
🛡️

ロードバランサー背後のアクセス分析

ELB/ALBの背後にあるインスタンスへの実際のクライアントIPを確認したい

pkt-srcaddr を使う
5

ベストプラクティス & アンチパターン

カスタムフォーマットで pkt-srcaddr / pkt-dstaddr を含める

デフォルトフォーマットには含まれないため、セカンダリIPの分析が必要な場合は必ずカスタムフォーマットで追加する。

NATやELBがある環境では pkt-srcaddr を必ず有効化

srcaddr だけでは中間デバイスのIPしか見えない。元のクライアントIPを追跡するには pkt-srcaddr が不可欠。

4つのフィールドをすべて記録してから分析

後からフィールドを追加しても過去のログには反映されない。最初からすべて含めておくのがベスト。

dstaddr だけでセカンダリIP宛てのトラフィックを特定しようとする

dstaddr は常にプライマリIPを表示するため、セカンダリIPへのトラフィックを見落としてしまう。pkt-dstaddr が必要。

srcaddr でNAT背後のクライアントIPを特定しようとする

srcaddr はNATゲートウェイのIPを表示するため、元のクライアントIPは分からない。pkt-srcaddr を使う。

AWS試験で狙われるポイント

VPCフローログのフィールドに関する問題は、以下のパターンで出題されます:

  • 🎯 「セカンダリIPへのトラフィックを特定するにはどのフィールドを使うか?」→ pkt-dstaddr
  • 🎯 「NATゲートウェイ経由の元のクライアントIPを確認するには?」→ pkt-srcaddr
  • 🎯 「dstaddr と pkt-dstaddr の違いは何か?」→ ENIの複数IP時にプライマリか実際のIPかの違い
  • 🎯 「デフォルトのフローログフォーマットに含まれないフィールドは?」→ pkt-srcaddr / pkt-dstaddrはオプション
6

FAQ — よくある質問

ENIにIPが1つだけの場合、dstaddrとpkt-dstaddrは同じ値になる?
はい、同じ値になります。dstaddr と pkt-dstaddr の値が異なるのは、ENIに複数のIPアドレス(プライマリ + セカンダリ)が割り当てられていて、セカンダリIP宛てのトラフィックが発生した場合のみです。IPが1つだけの場合は、両方ともそのIPアドレスを表示します。
pkt-srcaddr / pkt-dstaddr はデフォルトで記録される?
いいえ、デフォルトでは記録されません。フローログ作成時にカスタムフォーマットを指定し、${pkt-srcaddr}${pkt-dstaddr} を明示的に追加する必要があります。デフォルトフォーマットには srcaddrdstaddr のみが含まれます。
NATゲートウェイの場合、srcaddrには何が表示される?
NATゲートウェイを経由するトラフィックの場合、srcaddr にはNATゲートウェイのプライベートIPアドレスが表示されます。元のクライアントの実際のIPアドレスを知るには、pkt-srcaddr フィールドが必要です。これがNAT環境で pkt-srcaddr が重要になる主な理由です。
Elastic IPアドレスの場合はどうなる?
Elastic IPは通常プライマリIPにマッピングされるため、dstaddr にはそのプライマリIPが表示されます。ただし、フローログはパブリックIPではなくプライベートIPで記録される点に注意してください。Elastic IPのパブリックアドレス自体はフローログに直接表示されません。
フローログのカスタムフォーマットの設定方法は?
VPCフローログ作成時に「カスタムフォーマット」を選択し、必要なフィールドを指定します。例えば:

${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${pkt-srcaddr} ${pkt-dstaddr} ${srcport} ${dstport} ${protocol} ${action} ${log-status}

AWS CLI の場合:
aws ec2 create-flow-logs --log-format '${srcaddr} ${dstaddr} ${pkt-srcaddr} ${pkt-dstaddr} ${action}' ...

Created by SSuzuki1063

AWS SAP Learning Resources