0
0

AWSコンソールのサインイン履歴をCloudTrailで確認する

Last updated at Posted at 2023-11-18

はじめに

AWSコンソールへのサインイン履歴が,CloudTrailのログ(S3保管)にどのように記録されるのか調べました(2023/11現在)。公式情報はこちらにありますが,どのフィールドに着目すればよいかわかりにくかったり,公式では存在しないシナリオがあったのでまとめてみました。

CloudTrailの設定

CloudTrailで証跡を作成し,S3バケットにログ保管されるようにあらかじめ設定しておきます(この記事では手順省略)。管理イベントは「書込み」にチェックがあればサインイン履歴を取得できます。
image.png

S3バケットへはどのように保管されるのか

 S3バケットには,おおむね5分毎にjson(gzで圧縮済)として保存されます。1ファイルには約5分間のアクティビティが記録されます。公式情報はこちら
image.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"

アカウント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"
正しいアカウント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"
    }
}

正しいアカウント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"
正しいアカウント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"
    }
}
正しいアカウント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"
サインイン成功(①アカウント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"
    }
}
サインイン成功(②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"フィールドが存在しない

サインイン成功(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"
    サインイン成功

※SAMLだった場合の条件はまだ書きかけ

この記事の制約

サインインのシナリオは他にもあり,記事中のパターンは全てを網羅したものではありませんのでご注意ください。公式AWS Management Console サインインイベントでは,rootユーザやフェデレーションユーザの例が示されていました。その他にMFAデバイスの有無もパターンとして存在します。網羅的な記事はこちらの記事が参考になります(記事を書いた後で気づいた:frowning2:)。

参考

(公式)AWS Management Console サインインイベント
(公式)CloudTrail ログファイルの検索
【CloudTrail解説編】AWSマネージメントコンソールのログイン監視

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0