VPC Flow Logsの新メタデータフィールド(ネクストホップ・EC2タグ)を試してみた

VPC Flow Logsの新メタデータフィールド(ネクストホップ・EC2タグ)を試してみた

VPC Flow Logsに追加されたネクストホップメタデータとEC2タグフィールドを実際に有効化しました。ALB → ECSの通信相手ENIや相手側AZ、NAT Gateway経由の通信がフローログ上で確認できることを検証します
2026.06.12

はじめに

2026年6月10日、VPC Flow Logsに新たなメタデータフィールドが追加されました。

https://aws.amazon.com/jp/about-aws/whats-new/2026/06/amazon-flow-logs-metadata/

従来のVPC Flow Logs(デフォルトフォーマットv2)は送信元/宛先IP・ポート・プロトコル・バイト数など14フィールドを記録します。しかし「通信のネクストホップに該当するリソースは何か」「相手側のAZはどこか」を知るにはdescribe-network-interfaces等で別途調べる必要がありました。

今回追加されたフィールドにより、対応する通信ではフローログの1レコードでネクストホップのENI・サブネット・AZ・VPCを確認できます。事前に指定したEC2インスタンス/ENIのタグ値も同様です。

本記事で検証するフィールド

本記事では、従来の14フィールドに加えて追加されたネクストホップ関連フィールドとinterface-type、およびEC2タグフィールドを検証します。まず、ネクストホップ確認に使ったフィールドは以下です。

# フィールド 用途
15 interface-type 記録元ENIの種別
16 next-hop-interface-id ネクストホップのENI ID
17 next-hop-subnet-id ネクストホップのサブネット
18 next-hop-az-id ネクストホップのAZ
19 next-hop-vpc-id ネクストホップのVPC
20 next-hop-interface-type ネクストホップの種別(例:regional_nat_gateway

EC2タグフィールド(instance-taginterface-tag)については後述します。

新フォーマットでは version フィールドの値が 11 になります(従来は 2)。

https://docs.aws.amazon.com/vpc/latest/userguide/flow-log-records.html

フローログの有効化手順

東京リージョン(ap-northeast-1)のALB + ECS Fargate構成が稼働中のVPCに対し、フローログのみを追加しました。新フィールドを使うにはカスタムフォーマットで新規フローログを作成します。

IAM ロール作成

aws iam create-role \
  --role-name agentcore-webshell-flow-logs-role \
  --assume-role-policy-document '{
    "Version": "2012-10-17",
    "Statement": [{
      "Effect": "Allow",
      "Principal": {"Service": "vpc-flow-logs.amazonaws.com"},
      "Action": "sts:AssumeRole"
    }]
  }'

aws iam put-role-policy \
  --role-name agentcore-webshell-flow-logs-role \
  --policy-name FlowLogsPolicy \
  --policy-document '{
    "Version": "2012-10-17",
    "Statement": [{
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
      ],
      "Resource": "*"
    }]
  }'

ロググループ作成

aws logs create-log-group \
  --log-group-name /vpc/agentcore-webshell-flow-logs \
  --region ap-northeast-1

aws logs put-retention-policy \
  --log-group-name /vpc/agentcore-webshell-flow-logs \
  --retention-in-days 7 \
  --region ap-northeast-1

フローログ作成(ネクストホップフィールド付き)

aws ec2 create-flow-logs \
  --resource-ids vpc-0bb0ec1dcd48xxxx \
  --resource-type VPC \
  --traffic-type ALL \
  --log-destination-type cloud-watch-logs \
  --log-group-name /vpc/agentcore-webshell-flow-logs \
  --deliver-logs-permission-arn arn:aws:iam::7846937xxxxx:role/agentcore-webshell-flow-logs-role \
  --log-format '${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status} ${interface-type} ${next-hop-interface-id} ${next-hop-subnet-id} ${next-hop-az-id} ${next-hop-vpc-id} ${next-hop-interface-type}' \
  --max-aggregation-interval 60 \
  --region ap-northeast-1

--log-format${next-hop-interface-id} などのネクストホップフィールドを指定します。

作成後、describe-flow-logsFlowLogStatusACTIVE になっていることを確認します。1〜2分でログが到着し始めます。

検証結果

ALB → ECS タスクのネクストホップ追跡

ALBのENI(eni-0bcf1b5ac970xxxx)からECSタスクへの通信レコードを確認します。

11 7846937xxxxx eni-0bcf1b5ac970xxxx 192.168.24.xxx 192.168.25.xxx 60628 3000 6 5 407 1781242505 1781242506 ACCEPT OK - eni-0ef3b34b6ff0xxxx subnet-0034e5d410bbxxxx apne1-az1 vpc-0bb0ec1dcd48xxxx -

従来フォーマットでは、同種の通信は以下のように14フィールドまでで記録されます。

2 7846937xxxxx eni-0bcf1b5ac970xxxx 192.168.24.xxx 192.168.25.xxx 60628 3000 6 5 407 1681242505 1681242506 ACCEPT OK

従来は14フィールドで終わっており、この通信の先にどのENIがあるか分かりませんでした。新フォーマットでは末尾にネクストホップの情報が追加されています。

フィールド 意味
next-hop-interface-id eni-0ef3b34b6ff0xxxx ECS タスクの ENI
next-hop-subnet-id subnet-0034e5d410bbxxxx ECS タスクが所属するサブネット
next-hop-az-id apne1-az1 ECS タスクの AZ
next-hop-vpc-id vpc-0bb0ec1dcd48xxxx 同一 VPC 内通信
next-hop-interface-type - この例ではNAT Gateway等の中継デバイス種別は記録されていない

クロスAZ通信の可視化

ECSタスクのENI(eni-0ef3b34b6ff0xxxx)のレコードを確認します。このENIでは、next-hop-*フィールドに通信相手のALB ENI情報が記録されていました。

同一AZ(apne1-az1)のALB ENIからの通信:

11 7846937xxxxx eni-0ef3b34b6ff0xxxx 192.168.24.xxx 192.168.25.xxx 39708 3000 6 5 407 1781242688 1781242708 ACCEPT OK - eni-0bcf1b5ac970xxxx subnet-0034e5d410bbxxxx apne1-az1 vpc-0bb0ec1dcd48xxxx -

別AZ(apne1-az4)のALB ENIからの通信:

11 7846937xxxxx eni-0ef3b34b6ff0xxxx 192.168.12.xxx 192.168.25.xxx 63634 3000 6 5 407 1781242688 1781242708 ACCEPT OK - eni-0a5ad0e49676xxxx subnet-034e9621c47axxxx apne1-az4 vpc-0bb0ec1dcd48xxxx -

next-hop-az-id の値が apne1-az1apne1-az4 で異なります。今回は記録元のECSタスクENIが apne1-az1 にあることが分かっているため、next-hop-az-idapne1-az4 のレコードをクロスAZ通信として識別できます。

AZ間のデータ転送には料金が発生するため、next-hop-az-id を使うことでクロスAZ通信に該当するレコードを絞り込めます。集計対象のENIや通信方向を決めてbytesを集計すれば、クロスAZ転送量の内訳を可視化しやすくなります。従来は各ENIのサブネットをdescribe-network-interfacesで逆引きしてAZを特定する必要がありましたが、その手間がなくなります。

NAT Gateway 経由の外部通信

EC2インスタンス(プライベートサブネット配置)から外部への送信レコード:

このレコードは後述のタグフィールドも有効化したフォーマットです。interface-typeの後にinstance-taginterface-tagが続き、その後にネクストホップフィールドが記録されます。

11 7846937xxxxx eni-0ea6b0349fcaxxxx 192.168.2.xxx 52.195.198.xxx 54596 443 6 15 4564 1781243707 1781243723 ACCEPT OK - flowlog%2Dtest%2Dinstance flowlog%2Dtest%2Deni - - apne1-az4 vpc-0bb0ec1dcd48xxxx regional_nat_gateway
フィールド 意味
next-hop-interface-id - このレコードではNAT GatewayのENI IDは記録されていない
next-hop-subnet-id - このレコードではサブネットIDは記録されていない
next-hop-az-id apne1-az4 NAT Gateway の AZ
next-hop-vpc-id vpc-0bb0ec1dcd48xxxx NAT Gateway が所属する VPC
next-hop-interface-type regional_nat_gateway NAT Gateway 経由であることを示す

next-hop-interface-typeregional_nat_gateway になっているため、この通信がNAT Gatewayを経由していることがフローログだけで判別できます。

今回の検証環境ではリージョナルNAT Gatewayを使用しているため、値がregional_nat_gatewayです。従来のAZ単位のNAT Gatewayを使用している場合はnat_gatewayになります。リージョナルNAT GatewayはAZ障害時に自動フェイルオーバーしますが、通常時は単一AZで処理されます。next-hop-az-idには実際に処理を行ったAZ(この例ではapne1-az4)が記録されていました。

一方、同じENIのIPv6通信はネクストホップが全て - です。

11 7846937xxxxx eni-0ea6b0349fcaxxxx 2406:da14:xxxx:0:xxxx:xxxx:xxxx:xxxx 2406:da60:xxxx:20:0:0:xxx:xxxx 58422 443 6 147 11501 1781243707 1781243723 ACCEPT OK - flowlog%2Dtest%2Dinstance flowlog%2Dtest%2Deni - - - - -

このIPv6通信はNAT Gateway経由ではないため、next-hop-interface-typeregional_nat_gatewayになりません。この例ではネクストホップ関連フィールドが全て-でした。この例では、IPv4通信はregional_nat_gateway、IPv6通信は-となっており、NAT Gateway経由の有無をフローログ上で区別できました。

EC2 タグフィールドの確認

EC2インスタンスとENIにそれぞれNameタグを付与し、TagFieldSpecificationsinstance-taginterface-tagを記録するフローログを作成しました。先ほどのNAT Gatewayセクションと同じレコードですが、今度はタグフィールドに注目します。

フィールド デコード後
instance-tag flowlog%2Dtest%2Dinstance flowlog-test-instance
interface-tag flowlog%2Dtest%2Deni flowlog-test-eni

タグ値はUTF-8パーセントエンコードで記録されます(-%2D)。

タグフィールドを有効化するには、フローログ作成時に --tag-field-specifications で対象リソースタイプとタグキーを指定します。

aws ec2 create-flow-logs \
  --resource-ids vpc-0bb0ec1dcd48xxxx \
  --resource-type VPC \
  --traffic-type ALL \
  --log-destination-type cloud-watch-logs \
  --log-group-name /vpc/agentcore-webshell-flow-logs \
  --deliver-logs-permission-arn arn:aws:iam::7846937xxxxx:role/agentcore-webshell-flow-logs-role \
  --log-format '${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status} ${interface-type} ${instance-tag} ${interface-tag} ${next-hop-interface-id} ${next-hop-subnet-id} ${next-hop-az-id} ${next-hop-vpc-id} ${next-hop-interface-type}' \
  --tag-field-specifications 'ResourceType=instance,Tags=[{Key=Name}]' 'ResourceType=network-interface,Tags=[{Key=Name}]' \
  --max-aggregation-interval 60 \
  --region ap-northeast-1

EC2タグフィールドを使うには、タグ参照に必要な権限が必要です。今回の検証では、フローログ配信用IAMロールにec2:DescribeTagsを追加しました。また、サービスリンクロールが未作成の場合は、フローログ作成を実行するIAMプリンシパルにiam:CreateServiceLinkedRoleが必要になる場合があります。

注意事項

  • 既存フローログのフォーマットは変更できません。新フィールドを使うには新規フローログの作成が必要です。
  • --tag-field-specifications のパラメータでタグを指定するキーは Tags 配列内の Key です(パラメータ名が TagKeys ではなく Tags であることに注意)。
  • CloudFormationの AWS::EC2::FlowLog リソースには現時点で TagFieldSpecifications プロパティが未実装です。CLIまたはAPIで作成する必要があります。

まとめ

VPC Flow Logsの新メタデータフィールドにより、従来は別途APIで確認していたネクストホップ情報や、事前に指定したタグ値をフローログの1レコード上で確認できるようになりました。特に、クロスAZ通信の相手側AZの確認や、NAT Gateway経由かどうかの判別がログ上で行いやすくなる点は実用的な改善です。既存フローログのフォーマットは変更できないため、新フィールドを使う場合はカスタムフォーマットで新規フローログを作成します。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事