CognitoユーザープールからAWS CLIでユーザーを検索してみる
こんにちは、CX事業本部の若槻です。
今回は、CognitoユーザープールからAWS CLIでユーザーを検索してみました。
やってみる
属性値による検索
ユーザーを属性値により検索する場合はcognito-idp list-users
コマンドでfilter
オプションを使用します。
まず、オプションなしで実行した場合はすべてのユーザーが取得されます。
% aws cognito-idp list-users --user-pool-id ap-northeast-1_AwJpGCDnr
{
"Users": [
{
"Username": "user01",
"Attributes": [
{
"Name": "sub",
"Value": "bca4e2a5-a3c1-4201-904b-4c29e484e326"
},
{
"Name": "email_verified",
"Value": "true"
},
{
"Name": "phone_number_verified",
"Value": "true"
},
{
"Name": "phone_number",
"Value": "+8100000000"
},
{
"Name": "email",
"Value": "user01@example.com"
}
],
"UserCreateDate": "2020-08-31T02:51:29.774000+09:00",
"UserLastModifiedDate": "2020-08-31T02:51:29.774000+09:00",
"Enabled": true,
"UserStatus": "FORCE_CHANGE_PASSWORD"
},
{
"Username": "user02",
"Attributes": [
{
"Name": "sub",
"Value": "3b1e480d-2866-4212-9917-7ad9ca8c551b"
},
{
"Name": "email_verified",
"Value": "True"
},
{
"Name": "phone_number_verified",
"Value": "True"
},
{
"Name": "phone_number",
"Value": "+8111111111"
},
{
"Name": "email",
"Value": "user02@example.com"
},
{
"Name": "custom:attr01",
"Value": "りんご"
}
],
"UserCreateDate": "2020-08-31T03:47:19.336000+09:00",
"UserLastModifiedDate": "2020-08-31T03:47:19.336000+09:00",
"Enabled": true,
"UserStatus": "FORCE_CHANGE_PASSWORD"
},
]
}
filter
オプションには"AttributeName Filter-Type "AttributeValue ""
のように検索クエリを指定します。AttributeName
にはカスタム属性は指定できません。Filter-Type
には完全一致の=
と前方一致の^=
が使用可能です。
sub
属性を完全一致で検索してみます。
% aws cognito-idp list-users --user-pool-id ap-northeast-1_AwJpGCDnr \
--filter 'sub = "bca4e2a5-a3c1-4201-904b-4c29e484e326"'
{
"Users": [
{
"Username": "user01",
"Attributes": [
{
"Name": "sub",
"Value": "bca4e2a5-a3c1-4201-904b-4c29e484e326"
},
{
"Name": "email_verified",
"Value": "true"
},
{
"Name": "phone_number_verified",
"Value": "true"
},
{
"Name": "phone_number",
"Value": "+8100000000"
},
{
"Name": "email",
"Value": "user01@example.com"
}
],
"UserCreateDate": "2020-08-31T02:51:29.774000+09:00",
"UserLastModifiedDate": "2020-08-31T02:51:29.774000+09:00",
"Enabled": true,
"UserStatus": "FORCE_CHANGE_PASSWORD"
}
]
}
email
属性を前方一致で検索してみます。
% aws cognito-idp list-users --user-pool-id ap-northeast-1_AwJpGCDnr \
--filter 'email ^= "user02"'
{
"Users": [
{
"Username": "user02",
"Attributes": [
{
"Name": "sub",
"Value": "3b1e480d-2866-4212-9917-7ad9ca8c551b"
},
{
"Name": "email_verified",
"Value": "True"
},
{
"Name": "phone_number_verified",
"Value": "True"
},
{
"Name": "phone_number",
"Value": "+8111111111"
},
{
"Name": "email",
"Value": "user02@example.com"
},
{
"Name": "custom:attr01",
"Value": "りんご"
}
],
"UserCreateDate": "2020-08-31T03:47:19.336000+09:00",
"UserLastModifiedDate": "2020-08-31T03:47:19.336000+09:00",
"Enabled": true,
"UserStatus": "FORCE_CHANGE_PASSWORD"
}
]
}
filter
オプションに空文字列''
を指定した場合は、すべてのユーザーを取得できました。
% aws cognito-idp list-users --user-pool-id ap-northeast-1_AwJpGCDnr --filter ''
{
"Users": [
{
"Username": "user01",
"Attributes": [
{
"Name": "sub",
"Value": "bca4e2a5-a3c1-4201-904b-4c29e484e326"
},
{
"Name": "email_verified",
"Value": "true"
},
{
"Name": "phone_number_verified",
"Value": "true"
},
{
"Name": "phone_number",
"Value": "+8100000000"
},
{
"Name": "email",
"Value": "user01@example.com"
}
],
"UserCreateDate": "2020-08-31T02:51:29.774000+09:00",
"UserLastModifiedDate": "2020-08-31T02:51:29.774000+09:00",
"Enabled": true,
"UserStatus": "FORCE_CHANGE_PASSWORD"
},
{
"Username": "user02",
"Attributes": [
{
"Name": "sub",
"Value": "3b1e480d-2866-4212-9917-7ad9ca8c551b"
},
{
"Name": "email_verified",
"Value": "True"
},
{
"Name": "phone_number_verified",
"Value": "True"
},
{
"Name": "phone_number",
"Value": "+8111111111"
},
{
"Name": "email",
"Value": "user02@example.com"
},
{
"Name": "custom:attr01",
"Value": "りんご"
}
],
"UserCreateDate": "2020-08-31T03:47:19.336000+09:00",
"UserLastModifiedDate": "2020-08-31T03:47:19.336000+09:00",
"Enabled": true,
"UserStatus": "FORCE_CHANGE_PASSWORD"
},
]
}
所属グループによる検索
ユーザーを所属グループにより検索する場合はcognito-idp list-users-in-group
コマンドを使用します。
まず準備としてグループgroup101
を作成してユーザーuser01
を追加します。
% aws cognito-idp create-group --group-name group101 --user-pool-id ap-northeast-1_AwJpGCDnr
{
"Group": {
"GroupName": "group101",
"UserPoolId": "ap-northeast-1_AwJpGCDnr",
"LastModifiedDate": "2020-08-31T23:51:46.111000+09:00",
"CreationDate": "2020-08-31T23:51:46.111000+09:00"
}
}
% aws cognito-idp admin-add-user-to-group --user-pool-id ap-northeast-1_AwJpGCDnr \
--username user01 \
--group-name group101
group101
に所属するユーザーを取得してみます。
% aws cognito-idp list-users-in-group --user-pool-id ap-northeast-1_AwJpGCDnr \
--group-name group101
{
"Users": [
{
"Username": "user01",
"Attributes": [
{
"Name": "sub",
"Value": "bca4e2a5-a3c1-4201-904b-4c29e484e326"
},
{
"Name": "email_verified",
"Value": "true"
},
{
"Name": "phone_number_verified",
"Value": "true"
},
{
"Name": "phone_number",
"Value": "+8100000000"
},
{
"Name": "email",
"Value": "user01@example.com"
}
],
"UserCreateDate": "2020-08-31T02:51:29.774000+09:00",
"UserLastModifiedDate": "2020-08-31T02:51:29.774000+09:00",
"Enabled": true,
"UserStatus": "FORCE_CHANGE_PASSWORD"
}
]
}
おわりに
CognitoユーザープールからAWS CLIでユーザーを検索してみました。
検索にはカスタム属性が使えないなど制限があるので属性設計の際には注意が必要ですね。
参考
- list-users | aws . cognito-idp
- list-users-in-group | aws . cognito-idp
- create-group | aws . cognito-idp
- admin-add-user-to-group | aws . cognito-idp
移譲