AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

Amazon Cognito ユーザープールのために TOTP 多要素認証をアクティブ化するにはどうすればよいですか?

所要時間2分
0

アプリのユーザーのために多要素認証 (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-idclient-idusernamepassword などの変数を独自の情報に置き換えてください。また、次を実行して、ユーザープールアプリクライアントの 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": {}
}

コメントはありません