AWS CloudTrail を使用して Amazon EC2 インスタンスへの API コールを追跡するにはどうすればよいですか?

最終更新日: 2021 年 7 月 20 日

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを実行、停止、開始、終了するための API コールを追跡したいと考えています。AWS CloudTrail を使用して Amazon EC2 インスタンスへの API コールを検索するにはどうすればよいですか?

簡単な説明

AWS CloudTrail では、AWS アカウントに対して実行された 4 種類の API コール (イベントタイプ) を識別して追跡できます。

これらのタイプの API コールがアカウントに対して実行された後に確認するには、次のいずれかの方法を使用します。

注: 過去 90 日までのアカウントのイベント履歴を表示できます。

解決方法

CloudTrail イベント履歴を使用して API コールを追跡するには

1.    CloudTrail コンソールを開きます。

2.    [イベント履歴] を選択します。

3.    [Filter] (フィルター) で、ドロップダウンリストから [Event name] (イベント名) を選択します。

4.    [Enter event name] (イベント名の入力) で、検索するイベントタイプを入力します。その後、イベントタイプを選択します。

5.    [Time range] (時間範囲) で、イベントタイプを追跡する目的の時間範囲を入力します。

6.    [Apply] (適用) を選択します。

詳細については、Viewing events with CloudTrail event history および Viewing Cloudtrail events in the CloudTrail console を参照してください。

Amazon Athena クエリを使用して API コールを追跡するには

AWS CloudTrail ログ検索をするために Amazon Athena のテーブルを自動的に作成する方法を教えてください。」の手順に従ってください。

RunInstances API コールのクエリ例を次に示します。サポートされているイベントタイプでも、同様のクエリを使用できます。

重要: 次のクエリ例のいずれかを実行する前に、cloudtrail-logs を Athena テーブル名に置き換えてください。

RunInstances API コールのために使用可能なすべてのイベント情報を返すクエリの例

SELECT *
FROM cloudtrail-logs
WHERE eventName = 'RunInstances'

RunInstances API コールに関するフィルター処理されたイベント情報を返すクエリの例

SELECT userIdentity.username, eventTime, eventName
FROM cloudtrail-logs
WHERE eventName = 'RunInstances'

特定の時点から現在の日付までの文字列「Instances」で終わる API のイベント情報を返すクエリの例

重要: '2021-07-01T00:00:01Z' の部分は、イベント情報を返す時点に置き換えてください。

SELECT userIdentity.username, eventTime, eventName
FROM cloudtrail-logs
WHERE (eventName LIKE '%Instances') AND eventTime > '2021-07-01T00:00:01Z'

Amazon Simple Storage Service (Amazon S3) でアーカイブされた Amazon CloudWatch Logs を使用して API コールを追跡するには

重要: Amazon S3 バケットにイベントをログ記録するには、最初に CloudWatch 証跡を作成する必要があります。

1.    Finding your CloudTrail log files の手順に従って、CloudTrail ログファイルにアクセスします。

2.    Downloading your CloudTrail log files の手順に従って、ログファイルをダウンロードします。

3.    jq または別の JSON コマンドラインプロセッサを使用して追跡するイベントタイプをログで検索します。

Amazon S3 からダウンロードされた CloudWatch ログで特定のイベントタイプを検索する jq 手順の例

1.    Bash ターミナルを開きます。その後、ログファイルを保存する次のディレクトリを作成します。

$ mkdir cloudtrail-logs

4.    新しいディレクトリに移動します。その後、次のコマンドを実行して CloudTrail ログをダウンロードします。

重要: my_cloudtrail_bucket の例を Amazon S3 バケットに置き換えてください。

$ cd cloudtrail-logs

$ aws s3 cp s3://my_cloudtrail_bucket/AWSLogs/012345678901/CloudTrail/eu-west-1/2019/08/07 ./ --recursive

5.    次の gzip コマンドを実行して、ログファイルを解凍します。

重要: * は、解凍するファイル名に置き換えてください。

$ gzip -d *

6.    検索するイベントタイプの jq クエリを実行します。

RunInstances API コールのために使用可能なすべてのイベント情報を返す jq クエリの例

cat * | jq '.Records[] | select(.eventName=="RunInstances")'

StopInstances および TerminateInstances API コールのために使用可能なすべてのイベント情報を返す jq クエリの例

cat * | jq '.Records[] | select(.eventName=="StopInstances" or .eventName=="TerminateInstances" )'