AWS開発奮闘記② ~Cognitoのユーザー登録~

前回はAWSの構成と簡易的な各サービスの説明を行ったが、
今回よりLambda(Python)でboto3を使用してのAWSサービスと連携する部分を記載していく。
実際の開発では関数化したり引数のやりとりをしていたのだが、
備忘録ということで、一つの関数にまとめての記載とする。

まずはAmazon Cognitoのユーザー作成部分から始めていこう。
前提としては、先にAmazon Cognitoでユーザープールの作成が必要となる。
どの処理もUserPoolIdとキーとなるUsernameを渡す必要がある。

■AWSコンソールからのユーザー登録画面はこんな感じ

■Pythonでのソースコード

import boto3

cognito_idp = boto3.client('cognito-idp')

user_pool_id = '{ユーザープールID}'
username = '{ユーザー名}'
email = '{メールアドレス}'
phone_number = '{電話番号}'    # 頭に国番号を付ける
password = '{パスワード}'

def lambda_handler(event, context):

    # ユーザ作成
    response = cognito_idp.admin_create_user(
        UserPoolId=user_pool_id,
        Username=username,
        UserAttributes=[
            {
                'Name': 'email',
                'Value': email
            },
            {
                'Name': 'phone_number',
                'Value': phone_number
            },
            {
                'Name': 'email_verified',
                'Value': 'true'
            },
            {
                'Name': 'phone_number_verified',
                'Value': 'true'
            }
        ],
        # 初期パスワードを送信しない
        MessageAction='SUPPRESS'
    )

    # パスワード変更
    response = cognito_idp.admin_set_user_password(
        UserPoolId=user_pool_id,
        Username=username,
        Password=password,
        Permanent=True
    )

    # MFA設定
    response = cognito_idp.admin_set_user_mfa_preference(
        UserPoolId=user_pool_id,
        Username=username,
        SMSMfaSettings={
            'Enabled': True,
            'PreferredMfa': True
        }
    )

 

①ユーザー作成
admin_create_userを使用する。
注意点:
・phone_numberは、頭に国コードを付ける。
例として、09012345678の番号で日本の場合、+819012345678となる。
・通常は作成した時に仮パスワードが通知されるが、MessageAction=’SUPPRESS’で無効にしている。
・email_verified(Eメール確認済み)、phone_number_verified(電話番号確認済み)を
何も指定しないで登録するとfalseになってしまう。
falseの状態だとEメール、電話番号の検証が行われていないと判断され、
パスワードを忘れた際の再設定メールやSMS等、Amazon Cognitoが自動で送ってくれるメールが送られなくなってしまう。
その為、trueに設定しておく必要がある。
・作成時は、ステータスが「Force Change Password」となる為、直後にパスワード変更を行う。

②パスワード変更
admin_set_user_passwordを使用する。
注意点:
・Permanent=Trueによって、設定されたパスワードは永続的なものとなり、
ユーザーは次回ログイン時にパスワードの変更を強制されないようにしている。

③MFA設定(SMS MFAを有効化する場合に使用)
admin_set_user_mfa_preferenceを使用する。
注意点:
・SMSを使用する場合は、SMSMfaSettingsSMSを使用する。
TOTPの場合は、SoftwareTokenMfaSettingsを使用するが、TOTPのやり方は次回の記載とする。

技術情報

前の記事

久しぶりのIBMi①