VPC フローログの取得方法とログ見方
概要
はじめに
- 本日は、VPC フローログの取得方法と、取得したフローログの見方をご説明します。
VPC フローログとは
- VPC フローログは、VPC で使用するネットワークインターフェイスとの間で行き来する IP トラフィックに関する情報をキャプチャする機能です。キャプチャしたフローログは、Amazon CloudWatch Logs に出力あるいは Amazon S3 に格納することができます。
- VPC フローログは、VPC、サブネット、あるいはネットワークインターフェイス(ENI)のいずれかに作成します。ENIが特定できる場合は、不要なトラフィックをキャプチャしないようにENIに対してVPC フローログを設定します。
- VPC フローログをENI に対して作成する場合は、EC2にアタッチされたENI 以外に下記サービスによって作成されたENI にもフローログが作成できます。
- Elastic Load Balancing
- Amazon RDS
- Amazon ElastiCache
- Amazon Redshift
- Amazon WorkSpaces
- NAT ゲートウェイ
- トランジットゲートウェイ
- VPC フローログの取得は、ネットワークのスループットやレイテンシーには影響しません。
VPC フローログでキャプチャされないトラフィック
- 以下のIPトラフィックは、VPC フローログでキャプチャされません。ドキュメントより、引用。
- Amazon DNS サーバーに接続したときにインスタンスによって生成されるトラフィック。
- Amazon Windows ライセンスのアクティベーション用に Windows インスタンスによって生成されたトラフィック。
- インスタンスメタデータ用に 169.254.169.254 との間を行き来するトラフィック。
- Amazon Time Sync Service の 169.254.169.123 との間でやり取りされるトラフィック。
- DHCP トラフィック。
- デフォルト VPC ルーターの予約済み IP アドレスへのトラフィック。
- エンドポイントのネットワークインターフェイスと Network Load Balancer のネットワークインターフェイスの間のトラフィック。
VPC フローログの取得にかかる料金
- IPトラフィックの量に応じたコストがかかるため、解析に必要な期間のみVPC フローログを設定します。また、コストを抑えるため、ENIが特定できる場合は、VPC、サブネット単位ではなく、ENI に対してVPC フローログを設定します。
- VPC フローログの取得には、ログの取り込みにかかるコスト + S3へのログ配信にかかるコスト + S3のデータ保管にかかるコストが必要となります。料金の詳細は、こちらの「Vended Logs および S3 へのログの提供」を参照。
- VPC フローログの取得が終わったら、忘れずに作成したフローログ設定を削除しておきます。
VPC フローログの取得方法
ENIにフローログを作成する
- EC2のAWSコンソールを使用し、ネットワークインターフェースを選択します。
- フィルターなどを使用してENI を特定、フローログのタブを選択します。[フローログの作成]を押し、以下設定をします。
- ログフォーマットはデフォルトの形式に、tcp-flagsを追加しています。事前に、S3バケットの準備が必要です。
- Filter:Accept,Reject,Allのいずれか
- Maximum aggregation interval:1 minute
- Destination:Send to an S3 bucket
- S3 bucket ARN:S3バケットのARNを入力
- Format:Custom format
- Log format:${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status} ${tcp-flags}
- Creareを選択する
S3からフローログをダウンロードする
- フローログに指定したS3バケットからフローログをダウンロードします。
VPC フローログの見方
ログ見方
- ${action}フィールドのACCEPTは、セキュリティグループおよびネットワーク ACLで許可されたトラフィックを表します。REJECTは、セキュリティグループまたはネットワーク ACLで許可されていないトラフィックを表します。
- ${log-status}フィールドはフローログのロギングステータスを表します。意味は下記となります。
- OK: データは選択された送信先に正常に記録されます。
- NODATA: 集約間隔内にネットワークインターフェイスとの間で行き来するネットワークトラフィックはありませんでした。
- SKIPDATA: 集約間隔内に一部のフローログレコードがスキップされました。これは、内部的なキャパシティー制限、または内部エラーが原因である可能性があります。
- デフォルトでは記録されませんが、前述の手順にて追加の ${tcp-flags}フィールドはTCP フラグのビットマスク値を表します。
- SYN: 2、SYN-ACK: 18、FIN: 1、RST: 4であり、SYN と FIN の場合は 3 となります。
ログサンプル
- 以下、ALBに対するセキュリティグループで許可されていないトラフィックのログ。REJECTとなっているため、セキュリティグループあるいはネットワーク ACLなど何らかのフィルタリングによって、拒否されていることが分かる。
- 999999999999はアカウントID,eni-0123456789abcdefはENI ID,xx.xx.xx.xxは送信元,10.10.0.83は送信先のIPです。
3 999999999999 eni-0123456789abcdef xx.xx.xx.xx 10.10.0.83 1466 80 6 5 260 1596470553 1596470610 REJECT OK 2
- 以下、ALBに対するセキュリティグループで許可されたトラフィックのログ。
3 999999999999 eni-0123456789abcdef xx.xx.xx.xx 10.10.0.83 6266 80 6 5 342 1596471933 1596471990 ACCEPT OK 3
3 999999999999 eni-0123456789abcdef 10.10.0.83 xx.xx.xx.xx 80 6266 6 4 332 1596471933 1596471990 ACCEPT OK 19