CloudTrail Lake で色々なクエリを試してみた
気になってはいたものの使い方がよく分からずに試していなかった CloudTrail Lake ですが、試してみたところ簡単に使えたのでよく使いそうなクエリを試してみました。
CloudTrail Lake について
すでに技術ブログで紹介されているので AWS 公式ドキュメントと併せてご覧ください。
- [アップデート] CloudTrailログ分析環境が超絶簡単に手に入る!「CloudTrail Lake」がリリースされました
- AWS Organizations環境でCloudTrail Lakeを試してみる
- CloudTrail Lakeで特定のS3バケットのデータイベントのみを収集するイベントデータストアを作成してみた
よく使いそうなクエリ
AWS 公式ドキュメントにもクエリの例が記載されていますが、私もユースケースごとに考えてみました。
{event-data-store-id}
は実際のイベントデータストア ID に置換してください。
また、使用できる SQL の制約についても AWS 公式ドキュメントをご覧ください。
最新の記録を 10 件だけ取得
SELECT * FROM {event-data-store-id}
LIMIT 10;
LIMIT の数を変えることで取得できる件数を変えることができます。
特定のサービスでエラーが発生した記録だけを取得
SELECT * FROM {event-data-store-id}
WHERE errorMessage !=''
AND eventSource ='dynamodb.amazonaws.com';
上記は DynamoDB に関する記録のうち、エラーメッセージが空ではない記録、つまりエラーメッセージがある記録のみを抽出しています。
特定のエラーメッセージだけを取得
SELECT * FROM {event-data-store-id}
WHERE errorCode ='AccessDenied'
上記は、AccessDenied
というエラーメッセージ (エラーコード) のみを抽出しています。
TLS バージョン 1.0 および 1.1 が使用されているリソースを特定する
SELECT resources FROM {event-data-store-id}
WHERE tlsDetails.tlsVersion IN ('TLSv1', 'TLSv1.1');
私の環境では TLS 1.0 および 1.1 を使用しているリソースはなかったので、代わりに以下のように TLS 1.2 を含めるようにクエリを実行してみました。
SELECT resources FROM {event-data-store-id}
WHERE tlsDetails.tlsVersion IN ('TLSv1', 'TLSv1.1', 'TLSv1.2');
AWS ブログでも周知されていますが、AWS では TLS 1.2 がすべての AWS API エンドポイントへの接続に必要な最小バージョンになるため、TLS 1.0 および 1.1 を使用している場合にはアップデートが必要です。
AWS ブログでもサンプルクエリが紹介されています。
SELECT
userIdentity.accountId, recipientAccountId, userIdentity.arn, eventSource, eventName, awsRegion, tlsDetails.tlsVersion, tlsDetails.cipherSuite, userAgent, COUNT(*
) AS numOutdatedTlsCalls
FROM
{event-data-store-id}
WHERE
tlsDetails.tlsVersion IN ('TLSv1', 'TLSv1.1'
)
AND eventTime > '2022-04-19 00:00:00'
AND eventTime < '2022-04-30 00:00:00'
GROUP
BY userIdentity.accountId, recipientAccountId, userIdentity.arn, eventSource, eventName, awsRegion, tlsDetails.tlsVersion, tlsDetails.cipherSuite, userAgent
ORDER
BY eventSource, eventName, tlsVersion;
特定の時間帯に特定のサービスでエラーがあったかどうかを取得
SELECT * FROM {event-data-store-id}
WHERE errorMessage !=''
AND eventSource ='dynamodb.amazonaws.com'
AND eventTime > '2022-10-11 11:30:42.000'
AND eventTime < '2022-10-11 11:35:42.000';
上記は、2022-10-11 11:30:42.000 ~ 2022-10-11 11:35:42.000
までの DynamoDB に関する記録のうち、エラーメッセージがある記録のみを抽出しています。
個人的にはこのクエリがトラブルシューティングでよく使いそうだと思っています。
エラーになった IP アドレスとイベント名を取得
SELECT eventName, sourceIPAddress, errorMessage FROM {event-data-store-id}
WHERE errorMessage !='';
上記は、エラーになった IP アドレスとイベント名に加えて、エラーメッセージも取得しています。
IP 制限によるエラー調査時に役に立つと思います。
まとめ
今回は CloudTrail Lake でよく使いそうなクエリを試してまとめてみました。
SQL は普段使用しないので簡単なクエリばかりですが、参考になれば幸いです。
参考資料
- AWS CloudTrail Lake の使用 - AWS CloudTrail
- [アップデート] CloudTrailログ分析環境が超絶簡単に手に入る!「CloudTrail Lake」がリリースされました | DevelopersIO
- AWS Organizations環境でCloudTrail Lakeを試してみる | DevelopersIO
- CloudTrail Lakeで特定のS3バケットのデータイベントのみを収集するイベントデータストアを作成してみた | DevelopersIO
- クエリの例 - AWS CloudTrail
- CloudTrail Lake SQL の制約 - AWS CloudTrail
- TLS 1.2 がすべての AWS API エンドポイントへの接続に必要な最小バージョンになります | Amazon Web Services ブログ
- Using AWS CloudTrail Lake to identify older TLS connections to AWS service endpoints | AWS Cloud Operations & Migrations Blog
Discussion