Cognito UserPoolのListUserAPIで停止済のアカウントだけ抽出する

まとめ

AWSのドキュメントだと、

cognito:user_status (コンソールでは [Enabled] となっています)

と書かれていますが、ListUsers APIのFilterで使用するのはstatusの方です。

コード

profile = 'aws-cli-profile'
session = Session(profile_name=profile)
cognito = session.client('cognito-idp')
response = cognito.list_users(
    UserPoolId='us-east-1_XXXXXXX',
    Filter="status='Disabled'"
)
for data in response['Users']:
    print(data['Username'])
    print(data['Enabled'])

実行結果

$ python test.py 
development
False
dev_hideokamoto
False

アクティブなユーザーのみ抽出する

「EnabledがEnabledで、なおかつStatusがCONFIRMEDになってるユーザー」は、アクティベーションも済んでいるのでおそらくアクティブなユーザーと思われます。

ということでそういうユーザーだけ引っ張り出してみましょう。

profile = 'aws-cli-profile'
session = Session(profile_name=profile)
cognito = session.client('cognito-idp')
response = cognito.list_users(
    UserPoolId='us-east-1_XXXXXXX',
    Filter="cognito:user_status='CONFIRMED'"
)
for data in response['Users']:
    if data['Enabled']:
        print(data['Username'])
        print(data['Enabled'])
        print(data['UserStatus'])

実行結果

$ python test.py 
development
True
CONFIRMED
dev_hideokamoto
True
CONFIRMED

Tips:Filterできるのは1属性のみ

ListUserAPIのFilterにはANDやOR検索がありません。
ですので、数を絞り込めそうな方の属性でListUserを実行し、その後もう片方の属性の状態を確認するという方法になります。

今回は「”登録はしたけど、メールでのアクティベーションを実行していない”というユーザーが多い」だろうと判断してstatusの方で検索しました。

Follow me!