CognitoユーザープールからAWS CLIでユーザーを検索してみる

2020.09.01

こんにちは、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でユーザーを検索してみました。

検索にはカスタム属性が使えないなど制限があるので属性設計の際には注意が必要ですね。

参考

移譲