はじめに
アップデートで Amazon VPC Flow Logs に新しく4つのメタデータフィールドが追加されたので、まとめてみました。 もちろん東京リージョンでも使用可能です。
こちらの 毎日AWSでも取り上げているアップデートなので合わせて確認いただけると
記事目安...10分
アップデート内容の詳細
どのようなアップデートか
今回のアップデートでは、以下4つのメタデータフィールドが新しく収集されるようになりました。
フィールド名 | 説明 | 出力値の例 |
---|---|---|
flow-direction | ENIにおけるトラフィックの方向を表します。 | ingress or egress |
traffic-path | 出力されたトラフィックが宛先に到達するまでにどのようなパスを通ったかを表します。それぞれの数字には意味が含まれます。(*1) | 1 ~ 8 |
pkt-src-aws-service | 送信元IPアドレスがAWSサービスで使用されている場合、その送信元のAWSサービス名が記載されます | EC2, DYNAMODBなど |
pkt-dst-aws-service | 宛先IPアドレスがAWSサービスで使用されている場合、その宛先のAWSサービス名が記載されます | pke-src-aws-serviceに同じ |
参考: VPC Flow Logs - Available fields
*1. traffic-path の出力値について
traffic-path はログに記録される数値により、どのトラッフィクパスを通ったのかを特定できます
ex)
1-同じVPC内の別のリソース経由
8-IGW経由
詳細は、VPC Flow Logs - Available fields の taffic-path をご参照ください。
メリット
トラフィック情報をより詳細に取得できるようになったので、運用上のオーバーヘッド をかなり減らせます * 特に Amazon CloudWatch Logs Insight や Amazon Athena を使ったクエリと相性が抜群
使用する際の注意点
- メタデータを含むログを出力したい場合は、[ログレコードの形式]項目を "AWSのデフォルト形式"ではなく、"カスタムフローログ" で作成する必要があります
- 既存のフローログはログ形式を変更できないため、新しく作る必要がある点もご注意ください
実際に試してみる
今回は以下の形式で実際にログを取得してみます。
${interface-id} ${protocol} ${pkt-srcaddr} ${pkt-dstaddr} ${pkt-src-aws-service} ${pkt-dst-aws-service} ${flow-direction} ${traffic-path}
パターン1. EC2 → EC2 へ、パブリック IP アドレス指定で SSH接 続する
srcEC2(pubIp:54.199.xxx.xxx, prvIp:172.31.xxx.xxx)→dstEC2(pubIp:13.231.xxx.xxx, prvIp:172.31.○○○.○○○)へ SSH 接続した結果が以下となります。
〇 srcEC2 eni-039f16dd56xxxxxx 6 172.31.xxx.xxx 13.231.xxx.xxx - EC2 egress 8 eni-039f16dd56xxxxxx 6 13.231.xxx.xxx 172.31.xxx.xxx EC2 - ingress - 〇 dstEC2 eni-024b74ac75xxxxxx 6 54.199.xxx.xxx 172.31.○○○.○○○ EC2 - ingress - eni-024b74ac75xxxxxx 6 172.31.○○○.○○○ 54.199.xxx.xxx - EC2 egress 8
インターネット経由ということはインターネット GW を経由してきているため、"${traffic-path}" に 8 が記録されていますね。
8 — Through an internet gateway VPC Flow Logs - Available fields
また、パブリック IP アドレスが記録されている場合は、 "${pkt-src-aws-service}", "${pkt-dst-aws-service}" に EC2 が記載されています。
これは、パブリック IP アドレスに AWS サービス情報が紐づけれられているからだと考えられます。
一方 プライベート IP アドレスには AWS サービス情報が紐づけれられていないため、AWS サービス情報を拾えていません。
パターン2. EC2 → EC2 へ、プライベート IP アドレス指定で SSH 接続する
srcEC2(prvIp: 172.31.xxx.xxx)→dstEC2(prvIp: 172.31.○○○.○○○)へ SSH 接続した結果が以下となります。
〇 srcEC2 eni-039f16dd56xxxxxx 6 172.31.○○○.○○○ 172.31.xxx.xxx - - ingress - eni-039f16dd56xxxxxx 6 172.31.xxx.xxx 172.31.○○○.○○○ - - egress 1 〇 dstEC2 eni-024b74ac75xxxxxx 6 172.31.xxx.xxx 172.31.○○○.○○○ - - ingress - eni-024b74ac75xxxxxx 6 172.31.○○○.○○○ 172.31.xxx.xxx - - egress 1
プライベート IP アドレス指定ということは VPC内で完結する通信のため、"${traffic-path}" に 1 が記録されていますね。
1 — Through another resource in the same VPC VPC Flow Logs - Available fields
パターン1と同様、プライベート IP アドレスには AWS サービス情報が紐づけれられていないため、AWS サービス情報を拾えていません。
終わりに
実際に出力してみて、VPC Flow Logs により出力されたログが、これまで以上に判別しやすくなったと感じました。
皆さんもぜひ有効活用してみてください!
菅谷 歩 (記事一覧)