困っていた内容
Amazon Cognito の OAuth2_Authorize_GET イベントについて CloudTrail のイベント履歴を調べたら、"sub" の項目が記録されているものとされていないものについて確認しました。
OAuth2_Authorize_GET イベントで CloudTrail に "sub" が記録されるための設定方法などあれば教えてください。
どう対応すればいいの?
"sub" については、Cognito ユーザープール内での一意のユーザー識別子であることや、認証されたユーザーに対して渡される JSON Web Token(JWT)である ID トークン などに含まれるクレーム情報となります。
- ユーザープール属性 - Amazon Cognito
sub
sub 属性に基づいてユーザーをインデックス化して検索します。sub 属性は、各ユーザープール内で一意のユーザー識別子です。
- ID トークンの使用 - Amazon Cognito
sub
認証されたユーザーの固有識別子 (UID) または件名。ユーザー名はユーザープール内で一意ではない可能性があります。sub クレームは、特定のユーザーを識別する最良の方法です。
上記内容より、OAuth2_Authorize_GET イベントについて、当該 Cognito ユーザープールにおいて既に登録されているユーザーが認証に成功した場合であるか、そうではなく、これから登録しようとしている(新規)ユーザーの場合であるかにより、CloudTrail への "sub" の項目の記録有無は異なります。
また、OAuth2_Authorize_GET イベントで CloudTrail に "sub" が記録されるかどうかは、Amazon Cognito のホストされた UI における、「サインアップ」、「サインイン」操作により確認することができます。
Amazon Cognito のホストされた UI における、「サインアップ」、「サインイン」の操作を行った際に OAuth2_Authorize_GET イベントについて、どのように CloudTrail に記録されているかを調べてみたので参考情報として、下記をご参照いただければ幸いです。
サインアップした時の CloudTrail の記録例
{
"eventVersion": "1.08",
"userIdentity": {
"accountId": "012345678901"
},
"eventTime": "2023-0x-xxTxx:xx:xxZ",
"eventSource": "cognito-idp.amazonaws.com",
"eventName": "OAuth2_Authorize_GET",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "xxx:xxx:xxx:xxx",
"userAgent": "xxx",
"requestParameters": null,
"responseElements": null,
"additionalEventData": {
"responseParameters": {
"status": 302
},
"requestParameters": {
"scope": [
"HIDDEN_DUE_TO_SECURITY_REASONS"
],
"response_type": [
"code"
],
"redirect_uri": [
"https://localhost/"
],
"client_id": [
"xxx"
]
},
"userPoolDomain": "xxx.auth.ap-northeast-1.amazoncognito.com",
"userPoolId": "ap-northeast-1_xxx"
},
"requestID": "de2239bc-625d-45d7-8d9b-43f181043c07",
"eventID": "fd0bdc47-dd3f-4e0c-bc7d-0e85429f3964",
"readOnly": true,
"eventType": "AwsServiceEvent",
"managementEvent": true,
"recipientAccountId": "012345678901",
"serviceEventDetails": {
"serviceAccountId": "123456789012"
},
"eventCategory": "Management"
}
サインアップ後にサインインした時の CloudTrail の記録例
{
"eventVersion": "1.08",
"userIdentity": {
"accountId": "012345678901"
},
"eventTime": "2023-0x-xxTxx:xx:xxZ",
"eventSource": "cognito-idp.amazonaws.com",
"eventName": "OAuth2_Authorize_GET",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "xxx:xxx:xxx:xxx",
"userAgent": "xxx",
"requestParameters": null,
"responseElements": null,
"additionalEventData": {
"sub": "a123xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"responseParameters": {
"status": 302
},
"requestParameters": {
"scope": [
"HIDDEN_DUE_TO_SECURITY_REASONS"
],
"response_type": [
"code"
],
"redirect_uri": [
"https://localhost/"
],
"client_id": [
"xxx"
]
},
"userPoolDomain": "xxx.auth.ap-northeast-1.amazoncognito.com",
"userPoolId": "ap-northeast-1_xxx"
},
"requestID": "d0715b9e-b109-473d-8b17-8b37a694e8c4",
"eventID": "1653faca-0de1-426d-bbf5-f60b1b165fee",
"readOnly": true,
"eventType": "AwsServiceEvent",
"managementEvent": true,
"recipientAccountId": "012345678901",
"serviceEventDetails": {
"serviceAccountId": "123456789012"
},
"eventCategory": "Management"
}
参考資料
- CloudTrail 内の Amazon Cognito 情報 - Amazon Cognito
OAuth2_Authorize_GET
ユーザーは 認可エンドポイント を表示します。
- ユーザープール属性 - Amazon Cognito
sub
sub 属性に基づいてユーザーをインデックス化して検索します。sub 属性は、各ユーザープール内で一意のユーザー識別子です。
- ID トークンの使用 - Amazon Cognito
sub
認証されたユーザーの固有識別子 (UID) または件名。ユーザー名はユーザープール内で一意ではない可能性があります。sub クレームは、特定のユーザーを識別する最良の方法です。