アプリのユーザーのために多要素認証 (MFA) をアクティブ化したいと考えています。Amazon Cognito ユーザープールを使用して時間ベースのワンタイムパスワード (TOTP) トークンでこれを行うにはどうすればよいですか?
簡単な説明
アプリユーザーのために TOTP MFA をアクティブ化するには、ユーザープールに TOTP ソフトウェアトークン MFA を設定します。
重要: TOTP トークンを設定する前に、次の点に注意してください。
- TOTP トークンを設定する前に、ユーザープールに MFA を追加する必要があります。
- TOTP トークンは、ユーザーがアプリにログインしようとするまで、または既に認証されていない限り、ユーザーに関連付けることはできません。
- MFA は、ユーザープール内のフェデレーションユーザーをサポートしていません。
AWS コマンドラインインターフェイス (AWS CLI) と Google 認証システムを使用して TOTP MFA を設定する方法の例を次に示します。
解決方法
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生する場合は、最新の AWS CLI バージョンを使用していることを確認してください。
1. AWS CLI から次の AssociateSoftwareToken コマンドを実行して、MFA トークンジェネレーターのセットアップを開始します。
aws cognito-idp associate-software-token --access-token eyJraWQiO........ua5Pq3NaA
{
"SecretCode":
"AETQ6XXMDFYMEPFQQ7FD4HKXXXXAOY3MBXIVRBLRXX3SXLSHHWOA"
}
2. Google 認証システムのホームページを開き、[Get started] (使用を開始) を選択します。
3. [Enter a setup key] を選択します。
4. [Account name] に、アカウント名を入力します。例えば、BobPhone。
注: アカウント名は、任意の文字列識別子にすることができます。
5. [Your key] (キー) テキスト入力の場合、ステップ 1 で実行した AssociateSoftwareToken コマンドから生成されたシークレットコードをコピーして貼り付けます。
6. [Type of key] ドロップダウンリストを選択してから、[Time based] をクリックします。
7. 画面に表示される時間ベースのパスワードと次のコードを使用して、ソフトウェアトークンを確認します。
aws cognito-idp verify-software-token --access-token eyJraWQiO........ua5Pq3NaA --user-code 269194 --friendly-device-name BobPhone
{
"Status": "SUCCESS"
}
8. AWS CLI で次のいずれかのコマンドを使用して、ユーザーの MFA 設定を TOTP MFA に設定します。
set-user-mfa-preference
このコマンドを使用すると、ユーザーは独自の MFA 設定を行えます。
set-user-mfa-preference コマンドの例
aws cognito-idp set-user-mfa-preference --software-token-mfa-settings Enabled=true,PreferredMfa=true --access-token eyJraWQiO........ua5Pq3NaA
admin-set-user-mfa-preference
このコマンドにより、管理者はユーザーの MFA 設定を行うことができます。
admin-set-user-mfa-preference コマンドの例
aws cognito-idp admin-set-user-mfa-preference --software-token-mfa-settings Enabled=true,PreferredMfa=true --username Bob --user-pool-id us-east-1_123456789
9. 次のいずれかの方法でユーザーを認証して、セットアップをテストします。
Amazon Cognito でホストされた UI。
AWS CLI での InitiateAuth または AdminInitiateAuth API コール。
注: いずれかの方法でユーザーを認証するには、ユーザーのパスワード、ユーザー名、およびソフトウェア MFA コードが必要です。
次の例は、AdminInitiateAuth コマンドを使用してユーザー認証をテストする方法を示しています。
admin-initiate-auth コマンドの例
aws cognito-idp admin-initiate-auth --user-pool-id us-east-1_123456789 --client-id 3n4b5urk1ft4fl3mg5e62d9ado --auth-flow ADMIN_USER_PASSWORD_AUTH --auth-parameters USERNAME=Bob,PASSWORD=P@ssw0rd
重要: user-pool-id、client-id、username、password などの変数を独自の情報に置き換えてください。また、次を実行して、ユーザープールアプリクライアントの ALLOW_ADMIN_USER_PASSWORD_AUTH フローをアクティブ化してください。
1. Amazon Cognito コンソールを開きます。
2. [Manage User Pools] (ユーザープールの管理) を選択します。
3. アプリクライアントを選択し、[Show details] (詳細を表示) を選択します。
4. [Enable username password auth for admin APIs for authentication (ALLOW_ADMIN_USER_PASSWORD_AUTH)](認証用の管理 API のユーザー名パスワード認証を有効にする (ALLOW_ADMIN_USER_PASSWORD_AUTH)) を選択します。
5. [Save app client changes] (アプリクライアントの変更を保存) を選択します。
詳細については、「管理認証フロー」を参照してください。
admin-initiate-auth コマンドからの出力例
{
"ChallengeName": "SOFTWARE_TOKEN_MFA",
"ChallengeParameters": {
"FRIENDLY_DEVICE_NAME": "BobPhone",
"USER_ID_FOR_SRP": "Bob"
},
"Session": "Xxz6iadwuWJGN4Z7f4ul5p50IHUqITquoaNxxyDvep.......3A6GokZWKeQ6gkFW4Pgv"
}
admin-respond-to-auth-challenge コマンドの例
aws cognito-idp admin-respond-to-auth-challenge --user-pool-id us-east-1_123456789 --client-id 3n4b5urk1ft4fl3mg5e62d9ado --challenge-name SOFTWARE_TOKEN_MFA --challenge-responses USERNAME=Bob,SOFTWARE_TOKEN_MFA_CODE=123456 --session Xxz6iadwuWJGN4Z7f4ul5p50IHUqITquoaNxxyDvep.......3A6GokZWKeQ6gkFW4Pgv
重要: client-id、ユーザー名、および software_token_MFA_Code という変数を独自の情報に置き換えてください。
admin-respond-to-auth-challenge コマンドからの出力例
{
"AuthenticationResult": {
"ExpiresIn": 3600,
"RefreshToken": "eyJjdHkiOiJKV1QiLCJlbmMi.......dlbjrtyizlLzZZ5fjjCgL__AVHEzYycjJs_h3i-ly_KixDNtz9VEC",
"TokenType": "Bearer",
"NewDeviceMetadata": {
"DeviceKey": "us-east-1_28abrd7-10f7-9fc6-a931-3ede1c8ckd75",
"DeviceGroupKey": "-Gqkj3brS"
},
"IdToken": "eyJraWQiOiIzcFFSV29Pb........mNMbE_vvPkQYBuA9ackoER1aSABFGaKK4BpgPjMn7la_A",
"AccessToken": "eyJraWQiOi...........qwvQq4awt63TyWw"
},
"ChallengeParameters": {}
}