AWSコンソールのCSVを読み込む¶
SuzakuのAWS系コマンド(aws-ct-timeline、aws-ct-metrics、aws-ct-summary、aws-ct-search)は、AWS Management Consoleの CloudTrail → イベント履歴 → イベントのダウンロード → CSV で取得したCSVファイルを、-f/--file と -d/--directory の両方で読み込めます。
./suzaku aws-ct-timeline -f event_history.csv
./suzaku aws-ct-summary -d ./console-downloads/ -o summary.csv
CSVはS3にログを配信する証跡が無い場合の手段としては便利ですが、CloudTrailのレコードそのものではなく、各イベントの要約です。証跡のJSONログ(またはイベント履歴のJSONダウンロード)がある場合は、そちらを使ってください。
行の変換¶
各行はCloudTrailのレコードに組み立て直されるため、ルールやsummary・metricsコマンドはJSON入力と同じフィールド名を使います。
| CSVの列 | CloudTrailのフィールド | 備考 |
|---|---|---|
Event time |
eventTime |
空の行はスキップする |
Event source |
eventSource |
|
Event name |
eventName |
|
AWS region |
awsRegion |
|
Source IP address |
sourceIPAddress |
|
User agent |
userAgent |
|
Error code |
errorCode |
|
User name |
userIdentity.userName |
ロールの場合はセッション名。rootの場合はuserIdentity.type: Rootも補う |
AWS access key |
userIdentity.accessKeyId |
|
Resources |
resources[] |
resourceName → ARN、resourceType → type |
Read-only |
readOnly |
true/false → 真偽値 |
Request ID |
requestID |
|
Event ID |
eventID |
|
Event type |
eventType |
|
Recipient Account Id |
recipientAccountId |
|
Event category |
eventCategory |
空欄のセルはフィールドなしとして扱うため、errorCode|existsを条件とするルールは失敗した呼び出しと成功した呼び出しを正しく区別します。空文字列を入れると、失敗を探すルールはすべての呼び出しにマッチし、(notで)成功を探すルールはどれにもマッチしなくなります。この表に無い列は、列名のまま残します。
対応しているのは英語の列名だけです。コンソールのCloudTrail CSVではないCSVは読み込みません。-fでは理由を表示し、-dではそのファイルをスキップしてスキャン済みに数えず、理由をエラーログに記録します。フィールド数が合わない行(多くは引用符の崩れ)はスキップし、行単位の問題はすべて行番号とともにエラーログに記録します。
制限事項¶
- 必要なリージョンをすべてダウンロードする(
us-east-1を含む)。 コンソールのダウンロードはリージョンごとです。コンソールへのサインインやIAMのイベントはus-east-1に記録されます。 - マッチしないルールがある。 CSVには
userIdentity.arn/type/accountId/principalId、errorMessage、requestParameters、responseElements、additionalEventDataがありません。これらを参照するルール(CloudTrailルール796本のうち約22本。ログイン失敗やMFAなしのログインなど、コンソールログイン系のルールを含む)はマッチしません。 - タイムラインの一部の列が空になる。
UserARN・UserAccountID・UserPrincipalID・ErrorMessageは常に空になり、UserTypeもroot以外は空になります。 aws-ct-summaryはユーザー名で集計する。 ARNが無いため、UserARN列にUser nameを入れて集計し、その件数を注意として表示します。ロールの場合はセッション名なので、同じセッション名を使う別のロールは1つのプリンシパルとして数えられます。ユーザー名が無い行(AWSのサービスがユーザーに代わって行う呼び出しなど)は除外されるため、同じ期間のJSONとは件数が異なることがあります。- Google WorkspaceはCSVに対応していない。 入力オプションはAWS・Azure・Google Workspaceのコマンドで共通のため、
-d/-fのヘルプにはcsvが載っていますが、gws-timelineはCSV入力に対応していません。