Cognito ユーザープールのユーザー削除イベントを EventBridge で検知してみた
DeleteUser - Amazon Cognito User Pools
AdminDeleteUser - Amazon Cognito User Pools
上記 2 イベントを検知して CloudWatch Logs に出力してみました。
EventBridge ルール作成
以下のイベントパターンで作成しました。
{
"source": ["aws.cognito-idp"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventSource": ["cognito-idp.amazonaws.com"],
"eventName": ["DeleteUser", "AdminDeleteUser"]
}
}
ターゲットは CloudWatch Logs ロググループです。
ユーザープール作成
以下の設定で作成しました。
- アプリケーションタイプ: シングルページアプリケーション (SPA)
- サインイン識別子のオプション: メールアドレス
ユーザープール作成後、アプリケーションクライアントの認証フローで ALLOW_ADMIN_USER_PASSWORD_AUTH を有効にしました。
サインアップ
以下の AWS CLI コマンドでサインアップしてユーザーを作成しました。
$ aws cognito-idp sign-up \
--client-id your-client-id \
--username your-mailaddress \
--password your-password \
--user-attributes Name=email,Value=your-mailaddress
DeleteUser
DeleteUser - Amazon Cognito User Pools
DeleteUser API の実行にはアクセストークンが必要なため、以下の AWS CLI コマンドでアクセストークンを取得しました。
$ aws cognito-idp admin-initiate-auth \
--user-pool-id your-userpool-id \
--client-id your-client-id \
--auth-flow "ADMIN_USER_PASSWORD_AUTH" \
--auth-parameters USERNAME=your-mailaddress,PASSWORD=your-password
{
"ChallengeParameters": {},
"AuthenticationResult": {
"AccessToken": "xxx",
"ExpiresIn": 3600,
"TokenType": "Bearer",
"RefreshToken": "xxx",
"IdToken": "xxx"
}
}
上記で取得したアクセストークンを使用して以下のコマンドを実行しました。
$ aws cognito-idp delete-user \
--access-token "your-AccessToken"
AdminDeleteUser
上記サインアップの手順実行後、Cognito コンソール上からユーザーを削除しました。
CloudWatch Logs のログ
CloudWatch Logs に出力されたログは以下の通りです。
DeleteUser
{
"version": "0",
"id": "f48d61f8-207f-7428-dd1e-92638d156eee",
"detail-type": "AWS API Call via CloudTrail",
"source": "aws.cognito-idp",
"account": "012345678901",
"time": "2025-01-22T12:24:06Z",
"region": "ap-northeast-1",
"resources": [],
"detail": {
"eventVersion": "1.10",
"userIdentity": {
"type": "Unknown",
"principalId": "Anonymous"
},
"eventTime": "2025-01-22T12:24:06Z",
"eventSource": "cognito-idp.amazonaws.com",
"eventName": "DeleteUser",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "xxx",
"userAgent": "aws-cli/2.23.2 md/awscrt#0.23.4 ua/2.0 os/linux#6.1.119-129.201.amzn2023.x86_64 md/arch#x86_64 lang/python#3.12.6 md/pyimpl#CPython exec-env/CloudShell cfg/retry-mode#standard md/installer#exe md/distrib#amzn.2023 md/prompt#off md/command#cognito-idp.delete-user",
"requestParameters": {
"accessToken": "HIDDEN_DUE_TO_SECURITY_REASONS"
},
"responseElements": null,
"additionalEventData": {
"sub": "xxx"
},
"requestID": "44d5d4eb-8b0c-44e1-8a43-c3a67b1a0ff8",
"eventID": "b27d7cc1-4cf5-4620-b897-20b80a792423",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "012345678901",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"clientProvidedHostHeader": "cognito-idp.ap-northeast-1.amazonaws.com"
}
}
}
AdminDeleteUser
{
"version": "0",
"id": "552fbb4f-891a-2407-741e-4f48d01d371f",
"detail-type": "AWS API Call via CloudTrail",
"source": "aws.cognito-idp",
"account": "012345678901",
"time": "2025-01-22T12:25:58Z",
"region": "ap-northeast-1",
"resources": [],
"detail": {
"eventVersion": "1.10",
"userIdentity": {
"type": "AssumedRole",
"principalId": "xxx",
"accountId": "012345678901",
"accessKeyId": "xxx",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "xxx",
"arn": "xxx",
"accountId": "012345678901",
"userName": "xxx"
},
"attributes": {
"creationDate": "2025-01-22T11:50:54Z",
"mfaAuthenticated": "true"
}
}
},
"eventTime": "2025-01-22T12:25:58Z",
"eventSource": "cognito-idp.amazonaws.com",
"eventName": "AdminDeleteUser",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "xxx",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
"requestParameters": {
"userPoolId": "xxx",
"username": "HIDDEN_DUE_TO_SECURITY_REASONS"
},
"responseElements": null,
"additionalEventData": {
"sub": "xxx"
},
"requestID": "60af89de-5aeb-470c-a511-3d6f15fab243",
"eventID": "e906e0be-6cd1-43b1-aef1-a219fc9a1451",
"readOnly": false,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "012345678901",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"clientProvidedHostHeader": "cognito-idp.ap-northeast-1.amazonaws.com"
},
"sessionCredentialFromConsole": "true"
}
}
Cognito ID プール側のアイデンティティ削除について
Amazon Cognito logging in AWS CloudTrail - Amazon Cognito
Amazon Cognito logs the following Amazon Cognito Identity events to CloudTrail as data events.
Cognito ID プールのイベントはデータイベントであるため、DeleteIdentities などのイベントを CloudTrail の記録として EventBridge で検知することはできません。
まとめ
今回は Cognito ユーザープールのユーザー削除イベントを EventBridge で検知してみました。
どなたかの参考になれば幸いです。
参考資料
- DeleteUser - Amazon Cognito User Pools
- AdminDeleteUser - Amazon Cognito User Pools
- Amazon Cognito logging in AWS CloudTrail - Amazon Cognito
- DeleteIdentities - Amazon Cognito Federated Identities
- Cognito Coud trail logging | AWS re:Post
- Cognitoユーザが削除されたタイミングでユーザに紐づくDyanamoDBやS3に格納されているデータを削除したい | SEの技術ノート
Discussion