はじめに
AWSコンソールへのサインイン履歴(ログイン履歴)が,CloudTrailのログ(S3保管)にどのように記録されるのか調べました(2023/11現在)。公式情報はこちらにありますが,どのフィールドに着目すればよいかわかりにくかったり,公式では存在しないシナリオがあったのでまとめてみました。
なお,サインイン履歴を検索するには,Athenaが便利です。別記事をご確認ください。
CloudTrailの設定
CloudTrailで証跡を作成し,S3バケットにログ保管されるようにあらかじめ設定しておきます(この記事では手順省略)。管理イベントは「書込み」にチェックがあればサインイン履歴を取得できます。
S3バケットへはどのように保管されるのか
S3バケットには,おおむね5分毎にjson(gzで圧縮済)として保存されます。1ファイルには約5分間のアクティビティが記録されます。公式情報はこちら
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"
{
"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"
{
"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"
}
}
{
"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"
{
"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"
}
}
{
"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"
{
"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"
}
}
{
"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"フィールドが存在しない
{
"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 サインインイベントでは,rootユーザやフェデレーションユーザの例が示されていました。その他にMFAデバイスの有無もパターンとして存在します。網羅的な記事はこちらの記事が参考になります(記事を書いた後で気づいた)。
参考
(公式)AWS Management Console サインインイベント
(公式)CloudTrail ログファイルの検索