Live:CloudOps Webinars & Hands-on Workshops ·Register ↗
メインコンテンツまでスキップ

Amazon Athena を使用した CloudTrail ログ管理の自動化


AWS CloudTrail は、AWS インフラストラクチャ全体のアカウントアクティビティの包括的なモニタリングとログ記録を提供し、監査、コンプライアンス、およびセキュリティ調査のために API コールとイベントをキャプチャします。しかし、特にマルチアカウント組織において AWS 環境がスケールするにつれて、CloudTrail ログのボリュームが大幅に増加し、Amazon Athena でログを分析する際のクエリ時間とコストが増加する可能性があります。これに対処するために、クエリパフォーマンスを最適化しコストを削減するために、パーティション化された Athena テーブルの作成と管理を自動化することをお勧めします。このベストプラクティスガイドでは、AWS Lambda と Amazon Athena を使用して、アカウント、リージョン、および日付ごとに CloudTrail ログをパーティション化する自動化ソリューションを実装する方法を概説し、セキュリティ、コンプライアンス、および運用ユースケースに向けた効率的なログ分析を可能にします。

CloudTrail ログ用のパーティション分割された Athena テーブルを設定する

クエリパフォーマンスを最適化してコストを削減するには、自動化されたソリューションを使用して CloudTrail ログ用にパーティション分割された Athena テーブルを設定します。このアプローチでは、2 つの AWS Lambda 関数をデプロイして、アカウント ID、リージョン、日付でパーティション分割されたアカウント固有および組織全体の Athena テーブルを作成・維持します。パーティション分割により、クエリ中に Athena が関連データのみをスキャンするようになり、パーティション分割されていないデータセットをスキャンする場合と比較して、クエリ速度が大幅に向上し、コストが削減されます。たとえば、特定の AWS アカウントの不審なアクティビティを定義された時間枠内で調査する場合、Athena はログデータセット全体ではなく、関連するパーティションのみをスキャンします。

  • 自動化のための CloudFormation テンプレートのデプロイ: この CloudFormation テンプレートを使用してソリューションをデプロイします。ソリューションには、2 つの Lambda 関数、IAM ロール、AWS Glue データベース、および事前定義された Athena クエリが含まれます。このテンプレートはパーティション分割されたテーブルのセットアップを自動化し、手動設定を不要にし、環境間の一貫性を確保します。GitHub のソリューションはこちらから確認できます。
  • パーティションプロジェクションを使用した Athena での CloudTrail ログ: このソリューションは Athena のプロジェクションパーティショニングを使用します。CloudTrail ログは事前定義されたパーティションスキームを持つ既知の構造を持っているため、Athena パーティションプロジェクション機能を使用してクエリの実行時間を短縮し、パーティション管理を自動化できます。パーティションプロジェクションは、新しいデータが追加されると自動的に新しいパーティションを追加します。これにより、ALTER TABLE ADD PARTITION を使用して手動でパーティションを追加する必要がなくなります。
  • CloudTrail S3 バケットとプレフィックスの指定: CloudFormation テンプレートへの入力として、CloudTrail S3 バケット名と適切なプレフィックスを指定します。組織のトレイルの場合、プレフィックスは ORG_ID/AWSLogs/ORG_ID という形式に従います。ここで ORG_ID は AWS 組織 ID です。単一アカウントのトレイルの場合は、デフォルトのプレフィックス AWSLogs/ を使用してください。AWS CLI コマンド aws cloudtrail describe-trails --trail-name-list TRAIL_NAME を使用してプレフィックスを確認します。カスタムプレフィックスを使用する場合は、デフォルトのプレフィックスに追加してください(例: PREFIX/ORG_ID/AWSLogs/ORG_ID)。
  • Athena クエリ結果の場所を設定する: クエリ結果用の S3 バケットが Athena で設定されていることを確認してください。このバケットを(s3:// プレフィックスなしで)CloudFormation テンプレートに指定し、クエリ出力を保存します。
GitHub ソリューションで自動化

GitHub のCloudTrail Athena 自動化スクリプトにアクセスして、CloudFormation テンプレートをデプロイし、パーティション化された Athena テーブルを使用した CloudTrail ログ分析を効率化します。

アカウント固有のテーブルと統合テーブルを使用した柔軟な分析

このソリューションは、異なるユースケースをサポートするために 2 種類の Athena テーブルを作成します。

  • アカウント固有のテーブル: The CloudTrailLogsPartitionedByAccount Lambda 関数は専用の Athena テーブルを作成します(例: trail_123456789012) は、CloudTrail S3 バケットで検出された各 AWS アカウントに対して作成されます。これらのテーブルはリージョンと日付でパーティション分割されており、チームは無関係なデータをスキャンすることなく、自分のアカウントに固有のログを分析できます。これは、アカウント固有のインシデントを調査するセキュリティチームや、リージョンのアクティビティをトラブルシューティングする運用チームにとって特に有用です。
  • 組織全体の統合テーブル: The CloudTrailLogsPartitionedAllAccounts Lambda 関数は統合テーブルを維持します(例: all_accounts_trail) AWS 組織内のすべてのアカウントからのログを含み、アカウント ID、リージョン、および日付でパーティション分割されています。このテーブルはクロスアカウントの調査と組織全体の監査をサポートし、セキュリティ管理者が環境全体のアクティビティを効率的にクエリできるようにします。

両方の関数は、パーティションプロジェクションを使用して、組織の変化に応じて新しいアカウントとパーティションを自動的に含めるため、手動での更新が不要になります。これらのテーブルを設定して、厳格なセキュリティコントロールと職務分離を強制するために、アクセスが制限された独立したセキュリティ境界内の集中管理された S3 バケットにログを配信します。

同期のための毎日のテーブル更新を有効にする

Athena テーブルが AWS 組織の構造と同期された状態を維持するために、Lambda 関数を設定して毎日更新を実行します。これらの更新により、新しいアカウントが検出され、対応するパーティションが作成されます。これにより、新たに追加されたアカウントやリージョンのログが Athena テーブルに確実に含まれます。この自動化により管理上のオーバーヘッドが軽減され、包括的なログカバレッジが確保されます。また、アカウントアクティビティの継続的なモニタリングを義務付ける FedRAMP や PCI-DSS などのコンプライアンス要件をサポートします。

一般的なユースケース向けの定義済みクエリの活用

一般的なセキュリティおよび運用シナリオに対応するために、事前定義された Athena クエリをソリューションに含めます。たとえば、「最も頻繁にコンソールを使用するユーザーを検索する」クエリは、ユーザーごとに AWS コンソールへのログイン頻度を分析し、潜在的な不正アクセスの特定に役立ちます。これらのクエリはカスタムクエリのテンプレートとして機能し、チームが特定のニーズに合わせた調査を行えるようにします。事前定義されたクエリは、簡単にアクセスして実行できるよう、Athena コンソールの「保存済みクエリ」セクションに保存してください。

保存済みセキュリティクエリへのアクセス

GitHub でAWS CloudTrail Athena デモクエリを探索して、不正なコンソールアクセスの検出などの一般的なセキュリティシナリオ向けに事前構築された Athena クエリを使用できます。

パーティショニングとモニタリングによるコスト最適化

CloudTrail ログをパーティション分割することで、Athena がスキャンするデータ量が削減され、クエリコストを直接削減できます。さらに、以下のコスト管理プラクティスを実装してください。

  • Lambda 関数のコストを監視する: このソリューションでは 2 つの Lambda 関数を使用し、それぞれ 1 日 1 回呼び出されます。AWS Lambda の料金ページを使用してコストを見積もるために、それらのランタイムを監視してください。コストと更新要件のバランスを取るために、必要に応じて呼び出し頻度を調整してください。
  • Athena クエリのコストを追跡する: Athena はクエリごとにスキャンされたデータ量に基づいて課金されます。パーティション分割によりスキャンされるデータは最小限に抑えられますが、Amazon Athena の料金ページを使用してクエリコストを監視してください。AWS Budgets を使用して、CloudTrail と Athena の支出に対するコストしきい値とアラートを設定してください。
  • AWS Cost Anomaly Detection を使用する: CloudTrail と Athena の支出を監視するために AWS Cost Anomaly Detection を設定してください。このサービスは機械学習を使用して予期しないコストの急増を検出し、プロアクティブなコスト管理を可能にします。

不要なコストを避けるためにリソースをクリーンアップする

ソリューションが不要になった場合は、継続的な料金の発生を防ぐために CloudFormation スタックを削除してください。これにより、Lambda 関数、IAM ロール、Glue データベース、および Athena テーブルが削除され、残留コストが発生しないようになります。ソリューションに関連する予期しない費用を特定して対処するために、AWS Budgets および Cost Anomaly Detection レポートを定期的に確認してください。

まとめ

CloudTrail ログ用にパーティション化された Athena テーブルを自動化することで、クエリパフォーマンスが最適化され、コストが削減され、セキュリティおよびコンプライアンスの調査が強化されます。アカウント固有のテーブルと組織全体のテーブルをデプロイし、日次更新を有効にし、S3 バケットを保護することで、このソリューションは CloudTrail ログ分析に対してスケーラブルで効率的なアプローチを提供します。CloudWatch Logs との統合および事前定義されたクエリの活用により調査がさらに効率化され、コスト管理の実践によって手頃な価格が確保されます。このソリューションを実装することで、CloudTrail ログのより迅速でコスト効率が高く安全な分析を実現し、AWS 環境におけるガバナンス、コンプライアンス、および運用上の卓越性をサポートします。