Amazon Cognito ユーザープールの多要素認証として TOTP を有効にするにはどうすればよいですか?

最終更新日: 2020 年 12 月 8 日

アプリのユーザーに対して多要素認証 (MFA) を有効にしたいと考えています。Amazon Cognito ユーザープールを使用して時間ベースのワンタイムパスワード (TOTP) トークンでこれを行うにはどうすればよいですか?

簡単な説明

アプリユーザーに対して TOTP MFA を有効にするには、ユーザープールに TOTP ソフトウェアトークン MFA をセットアップします。

重要: TOTP トークンを設定する前に、次の点に注意してください。

  • TOTP トークンを設定する前に、ユーザープールに MFA を追加する必要があります
  • TOTP トークンは、ユーザーがアプリにログインしようとするまで、または既に認証されていない限り、ユーザーに関連付けることはできません。
  • 現時点では、ユーザープールでフェデレーティッドユーザー用に MFA を設定することはできません。

AWS コマンドラインインターフェイス (AWS CLI) と Google 認証システムを使用して TOTP MFA をセットアップする方法の例を次に示します。

解決方法

注: 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.    キーテキスト入力の場合、手順 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-idユーザー名パスワードなどの変数を独自の情報に置き換えてください。また、次の手順を実行して、ユーザープールアプリクライアントの ALLOW_ADMIN_USER_PASSWORD_AUTH フローを有効にしてください。

  1. Amazon Cognito コンソールを開きます。
  2. [ユーザープールの管理] を選択します。
  3. アプリクライアントを選択し、[詳細を表示] を選択します。
  4. [認証用の管理 API のユーザー名パスワード認証を有効にする (ALLOW_ADMIN_USER_PASSWORD_AUTH)] を選択します。
  5. [アプリクライアントの変更を保存] を選択します。

詳細については、「管理者認証フロー」を参照してください。

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": {}
}

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?