[アップデート] Amazon Cognito で多要素認証(MFA)の方法に E メールを設定できるようになりました
いわさです。
Amazon Cognito ユーザープールには多要素認証(MFA)の機能があります。
デフォルトは無効化されていますが、オプションで有効化が可能です。
Cognito の MFA では認証の方法として、Google Authenticator など認証アプリケーションを使って time-based one-time passwords (TOTP) を発行、あるいは SMS メッセージで MFA コードを発行して使う仕組みだったのですが、アップデートで E メールも選択できるようになっていました。
アップデートアナウンスはまだ出ていませんが、AWS CLI や各種 SDK からは設定できるようになっていまして、また、マネジメントコンソールや公式ドキュメントも確認してみたところ E メールが設定出来るようになっていました。
今回こちらの機能を有効化して認証フローを通してみましたので流れを紹介します。
従来の MFA オプションとして違って少し前提条件があります。
2024.09.14 追記
アップデートアナウンスも出ました。
高度なセキュリティ機能や Amazon SES の構成などの前提条件あり
早速設定してみようとしたのですが、次のように前提条件があることがわかりました。
私が確認出来たのは以下です。
- 高度なセキュリティ機能 をアクティブ化
- Amazon SES を利用して E メールを送信 するようにユーザープールを設定
- E メール以外の方法を少なくとも 1 つ使用してアカウントの復旧 を許可
上記のうち一つでも満たされていないと、次のように E メールオプションの有効化が出来ませんでした。
前提条件を満たしている状態であれば有効化するだけ
上記前提条件さえクリアできていれば先程のチェックボックスで有効化するだけで使えます。
高度なセキュリティタブで機能を有効化します。
よく見てみるとこの画面上にも「E メールメッセージで MFA コードを送信」という項目が追加されていますね。
メッセージングタブで Cognito ユーザープールが使う送信メールサーバーに、デフォルトではなく Amazon SES を使うように設定してやります。
また、ユーザーアカウントの復旧メッセージに E メールだけデフォルトで選択していたのですが、SMS も追加してみました。
上記の状態で再び MFA の E メールメッセージオプションを有効化したところ、変更することが出来ました。
E メールメッセージで MFA コードを受信し使ってみる
使ってみます。
まずはユーザー名とパスワードで認証 API を実行します。
% cat hoge1.json
{
"AuthFlow": "USER_PASSWORD_AUTH",
"AuthParameters": {
"USERNAME": "[email protected]",
"PASSWORD": "hogehoge"
},
"ClientId": "2qi8stbpr21uunm0541jolnlq2"
}
% aws cognito-idp initiate-auth --cli-input-json file://hoge1.json
{
"ChallengeName": "EMAIL_OTP",
"Session": "AYA ... 3p7",
"ChallengeParameters": {
"CODE_DELIVERY_DELIVERY_MEDIUM": "EMAIL",
"CODE_DELIVERY_DESTINATION": "i***@e***",
"USER_ID_FOR_SRP": "a7b48ae8-a091-7084-df46-4fe84daa75ab"
}
}
通常のUSER_PASSWORD_AUTH
であればトークンがすぐに取得出来ますが、チャレンジ「EMAIL_OTP」を要求されましたね。ほう。
その瞬間、次のような E メールを受信しました。
認証コードですね。こいつを使ってEMAIL_OTP
チャレンジを実行しましょう。
RespondToAuthChallenge
API を実行します。
% cat hoge2.json
{
"ClientId": "2qi8stbpr21uunm0541jolnlq2",
"ChallengeName": "EMAIL_OTP",
"Session": "AYA ... 05Z",
"ChallengeResponses": {
"EMAIL_OTP_CODE": "998277",
"USERNAME": "[email protected]"
}
}
% aws cognito-idp respond-to-auth-challenge --cli-input-json file://hoge2.json
{
"ChallengeParameters": {},
"AuthenticationResult": {
"AccessToken": "eyJ ... L6Q",
"ExpiresIn": 3600,
"TokenType": "Bearer",
"RefreshToken": "eyJ ... wsg",
"IdToken": "eyJ ... EsA"
}
}
今度は ID トークンやアクセストークンを取得することが出来ましたね。
無事認証することが出来ました。
さいごに
本日は Amazon Cognito の多要素認証(MFA)の方法に E メールを設定できるようになっていたので使ってみました。
これは要望として聞いたことあるので嬉しい方多そうですね。
最近 Cognito の高度なセキュリティで魅力的な機能がかなり増えてきたので、以前よりも有効化したいという方増えていそうな気がしますね。