AWS のセキュリティを強化する – CloudTrailの概要と活用方法

こんにちは!傘を持っていくときは雨が降らず、傘を持っていかないときに限って雨が降る、天気に対する判断ミスが一向に減らないyuhanです。
今回のブログでは、CloudTrail について、機能や料金、活用方法などをまとめました。
自身の復習も兼ねておりますが、これからCloudTrailについて学んでいきたい方などの参考になったら幸いです!
CloudTrail とは
CloudTrail とは、AWS におけるユーザーやAWSサービスによるアクションやイベントを記録し、管理するための AWS のサービスです。
不正な操作の検知や異常時の調査などに、活用することができます。
機能
CloudTrail には、以下の機能があります。
- イベント履歴
- 証跡
- CloudTrail Lake
- CloudTrail Insights
それぞれ、簡単に概要を紹介していきます。
イベント履歴
AWSマネジメントコンソール上で過去90日間の管理イベントを表示、検索、ダウンロードできる機能です。
デフォルトで有効化されているため、利用者側で特別な設定をしなくても利用することができます。
イベント履歴は、イベントが発生したAWSリージョンのイベントを記録するため、リージョン単位でイベントの確認が可能です。
90日間を超えた過去の管理イベントを参照したい場合は、次に紹介する証跡を利用します。
後述しますが、イベント履歴の表示には料金は発生しません。
証跡
AWSアカウント上のイベントを、S3バケットに配信・保存する機能です。
オプションで、CloudWatch Logs や EventBridge にも配信することができます。
イベント履歴とは異なり、CloudTrail が有効なAWS リージョンを選択してマルチリージョンで記録を保存する証跡を作成することができます。
また、複数のAWSアカウントからのイベントを1つの証跡に記録することも可能です。
CloudTrail Lake
CloudTrail が記録するイベントに対して、SQLクエリが実行可能になる機能です。
イベントデータストアと呼ばれるログの保存領域を使用するため、使用の際にはイベントデータストアを作成する必要があります。
CloudTrail ではJSON形式でイベントを記録しますが、CloudTrail Lake は、それをApache ORC形式に変換します。Apache ORC形式に変換することで、高速に検索できるようになります。
CloudTrail Lake では、CloudTrail のイベントだけでなく、AWS Audit Manager、AWS Config 、その他AWS外部のイベントを記録するイベントデータストアを作成することができます。
イベントデータストアは、現在のAWSリージョンまたはAWSアカウント内のすべてのAWSリージョンからイベントを記録できます。ただし、AWS外部からのイベントを記録するためのイベントデータストアは、単一のリージョン専用でなければなりません。
また、CloudTrail Lake にはダッシュボードがあり、アカウント内のイベントデータストアについて視覚的に確認することができます。
CloudTrail Insights
CloudTrail に記録されたイベントを分析し、異常の検知に活用できる機能です。
CloudTrail Insights は、過去の管理イベントを分析して、ベースラインと呼ばれるAPIコール率とAPIエラー率の通常のパターンを確立します。
証跡またはイベントデータストアの各リージョンで発生する管理イベントを分析し、APIコール率やエラー率がベースラインから逸脱した場合に、CloudTrail は、Insights イベントを生成し、異常なアクティビティを検出します。
利用料金
無料利用枠
CloudTrail には無料利用枠があります。
下記の範囲内においては、無料で利用できます。
イベント履歴はデフォルトで記録されるので、CloudTrail にどのようにAWS上の操作が記録されているのかを見るくらいであれば、無料で確認が可能です。
機能 | 概要 |
---|---|
イベント履歴 | 直近90日間の管理イベントの記録。(デフォルト) CloudTrail lookup-events API の利用。 |
Lake | 30日間の無料トライアル期間中、以下の制限で利用可能。 ・最大5GBのデータ取り込み ・最大5GBのデータスキャン ・追加費用なしでデータ保存 |
証跡 | 管理イベントのコピーを1つS3バケットに保存。 |
有料利用枠
CloudTrail 証跡
証跡では、イベントの種類ごとに以下の料金が発生します。
種別 | 料金 |
---|---|
S3に配信された管理イベント | 100,000件あたり2.00USD |
S3に配信されたデータイベント | 100,000件あたり0.10USD |
S3に配信された ネットワークアクティビティイベント | 100,000件あたり0.10USD |
CloudTrail Lake
CloudTrail Lake では、データの取り込み、保持、分析(クエリの実行)に料金が発生します。
また、CloudTail Lake には、以下の2種類の料金オプションがあります。使い方に応じて選択しましょう。
- 1年間の延長可能な保持料金(月間使用量が25TB未満の場合に推奨)
- 7年間の保持料金(月間使用量が25TBを超える場合に推奨)
種別 | 1年間の延長可能な保持料金 | 7年間の保持料金 |
---|---|---|
データ取り込み | CloudTrailのイベント: 0.75 USD/GB | 最初の 5 TB/月: 2.5 USD/GB 次の 20 TB/月: 1 USD/GB 25 TB/月を超える場合: 0.50 USD/GB |
他のAWSまたはAWS以外のデータソース: 0.50 USD/GB | ||
データ保持 | 最初の1年間は取り込みコストに含まれる 1 か月あたり 0.023 USD/GBで データ保持期間を延長可能 | 取り込みコストに含まれる |
最大データ保持期間 | 10年間 | 7年間 |
データクエリ | スキャンされたデータ 0.005 USD/GB | スキャンされたデータ 0.005 USD/GB |
CloudTrail Insights
CloudTrail Insights では、以下の料金が発生します。
- Insights タイプごとに分析された 100,000 件のイベントあたり 0.35 USD
意図しない重課金を防ぐために、利用の際は、CloudTrail 証跡を保存するS3バケットからログファイルのサイズを確認するなど、事前に確認してからの利用をお勧めします。
CloudTrail におけるイベント
CloudTrail では、記録するAWS上の操作やAPIコールなどを、以下の4つのタイプのイベントに分類しています。
- 管理イベント
- データイベント
- ネットワークアクティビティイベント
- Insights イベント
管理イベント
AWSアカウントの各種リソースで実行される管理オペレーションに関するイベントです。
セキュリティ設定やログ記録の設定などのようなものが含まれます。
また、マネジメントコンソールへのログインなど、非APIイベントを含む場合もあります。
デフォルトで、証跡とCloudTrail Lake イベントデータは管理イベントを保存します。
管理イベントは、リソースの読み取りのみで変更を行わない読み取りイベント、もしくはリソースの変更を伴う書き込みイベントに更に分類されます。
データイベント
リソース上またはリソース内で実行されたリソースオペレーションに関するイベントです。
S3バケット内のオブジェクトに対する操作(GetObject、DeleteObject、PutObject......)やLambda 関数の実行、SNSの Publish などが含まれます。
証跡とイベントデータストアで利用可能なリソースタイプについては、公式ドキュメントをご確認ください。
証跡やイベントデータストアの作成時、デフォルトではデータイベントは記録されません。利用するAWSサービスや要件に応じて、設定しましょう。
ネットワークアクティビティイベント
プライベートVPCからAWSサービスへVPCエンドポイント経由で行われたAPIコールを記録するイベントです。
以下のAWSサービスについて、ネットワークアクティビティイベントを取得することができます。
- CloudTrail
- Comprehend Medical
- EC2
- AWS IoT FleetWise
- KMS
- Lambda
- S3
- Secrets Manager
ネットワークアクティビティイベントも、証跡やイベントデータストアの作成時に、デフォルトで記録されません。データイベント同様に、利用するサービスや要件に応じて設定しましょう。
Insights イベント
先述のCloudTrail Insights で触れましたが、異常なアクティビティを検出した際に発行されるイベントです。
Insights イベントを記録するには、証跡またはイベントデータストアで Insights イベントを有効化する必要があります。
CloudTrail の活用
イベント履歴
過去90日以内の管理イベントを調査する場合は、AWSコンソール上でイベント履歴から検索を行うのが一番シンプルな方法かと思います。
柔軟性には欠けますが、SQLクエリなどがわからなくても簡単に検索が可能です。
以下の表では、イベント履歴で検索可能なルックアップ属性について示しています。
ルックアップ属性 | 概要 |
---|---|
AWSアクセスキー | 操作やAPIの実行時に使用された アクセスキーID。 |
イベントID | 各イベントを一意に識別するためのID。 |
イベント名 | 実行された操作やAPIなどを示すイベント名。 |
イベントソース | 操作やAPIが実行されたAWSサービス。 |
読み取り専用 | true もしくは false で指定。 デフォルトでは false で表示される。 true にすると読み取りイベントのみを表示。 |
リソース名 | イベントによって参照される リソース名もしくはID。 |
リソースタイプ | イベントによって参照されるリソースのタイプ。 |
ユーザー名 | ユーザー名やロール名、サービスロールなどの イベントによって参照されるID。 |
よく使用するのは、イベント名やリソース名などでしょうか。
上記の表に該当しないIPアドレスなどの値を用いた検索はできないため、より柔軟な検索をしたい場合は後述のAthenaやCloudTrail Lake を活用しましょう。
証跡
S3 バケットに保存した証跡の検索には、AWS Athena を使用することができます。
CloudTrail コンソールから Athena テーブルを作成することができます。

Athena テーブルを作成したら、Athena のクエリエディタからクエリを実行して、証跡に保存しているログを検索します。
Athena を利用することで、イベント履歴から検索を行うより柔軟な検索を行うことが可能です。
また、イベント履歴は90日間の管理イベントのみに限定されるため、それより過去の管理イベントやデータイベントなどを含めた検索や分析を行いたい場合は、こちらの方法か、後述のCloudTrail Lakeを利用する必要があります。
CloudTrail Lake
Athena の場合は、テーブルを作成する必要がありましたが、CloudTrail Lake の場合はイベントデータストアが作成済みであれば、テーブルの作成なしにSQLクエリの実行が可能です。
SQLの実行ができるという点で「CloudTrail Lake と Athena 、どちらを使えばいいの?」と迷ってしまうかもしれませんが、両者にも違いはあります。
Athena は、証跡を保存するS3に検索を行い、CloudTrail Lake ではイベントデータストアに検索を行います。
マルチアカウントのログを検索したい場合、Athena を使う手法では、事前に各アカウントの証跡を集約しておく必要があります。CloudTrail Lake では、イベントデータストアを作成するときに設定が可能です。このため、CloudTrail Lake の方がより簡単に行えます。
また、コストにおいて、Athena がスキャンされたデータサイズに応じて課金されるのに対して、CloudTrail Lake ではそれに加えてデータの取り込みと保存に料金が発生します。
- 既存の証跡で分析を行う場合や費用を安価に抑えたい場合 → 証跡 + Athena
- マルチアカウントでCloudTrailログを分析したい場合 → CloudTrail Lake
上記は一例ですが、このようにユースケースに応じて使い分けましょう。
CloudTrail Insights
CloudWatch及びSNS と連携することで、CloudTrail Insights が生成した Insights イベントのアラート通知を行うことができます。
下記のような手順で、各種リソースを作成・連携させることで簡単に通知の仕組みを作成可能です。
- Insights イベントを記録し、CloudWatch Logs への記録を有効化した証跡を作成。
- 通知に使用するSNSトピックを作成。(暗号化を有効にする場合は、カスタマーマネージドキーを利用。)
- CloudWatch で、Insights イベントが記録された場合にメトリクスを発行するメトリクスフィルターを作成。
- ③で作成したメトリクスフィルターを使用して、②のSNSトピックにアラートを送信するCloudWatch Alarm を作成。
CloudTrail Insights による異常検知を活用することで、調査や分析にかかる時間的コストを削減でき、早期に対策・対応を行うことができるので、運用効率の向上が期待できます。
最後に
CloudTrail は、ユーザーの操作やAPI履歴を保存する、AWSサービス群の中でもセキュリティにおいて特に重要な役割を持つサービスです。
何も起こらないことが理想ではありますが、万が一のために、証跡もしくはCloudTrail Lakeを利用した分析、CloudTrail Insights での不正検知など、CloudTrail の活用方法をしっかり抑えておきたいですね。