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