概要

はじめに

  • 本日は、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

元記事はこちら

VPC フローログの取得方法とログ見方