VPCエンドポイント経由のVPCフローログ取得範囲について理解する

エンドポイントのネットワークインターフェイスとNetwork Load Balancer のネットワークインターフェイスの間のトラフィックはVPCフローログでキャプチャされる?
2022.10.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いきなり問題

こんにちは!AWS事業本部のおつまみです。

いきなりですが、問題です!

あなたはAWS上にVPC AとVPC Bを下記のように構築しました。
VPC AのEC2からNLBのVPCエンドポイント経由でNLB、ALBを介してEC2に接続しています。
またVPC BにはVPCフローログが設定されています。

さて、VPC Bのフローログで取得できるIPトラフィックはどこからどこまででしょう?  

               

いきなり答え

答えはNLB→ALB→EC2までがフローログで取得できる範囲になります。

VPCエンドポイントサービスからNLBへのアクセスはトラフィックできません。
このように公式ドキュメントにもしっかり記載されています。

VPCフローログとは

改めてVPCフローログについて、簡単におさらいします。
VPCのENI(ネットワークインターフェイス)間で行き来する IP トラフィックをキャプチャする機能です。

なるほど。

VPCエンドポイントは別のVPCで作成されるため
VPCエンドポイントサービスにはENIが作られないため

トラフィックが取得できないんですね。

「VPCエンドポイント..?」となっている方はこちらの記事で解説してます。

他にもVPCフローログの特徴を記載します。

  • フローログの取得範囲は「VPC」「サブネット」「個別のENI」(VPCだけじゃない)
  • 取得したログの出力先は「S3」「CloudWatch Logs」「Amazon Kinesis Firehose」(Amazon Kinesis Firehoseは2022/9に配信可能になりました

Amazon Virtual Private Cloud (VPC) フローログが Amazon Kinesis Firehose に配信可能に

どこに出力するのがいいのか?

  • S3・・全体コストを抑えたい場合、Athenaを利用した確認でOKな場合、蓄積したログを後で利用する場合
  • CloudWatch Logs・・リアルタイムなログの可視化が必要な場合、アラートの設定が必要な場合
  • Amazon Kinesis Firehose・・リアルタイムでストリーミング処理を行いたい場合

その他VPCフローログの詳細は公式ドキュメントをご確認下さい。

実際に確認してみた

実際にVPC B側のフローログにはNLB始まりのレコードしか出力されていないのか確認してみます!
今回の構成図です。

VPCフローログを設定するところ以外は、こちらの記事でご紹介したCloudFormationテンプレートで構築しています。

S3バケットの作成

VPCフローログを保存するためのバケットを作成します。
一時的に確認したいだけのため、S3サービスの[バケットの作成]からデフォルトの設定のまま作成します。

VPCフローログを設定

VPC AとBのフローログを作成します。
VPCサービスより各VPCを選択し、[フローログを作成]をクリックします。

任意の名前と先ほど作成したS3バケットを設定します。
他にも[フィルタ][最大集約間隔][ログ形式]などを設定できますが、今回はデフォルトのまま設定します。

VPC AのEC2からVPC BのEC2に接続

VPC AのEC2にSession Manager経由で接続します。
NLBのエンドポイントにcurlをして、VPC Bへの接続を確認します。

 % curl <NLBのエンドポイント>
Hello world

VPCフローログの確認

しばらくするとS3バケットにログが出力されます。

早速ログの中身を確認してみます。

  • 必要なフィールドのみ表示しています。
  • startとendはUNIX時間で表示されるため、変換しています。  

※公式ドキュメント記載の通り、記録される時間は実際にパケットが通過した時間と最大60秒のラグがあります。

・VPC A側

EC2(10.0.0.146)→ NLBのVPCエンドポイント(10.0.0.76)

interface-id srcaddr dstaddr srcport dstport start(※変換済) end(※変換済) action log-status
eni-0dfc71062338593dc 10.0.0.76 10.0.0.146 80 34574 2022年10月04日 20:37:47 2022年10月04日 20:37:49 ACCEPT OK
eni-0dfc71062338593dc 10.0.0.146 10.0.0.76 34574 80 2022年10月04日 20:37:47 2022年10月04日 20:37:49 ACCEPT OK

・VPC B側

NLB(10.1.0.45)→ALB(10.1.0.136)

interface-id srcaddr dstaddr srcport dstport start(※変換済) end(※変換済) action log-status
eni-0b5462ff97b19b4bf 10.1.0.45 10.1.0.136 42382 80 2022年10月04日 20:37:49 2022年10月04日 20:37:51 ACCEPT OK
eni-0b5462ff97b19b4bf 10.1.0.136 10.1.0.45 80 42382 2022年10月04日 20:37:49 2022年10月04日 20:37:51 ACCEPT OK

ALB(10.1.0.136)→EC2(10.1.0.127)

interface-id srcaddr dstaddr srcport dstport start(※変換済) end(※変換済) action log-status
eni-01979b3bf139569bb 10.1.0.136 10.1.0.127 31738 80 2022年10月04日 20:37:50 2022年10月04日 20:31:18 ACCEPT OK
eni-01979b3bf139569bb 10.1.0.127 10.1.0.136 80 31738 2022年10月04日 20:37:50 2022年10月04日 20:31:18 ACCEPT OK

接続確認を行った時のVPC B側のログには、NLB→ALB→EC2のレコードしか出力されていないことがわかりました。(他にもヘルスチェックの通信によるレコードは表示されていました。)

最後に

今回はVPCエンドポイント経由のVPCフローログ取得範囲についてまとめました。
エンドポイント〜NLBのログはVPCフローログでは出力できないことが実際に試して、理解することができました。

どなたかのお役に立てれば幸いです。 最後までお読みいただきありがとうございました!

以上、おつまみ(@AWS11077)でした!