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

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

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

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

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 ロール。

Requirements

  • AWS Lambda と Amazon Athena をサポートするリージョンを選択する必要があります。

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

Pricing

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

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

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

コンソールを使用してテンプレートを生成するには

  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 は、[テンプレート] セクションで指定されます。ウィザードを完了して、テンプレートで指定されているリソースを作成します。

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 コンソールを開きます。[ワークグループ] パネルで、CloudFormation テンプレートによって作成されたワークグループを選択します。

  2. 定義済みクエリの 1 つを選択し、必要に応じてパラメータを変更してから、クエリを実行します。

  3. Amazon S3 コンソールを開きます。クエリ結果に指定したバケットに移動し、クエリの結果を表示します。

事前に定義されたクエリ

生成された CloudFormation テンプレートによって提供される Athena 名前付きクエリを次に示します。

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

  • vpcFlowLogsAdminPortTraffic — 管理用 ウェブアプリポートに記録されたトラフィック。

  • 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 アドレスについて記録されたトラフィック。