VPC Flow Logsの送信先にAmazon CloudWatch Logsを選択した場合、ログにどのような設定を行うことができるのかご紹介します。
用語
Amazon VPCとは
Amazon Virtual Private Cloudの略称で、AWS上で動作する独立した仮想ネットワークのことです。
VPCの中にサーバーやデータベースを構築することができます。
Amazon VPC とは? - Amazon Virtual Private Cloud
VPC Flow Logsとは
VPC内で発生した通信結果を記録として残すことができます。
通信結果の範囲を絞りたい場合は、サブネットやネットワークインターフェースにフローログを作成します。
フローログのデータはAmazon CloudWatch Logs、Amazon S3、Amazon Kinesis Data Firehoseに発行することができます。
VPC フローログを使用した IP トラフィックのログ記録 - Amazon Virtual Private Cloud
Amazon CloudWatch Logsとは
Amazon CloudWatch Logs を使用して、Amazon EC2インスタンス、AWS CloudTrail、Route 53およびその他のソースからログファイルをモニタリング、保存、およびアクセスすることができます。
Amazon CloudWatch Logs とは - Amazon CloudWatch Logs
VPC Flow Logsの用途
VPC Flow Logsの用途としては主に以下の3つがあげられます。
- 通信トラブルの調査
サーバと接続できない場合、どこまで通信が到達しているのかなど切り分けに活用することが可能です。 -
セキュリティ設計の結果検証
ログの中身には許可や遮断だけではなく、送信元/宛先/利用されたポート情報が記録できるため、設計したセキュリティ要件通り動作しているか確認や検証をすることが可能です。 -
脅威検出のデータソース
別のAWSサービスであるAmazon GuardDuty※で脅威検出するためのデータソースとして利用することができます。
※Amazon GuardDuty とは - Amazon GuardDuty
VPC Flow Logs作成時の設定
VPC Flow Logs作成画面で設定できる項目は主に以下の3つです。
1. フィルタ
2. 最大集約間隔
3. ログレコード形式
フィルタ
キャプチャするトラフィックを「承諾」「却下」「すべて」のトラフィックから選択することが可能です。
「すべて」のトラフィックがデフォルトで設定されています。
「承諾」を選択すると通信が問題なく行われたトラフィックのみをログと、「却下」を選択すると通信に問題があったトラフィックのみをログとします。
「すべて」を選択すると通信要件にかかわらずすべてのトラフィックがログとして発行されます。
例)承諾
最大集約間隔
特定のフローがキャプチャされ、フローログに集約されるまでの時間のことです。
10分間と1分間を選択することが可能で、10分間がデフォルトで指定されとております。
2020年2月5日より1分間に設定することが可能となりました。
1分間はキャプチャされてからログが格納されるまでの時間が短くなるため、フロー内のイベントをより詳細に可視化することが可能です。
その分ログの量が増加するため、探す手間がかかるところがデメリットとなります。
Amazon VPC フローログで、集約間隔を 1 分に設定できるようになりました
ログレコード形式
デフォルト形式とカスタム形式の2種類があります。
デフォルト形式ではログにどのような情報を何種類含めるか、またその情報を表示する順番については指定されたものとなっております。
反対にカスタム形式では、どのような情報をいくつ含めるか選択することが可能で、順番も自分で決めることができます。
通信結果を記録するにはデフォルト形式で十分な情報が含まれていますが、カスタム形式はログの内容を増減させることができるので、必要な情報のみ記録したい場合や、より詳細な情報を含めたい場合に利用します。
■デフォルト形式
No. | フィールド | 説明 |
---|---|---|
1 | ${version} | VPCフローログバージョン |
2 | ${account-id} | トラフィックが記録されるソースネットワークインターフェイスの所有者の AWS アカウント ID |
3 | ${interface-id} | トラフィックが記録されるネットワークインターフェイスの ID |
4 | ${srcaddr} | 受信トラフィックの送信元アドレスか、ネットワークインターフェイスにおける送信トラフィックのネットワークインターフェイスの IPv4 または IPv6 アドレス |
5 | ${dstaddr} | 送信トラフィックの送信先アドレスか、ネットワークインターフェイスにおける受信トラフィックのネットワークインターフェイスの IPv4 または IPv6 アドレス |
6 | ${srcport} | トラフィックの送信元ポート |
7 | ${dstport} | トラフィックの送信先ポート |
8 | ${protocol} | トラフィックの IANA プロトコル番号 |
9 | ${packets} | フロー中に転送されたパケットの数 |
10 | ${bytes} | フロー中に転送されたバイト数 |
11 | ${start} | 集約間隔内にフローの最初のパケットが受信された時間 (UNIX 秒) |
12 | ${end} | 集約間隔内にフローの最後のパケットが受信された時間 (UNIX 秒) |
13 | ${action} | トラフィックに関連付けられたアクション(ACCEPT = 許可された通信、REJECT = 許可されていない通信) |
14 | ${log-status} | フローログのロギングステータス(OK=正常,NODATA=NICと通信したトラフィックなし,SKIPDATA=ログレコードがキャプチャ中にスキップされた) |
■カスタム形式
No. | フィールド | 説明 |
---|---|---|
1 | ${version} | VPCフローログバージョン |
2 | ${account-id} | トラフィックが記録されるソースネットワークインターフェイスの所有者の AWS アカウント ID |
3 | ${interface-id} | トラフィックが記録されるネットワークインターフェイスの ID |
4 | ${srcaddr} | 受信トラフィックの送信元アドレスか、ネットワークインターフェイスにおける送信トラフィックのネットワークインターフェイスの IPv4 または IPv6 アドレス |
5 | ${dstaddr} | 送信トラフィックの送信先アドレスか、ネットワークインターフェイスにおける受信トラフィックのネットワークインターフェイスの IPv4 または IPv6 アドレス |
6 | ${srcport} | トラフィックの送信元ポート |
7 | ${dstport} | トラフィックの送信先ポート |
8 | ${protocol} | トラフィックの IANA プロトコル番号 |
9 | ${packets} | フロー中に転送されたパケットの数 |
10 | ${bytes} | フロー中に転送されたバイト数 |
11 | ${start} | 集約間隔内にフローの最初のパケットが受信された時間 (UNIX 秒) |
12 | ${end} | 集約間隔内にフローの最後のパケットが受信された時間 (UNIX 秒) |
13 | ${action} | トラフィックに関連付けられたアクション(ACCEPT = 許可された通信、REJECT = 許可されていない通信) |
14 | ${log-status} | フローログのロギングステータス(OK=正常,NODATA=NICと通信したトラフィックなし,SKIPDATA=ログレコードがキャプチャ中にスキップされた) |
15 | ${vpc-id} | トラフィックが記録されるネットワークインターフェイスが含まれる VPC の ID |
16 | ${subnet-id} | トラフィックが記録されるネットワークインターフェイスが含まれるサブネットの ID |
17 | ${instance-id} | インスタンスをお客様が所有している場合、トラフィックが記録されるネットワークインターフェイスに関連するインスタンスの ID |
18 | ${tcp-flags} | TCP フラグのビットマスク値(FIN_1,SYN_2,RST_4,SYN-ACK_18) |
19 | ${type} | トラフィックの種類 |
20 | ${pkt-srcaddr} | トラフィックのパケットレベルの (元の) 送信元 IP アドレス |
21 | ${pkt-dstaddr} | トラフィックのパケットレベルの (元の) 送信先 IP アドレス |
22 | ${region} | トラフィックが記録されるネットワークインターフェイスが含まれるリージョン |
23 | ${az-id} | トラフィックが記録されるネットワークインターフェイスが含まれるアベイラビリティーゾーンの ID |
24 | ${sublocation-type} | sublocation-id フィールドに返されるサブロケーションのタイプ |
25 | ${sublocation-id} | トラフィックが記録されるネットワークインターフェイスが含まれるサブロケーションの ID |
26 | ${pkt-src-aws-service} | pkt-srcaddr フィールド用の IP アドレスの範囲のサブセットの名前 (送信元 IP アドレスが AWS のサービス用の場合) |
27 | ${pkt-dst-aws-service} | pkt-dstaddr フィールド用の IP アドレスの範囲のサブセットの名前 (送信先 IP アドレスが AWS のサービス用の場合) |
28 | ${flow-direction} | トラフィックがキャプチャされるインターフェイスに対するフローの方向 |
29 | ${traffic-path} | 出力トラフィックが送信先につながるパス |
Amazon CloudWatch Logs作成時の設定
Amazon CloudWatch Logs作成画面で設定できる項目は主に以下の3つです。
1. 保持期間
2. メトリクスフィルタ
3. データ保護
保持期間
ログを1日~永久保存することが可能で、デフォルトで永久保存が指定されています。
保持設定より古いデータはすべて自動的に削除されます。
メトリクスフィルタ
ログデータから特定の文字列のフィルタリングが可能です。
また、特定文字列のエントリ頻度などによってアラームを作成したり、SNS連携(メール送信)をしたりする事などが可能です。
例)BENCHMARK
データ保護
2022年11 月 27 日より、Amazon CloudWatch Logsで転送中の機密情報が含まれたログデータを保護することができる機能が追加されました。
保護するデータは、金融情報、健康情報、個人情報にまたがる一般的な機密データパターンのリポジトリである100を超えるマネージドデータ識別子から選択できます。
例:口座番号、クレジットカード番号、生年月日、IPアドレス、運転免許証、麻薬取締局番号、選挙人名簿番号、健康保険証番号、緯度経度、パスポート番号、電話番号、車両番号など
例)IPアドレスをデータ保護に選択
Amazon CloudWatch Logs を使用して機密データを保護する | Amazon Web Services ブログ
おわりに
本記事ではAWSのVPC Flow Logsの設定(Amazon CloudWatch Logsの場合)について記載しました。
設定項目としてはデフォルト設定でも問題ないですが、より要件に沿った選択をすることで効率的な情報を取得することが可能だと思います。