Amazon Web Services ブログ

追加のメタデータを使用した VPC フローログから学ぶ

Amazon Virtual Private Cloudフローログでは、VPC のネットワークインターフェイスを出入りする IP トラフィックに関する情報を取得することができます。フローログのデータは、Amazon CloudWatch Logs またはAmazon Simple Storage Service (S3) に発行できます。

2015 年にVPC フローログを開始したため、VPC 全体の接続性の問題、侵入の検出、以上の検出、またはコンプライアンスの目的でのアーカイブをトラブルシューティングするなどのさまざまなユースケースにそれを使用してきました。今日まで、VPC フローログは、ソース IP、ソースポート、宛先 IP、宛先ポート、アクション (accept、reject) およびステータスなどの情報を提供します。VPC フローログは一度有効になると、エントリは、次のようになります。

この情報はほとんどのフローを理解するのに十分であった一方で、IP アドレスをインスタンス ID に一致させるため、またはフローの方向性を推測して意味のある結論を得るために、追加の計算と検索が必要でした。

今日、ネットワークフローをより良く理解するために、フローログレコードに含めるために、追加メタデータの可用性を通知しています。豊かなフローログにより、ログデータから意味のある情報を抽出するために必要な計算やルックアップの回数を減らすことで、スクリプトを簡素化し、後処理の必要性を完全に排除することができます。

新しい VPC フローログを作成するときに、既存のフィールドに加えて、次のメタデータを追加することができるようになりました。

  • vpc-id : ソース Elastic Network Interface (ENI) を含む VPC の ID。
  • subnet-id : ソース ENI を含むサブネットの ID。
  • instance-id : ソースインターフェイスに関連付けられたインスタンスの Amazon Elastic Compute Cloud (EC2) インスタンス ID。ENI が AWS のサービス (例: AWS PrivateLinkNAT ゲートウェイNetwork Load Balancer など) により配置されると、このフィールドは「-」になります。
  • tcp-flags : 集計期間以内に観察された TCP フラグのビットマスク。たとえば、FIN は 0x01 (1)、SYN は 0x02 (2)、ACK は 0x10 (16)、SYN + ACK は 0x12 (18)、など。(RFC793 「Transmission Control Protocol Specification」の「Control Bits」セクションで指定されています)。
    これは、接続を開始または終了したことを理解できるようにします。TCP は3方向ハンドシェイクを使用して、接続kを確立します。接続マシンは SYN パケットを宛先に送信し、宛先は SYN + ACK で応答し、最後に接続マシンが ACK 送信します。フローログで、ハンドシェイクは 2 行に、2 (SYN)、18 (SYN + ACK) の tcp-flags 値で表示されます。  ACK は、SYNを伴う場合にのみ報告されます (そうしないと、フィルタリングするにはノイズが大きすぎます)。
  • type : トラフィックのタイプ : IPV4、IPV6 または 伸縮自在なファブリックアダプタ
  • pkt-srcaddr : ソースのパケットレベルの IP アドレス。通常、このフィールドを srcaddr とともに使用し、NAT ゲートウェイなど、トラフィックが流れる中間レイヤの IP アドレスを区別します。
  • pkt-dstaddr : パケットレベルの宛先アドレス。前述のものと同様だが、宛先 IP アドレス用のものです。

VPC Flow Log を作成するために、AWS マネジメントコンソールAWS コマンドラインインターフェイス (CLI) または CreateFlowLogs API を使用し、次のようなフィールドを消費するための追加の情報と順序を選択することができます。

または、 AWS コマンドラインインターフェイス (CLI) を次のように使用します。

$ aws ec2 create-flow-logs --resource-type VPC \
                            --region eu-west-1 \
                            --resource-ids vpc-12345678 \
                            --traffic-type ALL  \
                            --log-destination-type s3 \
                            --log-destination arn:aws:s3:::sst-vpc-demo \
                            --log-format '${version} ${vpc-id} ${subnet-id} ${instance-id} ${interface-id} ${account-id} ${type} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${pkt-srcaddr} ${pkt-dstaddr} ${protocol} ${bytes} ${packets} ${start} ${end} ${action} ${tcp-flags} ${log-status}'

# バケット名と VPC ID を必ず置換してください!

{
    "ClientToken": "1A....HoP=",
    "FlowLogIds": [
        "fl-12345678123456789"
    ],
    "Unsuccessful": [] 
}

豊かな VPC フローログは、S3 に配信されます。必要な S3 バケットポリシーを自動的に追加して、VPC フローログが S3 バケットに書き込むことを許可します。VPC フローログは、ネットワークインターフェイスのリアルタイムログストリームを取り込みません。選択した宛先へのデータの収集と発行を開始するのに数分かかる場合があります。ログは最終的に、S3s3://<bucket name>/AWSLogs/<account id>/vpcflowlogs/<region>/<year>/<month>/<day>/で利用可能になります

使用中のラップトップから、IP アドレス 90.90.0.200 から EC2 インスタンスへの SSH 接続は、次のように表示されます。

3 vpc-exxxxxx2 subnet-8xxxxf3 i-0bfxxxxxxaf eni-08xxxxxxa5 48xxxxxx93 IPv4 172.31.22.145 90.90.0.200 22 62897 172.31.22.145 90.90.0.200 6 5225 24 1566328660 1566328672 ACCEPT 18 OK
3 vpc-exxxxxx2 subnet-8xxxxf3 i-0bfxxxxxxaf eni-08xxxxxxa5 48xxxxxx93 IPv4 90.90.0.200 172.31.22.145 62897 22 90.90.0.200 172.31.22.145 6 4877 29 1566328660 1566328672 ACCEPT 2 OK

172.31.22.145 は、EC2 インスタンスのプライベート IP アドレスで、インスタンスに ifconfig とタイプすると表示されるものです。  すべてのフラグは、集計期間中、「OR」が接続されます。接続が短い場合、SYNFIN (3) の両方だけではなく、SYN+ACKFIN (19) は、同じ行にセットされます。

フローログが作成されると、フィールドを追加したり、ログの構造を変更したりすることはできず、このデータを使うスクリプトが誤って壊れないようにします。いかなる変更でも、VPC フローログを削除し、再作成する必要があります。VPC フローログの追加情報を取り込むための追加費用はかかりません。通常の VPC フローログ料金表 が適用されますが、すべてのフィールドを選択するときに、豊かな VPC フローログのレコードがもっと多くのストレージを消費することがあることを覚えておく必要があります。  ご自分のユースケースに関連するフィールドのみを選択することをお勧めします。

豊かな VPC フローログ は VPC フローログが使用可能なすべてのリージョンで使用可能で、本日から使い始めることができます。

— seb

PS: チームからはログするための追加メタデータを操作していると聞いたため、最新情報をお待ちください。