CloudTrailで記録されるAWSコンソールのサインインログの見方

# はじめに
 AWSコンソールへのサインイン履歴（ログイン履歴）が，CloudTrailのログ（S3保管)にどのように記録されるのか調べました(2023/11現在）。公式情報は[こちら](https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-event-reference-aws-console-sign-in-events.html)にありますが，どのフィールドに着目すればよいかわかりにくかったり，公式では存在しないシナリオがあったのでまとめてみました。

 なお，サインイン履歴を検索するには，Athenaが便利です。別記事をご確認ください。
 
 https://qiita.com/gaichi/items/9cdaa51e8cda39b8056c

# CloudTrailの設定
 CloudTrailで証跡を作成し，S3バケットにログ保管されるようにあらかじめ設定しておきます（この記事では手順省略）。管理イベントは「書込み」にチェックがあればサインイン履歴を取得できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/5db882d0-6d47-0e02-ff97-a2d149f1693f.png)

# S3バケットへはどのように保管されるのか
　S3バケットには，おおむね5分毎にjson（gzで圧縮済）として保存されます。1ファイルには約5分間のアクティビティが記録されます。公式情報は[こちら](https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457890/fe7a0283-86c5-2e53-7262-3b15d73864de.png)
　AWSコンソールのサインインのログは`"eventType": "AwsConsoleSignIn"`として記録されています。
# サインイン時に記録されたログ
サインインの失敗・成功ケースには複数のシナリオがあります。シナリオ毎のログを紹介します。なお，サインインに使ったアカウントID（IAMユーザ）はMFA設定有りのアカウントです。今回の調査ではMFA設定無のケースは調べていません，あしからず。

## シナリオ1.アカウントID(IAMユーザ)が存在しない
特徴は，以下の箇所です。
`"eventType": "AwsConsoleSignIn"`
`"userName": "HIDDEN_DUE_TO_SECURITY_REASONS"`
`"errorMessage": "No username found in supplied account"`
`"ConsoleLogin": "Failure"`

```JSON:アカウントIDが存在しない場合
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "accountId": "20**********",
        "accessKeyId": "",
        "userName": "HIDDEN_DUE_TO_SECURITY_REASONS"
    },
    "eventTime": "2023-11-18T01:58:58Z",
    "eventSource": "signin.amazonaws.com",
    "eventName": "ConsoleLogin",
    "awsRegion": "ap-southeast-2",
    "sourceIPAddress": "154.***.***.***",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) 略",
    "errorMessage": "No username found in supplied account",
    "requestParameters": null,
    "responseElements": {
        "ConsoleLogin": "Failure"
    },
    "additionalEventData": {
        "LoginTo": "https://console.aws.amazon.com/console/home?hashArgs=略",
        "MobileVersion": "No",
        "MFAUsed": "No"
    },
    "eventID": "83dd827c-db15-487e-97bc-********************",
    "readOnly": false,
    "eventType": "AwsConsoleSignIn",
    "managementEvent": true,
    "recipientAccountId": "20**********",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.3",
        "cipherSuite": "TLS_AES_128_GCM_SHA256",
        "clientProvidedHostHeader": "ap-southeast-2.signin.aws.amazon.com"
    }
}
```


## シナリオ2.正しいアカウントID(IAMユーザ)と，誤ったパスワード
パスワード誤りであっても，MFAの確認画面には遷移します。そのため，ログエントリは2件（①アカウントID入力，②MFA入力）記録されます。
特徴は，以下の箇所です。
- ①アカウントID入力（シナリオ3，シナリオ4と同じ）
`"eventType": "AwsConsoleSignIn"`
`"principalId": "*********************"`のフィールドが存在（シナリオ1には存在しない）
`"CheckMfa": "Success"`
- ②MFA入力（シナリオ3と同じ）
`"eventType": "AwsConsoleSignIn"`
`"principalId": "*********************"`のフィールドが存在（シナリオ1には存在しない）
`"errorMessage": "Failed authentication"`
`"ConsoleLogin": "Failure"`
`"MFAUsed": "Yes"`

```JSON:正しいアカウントID(IAMユーザ)と，誤ったパスワード（①アカウントID入力画面のログ）
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AIDA******************",
        "accountId": "20**********",
        "accessKeyId": "",
        "userName": "myaccount@example.com"
    },
    "eventTime": "2023-11-18T02:18:26Z",
    "eventSource": "signin.amazonaws.com",
    "eventName": "CheckMfa",
    "awsRegion": "ap-southeast-2",
    "sourceIPAddress": "154.***.***.***",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) 略",
    "requestParameters": null,
    "responseElements": {
        "CheckMfa": "Success"
    },
    "additionalEventData": {
        "MfaType": "Virtual MFA"
    },
    "eventID": "f175e3e0-4138-4f21-9feb-*****************",
    "readOnly": false,
    "eventType": "AwsConsoleSignIn",
    "managementEvent": true,
    "recipientAccountId": "20**********",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.3",
        "cipherSuite": "TLS_AES_128_GCM_SHA256",
        "clientProvidedHostHeader": "ap-southeast-2.signin.aws.amazon.com"
    }
}

```

```JSON:正しいアカウントID(IAMユーザ)と，誤ったパスワードの場合（②MFA入力画面のログ）
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AIDA******************",
        "accountId": "20**********",
        "accessKeyId": "",
        "userName": "myaccount@example.com"
    },
    "eventTime": "2023-11-18T02:18:33Z",
    "eventSource": "signin.amazonaws.com",
    "eventName": "ConsoleLogin",
    "awsRegion": "ap-southeast-2",
    "sourceIPAddress": "154.***.***.***",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) 略",
    "errorMessage": "Failed authentication",
    "requestParameters": null,
    "responseElements": {
        "ConsoleLogin": "Failure"
    },
    "additionalEventData": {
        "LoginTo": "https://console.aws.amazon.com/console/home?hashArgs=略",
        "MobileVersion": "No",
        "MFAUsed": "Yes"
    },
    "eventID": "5c7fccb4-3171-4337-a50b-*************",
    "readOnly": false,
    "eventType": "AwsConsoleSignIn",
    "managementEvent": true,
    "recipientAccountId": "20**********",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.3",
        "cipherSuite": "TLS_AES_128_GCM_SHA256",
        "clientProvidedHostHeader": "ap-southeast-2.signin.aws.amazon.com"
    }
}
```


## シナリオ3.正しいアカウントID(IAMユーザ)とパスワード，誤ったMFA
ログエントリは2件（①アカウントID入力，②MFA入力）記録されます。
特徴は，以下の箇所です。シナリオ2と同じなので，シナリオ2とシナリオ3の判別はログからはできなさそうです。
- ①アカウントID入力（シナリオ2，シナリオ4と同じ）
`"eventType": "AwsConsoleSignIn"`
`"principalId": "*********************"`のフィールドが存在（シナリオ1には存在しない）
`"CheckMfa": "Success"`
- ②MFA入力（シナリオ2と同じ）
`"eventType": "AwsConsoleSignIn"`
`"principalId": "*********************"`のフィールドが存在（シナリオ1には存在しない）
`"errorMessage": "Failed authentication"`
`"ConsoleLogin": "Failure"`
`"MFAUsed": "Yes"`

```JSON:正しいアカウントID(IAMユーザ)とパスワード，誤ったMFA（①アカウントID入力画面のログ）
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AIDA******************",
        "accountId": "20************",
        "accessKeyId": "",
        "userName": "myaccount@example.com"
    },
    "eventTime": "2023-11-18T06:06:02Z",
    "eventSource": "signin.amazonaws.com",
    "eventName": "CheckMfa",
    "awsRegion": "ap-southeast-2",
    "sourceIPAddress": "154.***.***.***",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) 略",
    "requestParameters": null,
    "responseElements": {
        "CheckMfa": "Success"
    },
    "additionalEventData": {
        "MfaType": "Virtual MFA"
    },
    "eventID": "a7f006e8-3d39-4bca-aaa2-***********",
    "readOnly": false,
    "eventType": "AwsConsoleSignIn",
    "managementEvent": true,
    "recipientAccountId": "20************",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.3",
        "cipherSuite": "TLS_AES_128_GCM_SHA256",
        "clientProvidedHostHeader": "ap-southeast-2.signin.aws.amazon.com"
    }
}
```

```JSON:正しいアカウントID(IAMユーザ)とパスワード，誤ったMFA（②MFA入力画面のログ）
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AI*******************",
        "accountId": "20************",
        "accessKeyId": "",
        "userName": "myaccount@example.com"
    },
    "eventTime": "2023-11-18T06:06:08Z",
    "eventSource": "signin.amazonaws.com",
    "eventName": "ConsoleLogin",
    "awsRegion": "ap-southeast-2",
    "sourceIPAddress": "154.***.***.***",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) 略",
    "errorMessage": "Failed authentication",
    "requestParameters": null,
    "responseElements": {
        "ConsoleLogin": "Failure"
    },
    "additionalEventData": {
        "LoginTo": "https://console.aws.amazon.com/console/home?hashArgs=略",
        "MobileVersion": "No",
        "MFAUsed": "Yes"
    },
    "eventID": "88c55aa1-3e60-48bc-8704-6324ef3d0e5b",
    "readOnly": false,
    "eventType": "AwsConsoleSignIn",
    "managementEvent": true,
    "recipientAccountId": "20************",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.3",
        "cipherSuite": "TLS_AES_128_GCM_SHA256",
        "clientProvidedHostHeader": "ap-southeast-2.signin.aws.amazon.com"
    }
}
```

## シナリオ4.サインイン成功（正しいアカウントID(IAMユーザ)とパスワードとMFA）
ログエントリは2件（①アカウントID入力，②MFA入力）記録されます。
特徴は，以下の箇所です。
- ①アカウントID入力（シナリオ2，シナリオ4と同じ）
`"eventType": "AwsConsoleSignIn"`
`"principalId": "*********************"`のフィールドが存在（シナリオ1には存在しない）
`"CheckMfa": "Success"`
- ②MFA入力
`"eventType": "AwsConsoleSignIn"`
`"principalId": "*********************"`のフィールドが存在（シナリオ1には存在しない）
`"errorMessage": "*****"`のフィールドが存在しない
`"ConsoleLogin": "Success"`
`"MFAUsed": "Yes"`


```JSON:サインイン成功（①アカウントID入力画面のログ）
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AIDA******************",
        "accountId": "20**********",
        "accessKeyId": "",
        "userName": "myaccount@example.com"
    },
    "eventTime": "2023-11-18T03:04:38Z",
    "eventSource": "signin.amazonaws.com",
    "eventName": "CheckMfa",
    "awsRegion": "ap-southeast-2",
    "sourceIPAddress": "154.***.***.***",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) 略",
    "requestParameters": null,
    "responseElements": {
        "CheckMfa": "Success"
    },
    "additionalEventData": {
        "MfaType": "Virtual MFA"
    },
    "eventID": "4d9163e7-d1b4-48aa-ae65-***********",
    "readOnly": false,
    "eventType": "AwsConsoleSignIn",
    "managementEvent": true,
    "recipientAccountId": "20**********",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.3",
        "cipherSuite": "TLS_AES_128_GCM_SHA256",
        "clientProvidedHostHeader": "ap-southeast-2.signin.aws.amazon.com"
    }
}
```

```JSON:サインイン成功（②MFA入力画面のログ）
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AIDA******************",
        "arn": "arn:aws:iam::20**********:user/myaccount@example.com",
        "accountId": "20**********",
        "userName": "myaccount@example.com"
    },
    "eventTime": "2023-11-18T03:04:57Z",
    "eventSource": "signin.amazonaws.com",
    "eventName": "ConsoleLogin",
    "awsRegion": "ap-southeast-2",
    "sourceIPAddress": "154.***.***.***",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) 略",
    "requestParameters": null,
    "responseElements": {
        "ConsoleLogin": "Success"
    },
    "additionalEventData": {
        "LoginTo": "https://console.aws.amazon.com/console/home?hashArgs=略",
        "MobileVersion": "No",
        "MFAIdentifier": "arn:aws:iam::20**********:mfa/デバイス名",
        "MFAUsed": "Yes"
    },
    "eventID": "99376de8-0ce9-4b04-97b3-**********",
    "readOnly": false,
    "eventType": "AwsConsoleSignIn",
    "managementEvent": true,
    "recipientAccountId": "20**********",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.3",
        "cipherSuite": "TLS_AES_128_GCM_SHA256",
        "clientProvidedHostHeader": "ap-southeast-2.signin.aws.amazon.com"
    }
}
```

## シナリオ5.サインイン成功（IDプロバイダによるSAML認証成功，認可あり）
ログエントリは1件記録されます。
特徴は，以下の箇所です。
`"eventType": "AwsConsoleSignIn"`
`"type": "AssumedRole"`
`"principalId": "*********************"`にIdP側ユーザ名(keycloak-user)が記録される
`"arn": "arn:aws:sts::20**********:assumed-role/TestSamlKeycloak/keycloak-user"`に，ロール名とIdP側ユーザ名が記録される
` "ConsoleLogin": "Success"`が記録される。
`"SamlProviderArn": "arn:aws:iam::20**********:saml-provider/keycloak"`に，IDプロバイダのARN（IAM設定画面で確認できる値と同一）が記録される
"userName"フィールドが存在しない
```JSON:サインイン成功（SAML）
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA************:keycloak-user",
        "arn": "arn:aws:sts::20**********:assumed-role/TestSamlKeycloak/keycloak-user",
        "accountId": "20**********"
    },
    "eventTime": "2023-11-18T14:41:54Z",
    "eventSource": "signin.amazonaws.com",
    "eventName": "ConsoleLogin",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "154.***.***.***",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)略",
    "requestParameters": null,
    "responseElements": {
        "ConsoleLogin": "Success"
    },
    "additionalEventData": {
        "LoginTo": "https://console.aws.amazon.com/console/home",
        "MobileVersion": "No",
        "MFAUsed": "No",
        "SamlProviderArn": "arn:aws:iam::20**********:saml-provider/keycloak"
    },
    "eventID": "9809a0c7-bbd2-4840-bb8e-************",
    "readOnly": false,
    "eventType": "AwsConsoleSignIn",
    "managementEvent": true,
    "recipientAccountId": "20**********",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.3",
        "cipherSuite": "TLS_AES_128_GCM_SHA256",
        "clientProvidedHostHeader": "signin.aws.amazon.com"
    }
}
```

## シナリオ6.サインイン失敗（IDプロバイダによるSAML認証成功，認可なし）
ログエントリは記録されませんでした。

# サインイン履歴の抽出ロジック
　以上の結果から,CloudTrailのログから以下のようなロジックでサインイン履歴が検出できそうです。
- サインインイベントの抽出
`"eventType": "AwsConsoleSignIn"`が存在すればサインインイベント。
- "principalId"フィールド無 & `"ConsoleLogin": "Failure"`有
存在しないアカウントIDによるサインイン試行失敗。
- "principalId"フィールド有 & "ConsoleLogin"フィールド無
存在するIDによるサインイン試行
- "principalId"フィールド有 & `"ConsoleLogin": "Failure"`有
存在するIDによるサインイン試行に失敗（パスワード誤りまたはMFA誤り）
- "principalId"フィールド有 & `"ConsoleLogin": "Success"`有
サインイン成功


# この記事の制約
サインインのシナリオは他にもあり，記事中のパターンは全てを網羅したものではありませんのでご注意ください。公式[AWS Management Console サインインイベント](https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-event-reference-aws-console-sign-in-events.html#cloudtrail-aws-console-sign-in-events-iam-user-failure)では，rootユーザやフェデレーションユーザの例が示されていました。その他にMFAデバイスの有無もパターンとして存在します。網羅的な記事は[こちら](https://qiita.com/hssh2_bin/items/b71da0455cf21e4c823d)の記事が参考になります（記事を書いた後で気づいた:frowning2:）。

# 参考
（公式）[AWS Management Console サインインイベント](https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-event-reference-aws-console-sign-in-events.html#cloudtrail-aws-console-sign-in-events-iam-user-failure)
（公式）[CloudTrail ログファイルの検索](https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html)

https://qiita.com/hssh2_bin/items/b71da0455cf21e4c823d

https://qiita.com/gaichi/items/9cdaa51e8cda39b8056c