仮想プライベートクラウド (VPC) のフローログには、パブリック IP アドレスからのインバウンドトラフィックに対して Action = ACCEPT と表示されます。ただし、NAT ゲートウェイはインターネットからのトラフィックを受け入れないと理解していました。NAT ゲートウェイはインターネットからのインバウンドトラフィックを受け入れるのですか?
解決方法
AWS が管理する NAT ゲートウェイはインターネットから開始されるトラフィックを受け入れませんが、VPC フローログの情報がインターネットからのインバウンドトラフィックを受け入れているかのように見える理由が 2 つあります。
理由 1: インバウンドインターネットトラフィックがセキュリティグループまたはネットワークのアクセスコントロールリスト (ACL) によって許可されている
VPC フローログは、インバウンドインターネットトラフィックがセキュリティグループまたはネットワーク ACL によって許可されている場合に、それが受け入れられていると表示します。NAT ゲートウェイにアタッチされているネットワーク ACL がインターネットからのトラフィックを明示的に拒否しない場合、NAT ゲートウェイへのインターネットトラフィックが受け入れられているかのように見えますが、実際のトラフィックは NAT ゲートウェイに受け入れられず、ドロップされます。
これを確認するには、次の操作を行います。
- Amazon CloudWatch コンソールを開きます。
- ナビゲーションペインで、[Insights] を選択します。
- ドロップダウンから、NAT ゲートウェイの Elastic Network Interface と専用インスタンスの Elastic Network Interface が含まれるロググループを選択します。
- 以下のクエリを実行します。
filter (dstAddr like 'xxx.xxx' and srcAddr like 'public IP')
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| limit 10
注意: 検索フィルターで最初の 2 つのオクテットだけを使用して、VPC 内のすべてのネットワークインターフェイスを分析することができます。上記の例では、xxx.xxx を VPC Classless Inter-Domain Routing (CIDR) の最初の 2 オクテットに置き換えます。また、public IP をVPC フローログエントリに表示されているパブリック IP に置き換えてください。
クエリ結果では、NAT ゲートウェイのプライベート IP にそのパブリック IP からのトラフィックが表示されますが、VPC 内の他のプライベート IP にはトラフィックは表示されません。これらの結果により、着信トラフィックが要求されていないものであったことがわかります。ただし、プライベートインスタンスの IP にトラフィックがある場合は、理由 2 にある手順に従ってください。
理由 2: パブリック IP へのトラフィックがプライベートインスタンスから開始された
インターネットアクセスに NAT ゲートウェイを使用するプライベートインスタンスがある場合、VPC フローログにはパブリック IP アドレスからの応答トラフィックが含まれます。パブリック IP へのトラフィックがプライベートインスタンスから開始されたことを確認するには、以下のクエリを実行します。
**注意:**クエリを実行する前に、次の操作を行います。
- VPC フローログでトラフィックを観測した時間枠に対応する時間枠を選択する。
- VPC に複数のロググループがある場合は、適切なグループを選択する。
filter (dstAddr like 'public IP' and srcAddr like 'xxx.xxx') or (srcAddr like 'public IP' and dstAddr like 'xxx.xxx')
| limit 10
xxx.xxx を VPC CIDR の最初の 2 オクテットに置き換えてください。public IP をVPC フローログエントリに表示されているパブリック IP に置き換えてください。10 を超える VPC 内のリソースがパブリック IP へのトラフィックを開始した場合は、limit を増やしてください。
クエリ結果には、プライベートインスタンスとパブリック IP アドレス間の双方向トラフィックが表示されます。プライベートインスタンスまたは外部パブリック IP アドレスのどちらがイニシエータであるかを判断するには、次の例を参照してください。
2022-09-28T12:05:18.000+10:00 eni-023466675b6xxxxxx 10.0.101.222 8.8.8.8 53218 53 6(17) 4 221 1664330718 1664330746 ACCEPT OK
2022-09-28T12:05:18.000+10:00 eni-023466675b6xxxxxx 8.8.8.8 10.0.101.222 53 53218 6(17) 4 216 1664330718 1664330746 ACCEPT OK
このTCP/UDPトラフィック (プロトコルID = 6または17) の例では、送信元ポートが
53218 (一時ポート) のプライベート IP アドレス
10.0.101.222 がイニシエータです。宛先ポート
53 の IP アドレス
8.8.8.8 が受信側と応答側です。
注意: VPC フローログの TCP フラグフィールドをオンにするのがベストプラクティスです。
例えば、次のエントリの最後の列には TCP フラグフィールドがあります。
2022-09-28T12:05:52.000+10:00 eni-023466675b6xxxxxx 10.0.1.231 8.8.8.8 50691 53 6(17) 3 4 221 1664330752 1664330776 ACCEPT OK 2
2022-09-28T12:05:21.000+10:00 eni-023466675b6xxxxxx 8.8.8.8 10.0.1.231 53 50691 6(17) 19 4 216 1664330721 1664330742 ACCEPT OK 18
プライベートIPアドレス 10.0.101.222 は、TCP SYN パケットを表す TCP フラグ 2 のイニシエータです。
次の ICMP プロトコルの例では、ポート情報や TCP フラグがないため、どちら側がイニシエータであるかを判断するだけの十分な情報がありません。
2022-09-27T17:57:39.000+10:00 eni-023466675b6xxxxxx 10.0.1.231 8.8.8.8 0 0 1 17 1428 1664265459 1664265483 ACCEPT OK
2022-09-27T17:57:39.000+10:00 eni-023466675b6xxxxxx 8.8.8.8 10.0.1.231 0 0 1 0 17 1428 1664265459 1664265483 ACCEPT OK
フローログエントリの形式は、作成方法によって異なります。ログ行の形式の詳細については、「フロッグログを表示する」を参照してください。
関連情報
VPC フローログを使用した IP トラフィックのロギング
サンプルクエリ