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のやり方は次回の記載とする。