CloudTrail ログで、EC2 インスタンスを実行、停止、開始、および終了するための API コールを検索するにはどうすればよいですか?

最終更新日: 2019 年 9 月 3 日

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを実行、停止、開始、終了するための API コールを追跡したいと考えています。

簡単な説明

AWS CloudTrail を使用すると、アカウントに対して行われた API コールを表示および追跡できます。追跡できるセキュリティとコンプライアンスに関する API コールは以下の通りです。

解決方法

CloudTrail イベント履歴、Amazon Athena クエリを使用するか、Amazon Simple Storage Service S3 バケットから CloudTrail ログをダウンロードします。

CloudTrail イベント履歴

1.    CloudTrail コンソールを開き、[イベント履歴] を選択します。

2.    [フィルター] のドロップダウンメニューで [イベント名] を選択します。

3.    [イベント名の入力] テキストボックスに、検索するイベント名 (RunInstances、StopInstances、StartInstances、または TerminateInstances) を入力し、イベント名を選択します。

4.    [時間範囲] で、目的の時間範囲を入力し、[適用] を選択します。

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

詳細については、「CloudTrail イベント履歴でのイベントの表示」を参照してください。

Athena クエリ

1.    「AWS CloudTrail ログのクエリ」の手順に従います。

2.    Athena コンソールを開き、[クエリエディタ]を選択します。

3.   RunInstances API コールで利用可能なすべてのイベント情報を返す次のサンプルクエリを入力し、[クエリの実行] を選択します。

注意: "cloudtrail-logs" を、ステップ 1 で作成した Athena テーブル名に置き換えます。

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

4.    RunInstances API コールのフィルタリングされたイベント情報を返す次のサンプルクエリを入力し、[クエリの実行] を選択します。

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

5.    文字列インスタンスで終わる API のイベント情報を 2019 年 4 月 1 日から現在の日付まで返す次のサンプルクエリを入力し、[クエリの実行] を選択します。

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

Amazon S3 から CloudTrail ログをダウンロードする

jq またはお好きな JSON コマンドラインプロセッサを使用して、ログを解析します。

注意: S3 バケットに証跡を記録できるようにする必要があります。

1.    「CloudTrail ログファイルの検索」の手順に従います。

2.    「CloudTrail ログファイルのダウンロード」の手順に従います。

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

$ mkdir cloudtrail-logs

4.    この新しいディレクトリに移動し、CloudTrail ログをダウンロードします。

$ cd cloudtrail-logs

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

5.    ログファイルを解凍します。

$ gzip -d *

次のサンプルクエリは、API RunInstances の各イベントを完全に返します。

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

次のサンプルクエリは、API の StopInstances および TerminateInstances の各イベントを完全に返します。

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