Amazon Athena を使用したフローログのクエリ - Amazon Virtual Private Cloud

Amazon Athena を使用したフローログのクエリ

Amazon Athena は、標準の SQL を使用して、フローログなどの Amazon S3 内のデータを分析できる対話型のクエリサービスです。VPC フローログで Athena を使用すると、VPC を通過するトラフィックに関する実用的なインサイトをすばやく得ることができます。例えば、仮想プライベートクラウド(VPC)内のリソースからトップトーカーを特定したり、最も TCP 接続を拒否された IP アドレスを特定したりできます。

オプション
  • 必要な AWS リソースと事前定義されたクエリを作成する CloudFormation テンプレートを生成することで、VPC フローログと Athena との統合を合理化および自動化できます。これにより、VPC を通過するトラフィックに関するインサイトを得ることができます。

  • Athena を使用して独自のクエリを作成できます。詳細については、Amazon Athena ユーザーガイドAmazon Athena を使用したフローログのクエリを参照してください。

料金

クエリの実行には、標準の Amazon Athena 料金が発生します 。(パーティションのロード頻度を指定するが、開始日と終了日を指定しない場合)定期的なスケジュールで新しいパーティションをロードする Lambda 関数には、標準の AWS Lambda 料金が発生します。

コンソールを使用した CloudFormation テンプレートの生成

最初のフローログが S3 バケットに配信された後、CloudFormation テンプレートを生成し、そのテンプレートを使用してスタックを作成することで、Athena と統合できます。

要件
  • 選択したリージョンで、AWS Lambda と Amazon Athena がサポートされている必要があります。

  • Amazon S3 バケットは、選択したリージョンに存在する必要があります。

  • フローログのログレコード形式には、実行する特定の事前定義されたクエリで使用されるフィールドを含める必要があります。

コンソールを使用してテンプレートを生成するには
  1. 次のいずれかを行ってください。

    • Amazon VPC コンソールを開きます。ナビゲーションペインで [お客様の VPC] をクリックして、VPCを選択します。

    • Amazon VPC コンソールを開きます。ナビゲーションペインで [サブネット] をクリックして、サブネットを選択します。

    • Amazon EC2 コンソールを開きます。ナビゲーションペインで [ネットワークインターフェース] クリックして、ネットワークインターフェイスを選択します。

  2. [フローログ] タブで、Amazon S3 に発行するフローログを選択し、[アクション]、[Athena 統合の生成] の順に選択します。

  3. パーティションのロード頻度を指定します。[なし] を選択した場合は、過去の日付を使用して、パーティションの開始日と終了日を指定する必要があります。[毎日]、[毎週]、または [毎月] を選択した場合は、パーティションの開始日と終了日はオプションになります。開始日と終了日を指定しない場合、CloudFormation テンプレートは、定期的なスケジュールで新しいパーティションをロードする Lambda 関数を作成します。

  4. 生成されたテンプレート用の S3 バケット、およびクエリ結果用の S3 バケットを選択または作成します。

  5. [Athena 統合を生成] を選択します

  6. (オプション)成功メッセージで、CloudFormation テンプレートに指定したバケットに移動するリンクを選択し、テンプレートをカスタマイズします。

  7. 成功のメッセージで、[Create CloudFormation stack] (CloudFormation スタックを作成) を選択して、AWS CloudFormation コンソールで [Create Stack] (スタックの作成) ウィザードを開きます。生成された CloudFormation テンプレートの URL は、[テンプレート] セクションで指定されます。ウィザードを完了して、テンプレートで指定されているリソースを作成します。

CloudFormation テンプレートによって作成されたリソース
  • Athena データベース。データベース名は vpcflowlogsathenadatabase<flow-logs-subscription-id> です。

  • Athena のワークグループ。ワークグループ名は、<flow-log-subscription-id><partition-load-frequency><start-date><end-date>workgroup です。

  • フローログレコードに対応するパーティション化された Athena テーブル。テーブル名は、<flow-log-subscription-id><partition-load-frequency><start-date><end-date> です。

  • Athena の名前付きクエリのセット。詳細については、「事前に定義されたクエリ」を参照してください

  • 指定したスケジュール (毎日、毎週、または毎月) でテーブルに新しいパーティションをロードする Lambda 関数。

  • Lambda 関数を実行するためのアクセス権限を付与する IAM ロール。

AWS CLI を使用した CloudFormation テンプレートの生成

最初のフローログが S3 バケットに配信された後、CloudFormation テンプレートを生成して使用して Athena と統合できます。

次の get-flow-logs-integration-template コマンドを使用して、CloudFormation テンプレートを生成します。

aws ec2 get-flow-logs-integration-template --cli-input-json file://config.json

次は、config.json ファイルの例です。

{ "FlowLogId": "fl-12345678901234567", "ConfigDeliveryS3DestinationArn": "arn:aws:s3:::my-flow-logs-athena-integration/templates/", "IntegrateServices": { "AthenaIntegrations": [ { "IntegrationResultS3DestinationArn": "arn:aws:s3:::my-flow-logs-analysis/athena-query-results/", "PartitionLoadFrequency": "monthly", "PartitionStartDate": "2021-01-01T00:00:00", "PartitionEndDate": "2021-12-31T00:00:00" } ] } }

生成された CloudFormation テンプレートを使用してスタックを作成するには、次の create-stack コマンドを使用します。

aws cloudformation create-stack --stack-name my-vpc-flow-logs --template-body file://my-cloudformation-template.json

事前定義されたクエリを実行する

生成された CloudFormation テンプレートには、AWS ネットワーク内のトラフィックに関する有意義なインサイトをすばやく得るために実行できる一連の定義済みクエリが用意されています。スタックを作成し、すべてのリソースが正しく作成されたことを確認したら、定義済みクエリの 1 つを実行できます。

コンソールを使用して定義済みのクエリを実行するには
  1. Athena コンソールを開きます。

  2. 左側のナビゲーションの [Query editor] (クエリエディタ) を選択します。[Workgroup] (ワークグループ) で、CloudFormation テンプレートによって作成されたワークグループを選択します。

  3. [Saved queries] (保存したクエリ) を選択してクエリを選択し、必要に応じてパラメータを変更してから、クエリを実行します。使用可能な事前定義されたクエリの一覧については、「事前に定義されたクエリ」を参照してください。

  4. [Query results] (クエリ結果) で、クエリの結果を表示します。

事前に定義されたクエリ

Athena の名前付きクエリの完全なリストを次に示します。テンプレートを生成する際に提供される事前定義されたクエリは、フローログのログレコード形式の一部であるフィールドによって異なります。そのため、これらの事前定義されたクエリのすべてがテンプレートに含まれない場合があります。

  • vpcFlowLogsAcceptedTraffic — セキュリティグループとネットワーク ACL に基づいて許可された TCP 接続。

  • VpcFlowLogsAdminPortTraffic — 管理ポートでリクエストを処理するアプリケーションによって記録された、トラフィックが最も多い上位 10 個の IP アドレス。

  • vpcFlowLogsIPv4Traffic — 記録された IPv4 トラフィックの合計バイト数。

  • vpcFlowLogsIPv6Traffic — 記録された IPv6 トラフィックの合計バイト数。

  • vpcFlowLogsRejectedTCPTraffic — セキュリティグループまたはネットワーク ACL に基づいて拒否された TCP 接続。

  • vpcFlowLogsRejectedTraffic — セキュリティグループまたはネットワーク ACL に基づいて拒否されたトラフィック。

  • vpcFlowLogsShrdpTraffic — SSH および RDP トラフィック。

  • vpcFlowLogStopTalkers — 記録されたトラフィックが最も多い50個のIPアドレス。

  • vpcFlowLogStopTalkersPacketLevel — 記録されたトラフィックが最も多くある 50 個のパケットレベルの IP アドレス。

  • vpcFlowLogStopTalkingInstances — 記録されたトラフィックが最も多い50個のインスタンスの ID。

  • vpcFlowLogStopTalkingSubnets — 記録されたトラフィックが最も多くある 50 個のサブネットの ID。

  • vpcFlowLogStopTcpTraffic — 送信元 IP アドレスに対して記録されたすべての TCP トラフィック。

  • vpcFlowLogstotalBytestRansFerred — 記録されたバイト数が最も多い送信元と送信先 IP アドレスの 50 個のペア。

  • vpcFlowLogstotalBytestRansFerredPacketLevel — 記録されたバイト数が最も多いパケットレベルの送信元および送信先 IP アドレスの 50 個のペア。

  • vpcFlowLogStrafficFrmsrcaddr — 特定の送信元 IP アドレスについて記録されたトラフィック。

  • vpcFlowLogStadfficToDr — 特定の送信先 IP アドレスについて記録されたトラフィック。