クラウドの世界へようこそ!SREとして日々インフラの裏側と向き合っている私ですが、クラウドネットワークの面白さ、そして怖さの双方が凝縮されているのが「VPCフローログ」です。
AWSの仮想空間(VPC)の中を、目に見えないパケットが日々ものすごい勢いで駆け巡っています。「今、一体誰と誰が通信しているんだろ?」そんな疑問を持ったことはありませんか?ネットワークの初学者にとって、目に見えない通信の可視化は最初の一歩であり、最大の壁でもあります。
今回は、AWSのネットワーク監視の主役である「VPCフローログ」のログフォーマット、そしてバージョンアップに伴う進化(V2からV5まで)について、身近な例えを交えながら優しく紐解いていきたいと思います。一歩ずつ、リラックスして理解していきましょう!
—
1. VPCフローログってなぁに?(現実世界でたとえてみよう)
いきなり「ENI(Elastic Network Interface)を通るパケットのメタデータが〜」なんて言われると、頭がクラクラしてしまいますよね。ですので、まずは私たちの身近な世界に置き換えて考えてみましょう。
想像してみてください。あなたは巨大なマンションの管理人さんです。このマンション(=VPC)にはたくさんの部屋(=EC2インスタンスなどのリソース)があり、住人たちは日々、外の世界と手紙(=パケット)のやり取りをしています。
管理人さんであるあなたは、セキュリティと管理のために、エントランスに「郵便の出入り記録台帳」を置くことにしました。
- 「何時何分に」
- 「どこの誰から(差出人)」
- 「どの部屋の誰宛てに(宛先)」
- 「どんな大きさの封筒が(データ量)」
- 「無事に届いたか(ステーションの状態)」
この台帳こそが、AWSにおけるVPCフローログの正体です。パケットの中身(手紙のラブレターの本文など)を見ることはプライバシーの観点(およびAWSの仕様)からできませんが、「誰と誰が、どれくらいやり取りしたか」というメタデータ(封筒の表書き情報)を完璧に記録してくれるスグレモノなのです。
—
2. ログフォーマットの基本構造(V2のフィールドを覗いてみよう)
VPCフローログの歴史はバージョン2(V2)から本格的に普及しました。今でもデフォルトとしてよく見かける、基本のフォーマットを見てみましょう。
フローログは、スペース(またはカスタムの場合は指定文字)区切りのテキストデータとして出力されます。典型的なV2の1行は、次のような並びになっています。
2 123456789012 eni-0123456789abcdef0 192.0.2.1 198.51.100.2 443 52341 6 1 40 1420000000 1420000060 ACCEPT OK
パッと見ると暗号のようですが、左から順に意味が決まっています。主要なものをいくつかピックアップして、郵便の封筒の表書きになぞらえて紐解いてみましょう。
version(2): 記録用紙のフォーマットのバージョンです。account-id(123456789012): 荷物を受け付けたあなたのAWSアカウントIDですね。interface-id(eni-0123456789abcdef0): 郵便受け口(ENI)の固有IDです。srcaddr(192.0.2.1): 差出人のIPアドレス。dstaddr(198.51.100.2): 宛先のIPアドレス。srcport/dstport(443 / 52341): 差出人と宛先の「窓口番号(ポート番号)」。例えばWebなら443など。protocol(6): 通信のルールの種類。番号6はTCP(確実に届けるお堅いルール)、17はUDP(どんどん投げる速達ルール)を意味します。packets/bytes(1 / 40): 送られたパケットの数と、その総バイト数(重さや大きさ)。start/end(タイムスタンプ): 通信が始まった時間と終わった時間(Unix時間)。action(ACCEPT / REJECT): セキュリティグループやネットワークACLの検問を「通した(ACCEPT)」のか「拒否した(REJECT)」のか。トラブルシューティングで一番見る重要ポイントです!log-status(OK / NODATA / SKIPDATA): ログ自体が正常に記録されたかを示すステータス。
—
3. バージョンアップの歴史:V2からV5までの進化を追う
「基本はV2で十分じゃない?」と思われるかもしれませんが、クラウドのアーキテクチャが複雑化するにつれて、もっと細かい情報が欲しくなりました。
ここで、V2から最新のV5に至るまでの進化のドラマを、段階を追って見ていきましょう。
V3での進化:トラフィックの「向き」がわかるように!
V2では「どちらから通信が始まったか」の方向性が少し分かりにくかったのですが、V3で flow-direction や traffic-path といったフィールドが追加されました。
- 例え話: 郵便が「マンションの住人が外に出したもの(Egress)」なのか、「外から住人宛てに届いたもの(Ingress)」なのかが、パッと見で判別できるようになりました。
V4での進化:より深いネットワーク階層へ
V4では、AWSのローカルネットワーク環境におけるIPアドレスの仕組みに合わせたフィールド(パケットが通るレイヤーの拡張など)が強化されました。コンテナや複雑なVPCピアリング環境での追跡精度がグッと上がったのです。
V5での進化:カスタムフィールドと多様なプロトコルの網羅
そして現在の主流であるV5。これが本当に強力です!
V5では、これまでの固定化されたフィールドに加え、自分で記録したい情報を自由に追加できる「カスタムフォーマット」の柔軟性が飛躍的に向上しました。
さらに、TCPのフラグ(SYN, ACK, FINなど、通信の「握手」のフェーズ)や、パケットの方向、さらにはAWSTransit Gatewayを通過する際のメタデータなど、ネットワークエンジニアが「ここが知りたかった!」と叫びたくなる痒い所に手が届くフィールドが網羅されました。
—
4. 実務でどう使う?VPCフローログの活用シナリオと設定例
SREの現場では、このフローログをどのように活かしているのでしょうか。具体的なシーンと、AWS CLIでの簡単な有効化のハンズオンを見てみましょう。
シーン:セキュリティインシデントの早期発見と「REJECT」の解析
「なんだか特定のサーバーにやたらとアクセスが集中しているぞ?」という時、CloudWatch Logs InsightsやAmazon Athenaを使って、フローログから action = 'REJECT' となっているログを検索します。
「おや、海外の未知のIPから、SSH(ポート22)への総当たり攻撃(ブルートフォース)がガンガン弾かれているな」といった状況が手に取るように分かります。ファイアウォール(セキュリティグループ)がしっかり仕事をしている証拠を確認できるわけですね。
AWS CLIでの設定サンプル
それでは、実際に特定のVPCに対して、豊富な情報量を持つ最新のV5形式でフローログを有効化するコマンドの例を見てみましょう。実務でそのまま参考にしていただけます。
# 【AWS CLI】指定したVPCに対して、CloudWatch Logsに出力するVPCフローログ(V5形式)を作成する例
aws ec2 create-flow-logs \
--resource-type VPC \
--resource-ids vpc-0123456789abcdef0 \
--traffic-type ALL \
--log-destination-type cloud-watch-logs \
--log-group-name /aws/vpc/flow-logs/production \
--deliver-logs-permission-arn arn:aws:iam::123456789012:role/VPCFlowLogsExecutionRole \
--log-format '${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status} ${flow-direction} ${traffic-path}'
コードのポイント解説:
--traffic-type ALL: 「通したもの(ACCEPT)」だけでなく「拒否したもの(REJECT)」も含めたすべての通信を記録します。セキュリティ調査にはALLが基本です。--log-format: ここでV5のカスタムフォーマットを指定しています。バージョン情報から方向(flow-direction)、パス(traffic-path)まで網羅し、後からの解析をしやすくしています。
—
5. おわりに
いかがでしたでしょうか?
VPCフローログのフォーマット仕様、そしてV2からV5への進化の背景には、「クラウド上の巨大なネットワーク都市で、安全かつ円滑に通信を行わせたい」というエンジニアたちの知恵と工夫が詰まっています。
最初は呪文のように見えたアルファベットの羅列も、「郵便の表書き」という文脈に置き換えてみると、途端に親しみやすく感じられたのではないでしょうか。
インフラやネットワークの初学者の皆さん、焦る必要は全くありません。まずはマネジメントコンソールから小さなVPCでフローログをポチッと有効にし、CloudWatch Logsでその中身をのぞき見るところから始めてみてください。「おっ、自分のPCからAWSへの通信が記録されてる!」という小さな感動の積み重ねが、あなたを一流のクラウドエンジニアへ導いてくれます。
それでは、また次回のインフラ探検でお会いしましょう!
コメント