AWS CloudTrail Lakeの設定とSQLで確認する

AWSのCloudTrail Lakeの設定/削除とSQLでデータを確認するサンプルです。

目次

サンプル CloudTrail Lakeとは
  CloudTrail Lakeを設定する
CloudTrail LakeのデータをSQLで確認する
CloudTrail LakeのSQLの例
SQLの結果の全件をCSVで取得する
CloudTrail Lakeを削除する

CloudTrail Lakeとは

  • CloudTrail Lakeは、CloudTrailのデータをSQL文で検索できます。
  • CloudTrail Lakeを有効にしてからデータが蓄積されていきます。
  • 料金は、取り込みと分析でかかります。
    https://aws.amazon.com/jp/cloudtrail/pricing/
取り込み 最初の 5 TB: 1 GB あたり 2.5 USD
その後の 20 TB: 1 GB あたり 1 USD
25 TB 以上: 1 GB あたり 0.5 USD
分析 スキャンしたデータ 1 GB あたり 0.005 USD

 

CloudTrail Lakeを設定する

1.検索入力欄で「CloudTrail」と入力し、表示された「CloudTrail」をクリックします。
※画面右上のリージョンを確認します。例:東京 ap-northeast-1

2.画面左の「レイク」をクリックします。

3.「イベントデータストアの作成」をクリックします。

 

4.イベントデータストア名、保存期間を入力します。次へをクリックします。

 

5.必要なイベントタイプにチェックを入れます。

管理イベントは、ログインやEC2インスタンスの作成、削除等を指します。

データイベントは、リソースの操作ログを指します。

データイベントは以下を選択できます。(2023/06時点)

 

6.管理イベントです。必要に応じてチェックを入れます。

 

7.データイベントです。必要に応じて選択します。
次へをクリックし確認画面で問題なければイベントデータストアの作成をクリックすると作成されます。

 

8.作成後は一覧に表示されます。

 

CloudTrail LakeのデータをSQLで確認する

1.画面左の「レイク」をクリックします。

2.「エディター」でSQLを入力できます。
fromのテーブルを指定する箇所は、イベントデータストアIDを指定します。

eventTimeで日時の範囲を指定し、LIMITで出力件数を絞ります。

実行ボタンをクリックするとSQLが実行されます。

 

eventTime >= '2022-07-01 00:00:00' and eventTime < '2022-08-16 00:00:00'
LIMIT 30;

※betweenはうまくいきません。時間の00が0だとうまくいきません。

 

3.SQLの実行結果は、画面下にスクロールすると表示されています。

 

CloudTrail LakeのSQLの例

CloudTrail Lakeは、json形式になっていますが、SQLで指定できます。

取得方法1:イコールで指定、否定は!=
取得方法2:項目をドットつなぎにする
取得方法3:element_atで指定する(requestParametersの項目)
取得方法4:errorCode is not null ,is nullでエラー有り無しの抽出

 

取得方法1:イコールで指定、否定は!=

SELECT * FROM テーブル名 
WHERE eventName = 'PutObject' and sourceIPAddress = '10.0.10.4'
limit 10

値はシングルコーテーションで括ります。
否定は、!=です。
limitは出力件数です。

 

日時のfrom-to指定

SELECT * FROM テーブル名 
eventTime >= '2022-07-01 00:00:00' and eventTime < '2022-08-16 00:00:00'
LIMIT 30;

※betweenはうまくいきません。時間の00が0だとうまくいきません。

 

取得方法2:項目をドットつなぎにする

波括弧で括られている箇所は、JSONのオブジェクトです。

{
    "eventVersion": "1.08",
    "userIdentity": "{type=AWSService, ・・・identityprovider=null}",

 

like文

SELECT * FROM テーブル名 
WHERE userIdentity.type like 'AWSSer%'

ドットでつなぎます。

 

in句 (tlsのバージョンを指定)

SELECT * FROM テーブル名 
WHERE tlsDetails.tlsVersion IN ('TLSv1','TLSv1.1','TLSv1.2')

 

取得方法3:element_atで指定する(requestParametersの項目)

{
     "eventVersion": "1.08",
     "requestParameters": "{tableName=library}",

 

element_atを使用します

SELECT * FROM テーブル名 
WHERE (element_at(requestParameters, 'tableName') like 'lib%')

https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/query-limitations.html#query-supported-functions

※CloudTrail Lakeの画面の「サンプルクエリ」のタブにサンプルのSQLがあります。

 

取得方法4:errorCode is not null ,is nullでエラー有り無しの抽出

SELECT * FROM テーブル名 
WHERE errorCode is null
limit 10

is null またはis not nullを使用できます。

 

SQLの結果の全件をCSVで取得する

1.「結果をS3に保存」にチェックを入れSQLを実行します。

「S3を参照」をクリックすると対象のS3が表示されます。
対象のS3のバケットがない場合は自動で作成されます。

 

2.csv.gzの行にチェックをいれダウンロードをクリックするとCSVでダウンロードされます。
拡張子のgzはダウンロードすると外れます。

 

3.以下のようなCSVがダウンロードされます。

 

CloudTrail Lakeを削除する

1.画面左のレイクをクリックします。

2.イベントデータストアをクリックします。

 

3.削除するイベントデータストアのリンクをクリックします。

 

4.アクションから削除をクリックします。
削除がグレイアウトの場合は、終了保護の変更をクリックして終了保護を無効にします。

関連の記事

AWS CloudTrailでEC2の起動を確認する
AWS CloudTrail のデータをAthenaで確認するサンプル

△上に戻る