Cognito Advanced Securityのユーザーイベントを取得する

Cognitoには監査ログや不正と思われるログインを検知する「Advanced Security」が用意されています。(有料) これを監査のみ有効または有効にしていると、ユーザーのログイン履歴がユーザーイベントとして記録 […]

広告ここから
広告ここまで

目次

    Cognitoには監査ログや不正と思われるログインを検知する「Advanced Security」が用意されています。(有料)

    これを監査のみ有効または有効にしていると、ユーザーのログイン履歴がユーザーイベントとして記録されるようになります。そしてこの記録されているイベントをSDKやCLIで取得する方法についてまとめました。

    AWS CLIで取得する場合はcognito-idp admin-list-user-auth-events

    手取り早いのはAWS CLIです。この場合、--user-pool-id--usernameの2オプションが必要です。

    % aws cognito-idp admin-list-user-auth-events --user-pool-id us-west-2_xxxxxx --username dev | jq .
    {
      "AuthEvents": [
        {
          "EventId": "2e52e79d-e1ae-418e-a5ef-3f6d2db9c65f",
          "EventType": "SignIn",
          "CreationDate": 1612165482.505,
          "EventResponse": "Pass",
          "EventRisk": {
            "RiskDecision": "NoRisk"
          },
          "ChallengeResponses": [
            {
              "ChallengeName": "Password",
              "ChallengeResponse": "Success"
            }
          ],
          "EventContextData": {
            "IpAddress": "127.0.0.0",
            "DeviceName": "Chrome 8, Mac OS X",
            "City": "Osaka",
            "Country": "Japan"
          }
        },
        {

    TypeScript / JavaScriptはadminListUserAuthEvents

    IAMのアクション名を1文字目小文字にしただけと思えば割と覚えやすいかもです。

    import { Handler } from 'aws-lambda';
    import { CognitoIdentityServiceProvider } from 'aws-sdk'
    
    export const hello: Handler = async ({username}) => {
      const client = new CognitoIdentityServiceProvider()
      const { AuthEvents: events } = await client.adminListUserAuthEvents({
        UserPoolId: 'us-east-1_xxxx',
        Username: username
      }).promise()
      return events
    }

    これをServerless Frameworkなどで実行すればOKです。

    $ sls invoke local -f hello -d '{"username": "development-user"}'
    
    [
        {
          "EventId": "2e52e79d-e1ae-418e-a5ef-3f6d2db9c65f",
          "EventType": "SignIn",
          "CreationDate": 1612165482.505,
          "EventResponse": "Pass",
          "EventRisk": {
            "RiskDecision": "NoRisk"
          },
          "ChallengeResponses": [
            {
              "Challen

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark