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



