TOTP를 Amazon Cognito 사용자 풀에 대한 다중 요소 인증으로 사용하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2020년 12월 8일

내 앱 사용자에 대해 Multi-Factor Authentication(MFA)을 사용하려고 합니다. Amazon Cognito 사용자 풀을 사용하여 시간 기반 일회성 암호(TOTP) 토큰으로 이를 수행하려면 어떻게 해야 하나요?

간략한 설명

앱 사용자에 대해 TOTP MFA를 사용하려면 사용자 풀에 대해 TOTP 소프트웨어 토큰 MFA를 설정합니다.

중요: TOTP 토큰을 구성하기 전에 다음 사항에 유의하세요.

  • TOTP 토큰을 구성하기 전에 사용자 풀에 MFA를 추가해야 합니다.
  • TOTP 토큰은 앱에 로그인을 시도할 때까지 또는 이미 인증되지 않은 경우 사용자와 연결할 수 없습니다.
  • 현재 사용자 풀의 연합된 사용자에 대해 MFA를 구성할 수는 없습니다.

다음은 AWS 명령줄 인터페이스(AWS CLI)와 Google Authenticator를 사용하여 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 Authenticator 홈페이지를 열고 [시작하기(Get started)]를 선택합니다.

3.    [설정 키 입력(Enter a setup key)]을 선택합니다.

4.    [계정 이름(Account name)]에 계정 이름을 입력합니다. 예를 들어, BobPhone이라고 입력합니다.

참고: 계정 이름은 임의의 문자열 식별자일 수 있습니다.

5.    1단계에서 실행 한 AssociateSoftwareToken 명령에서 생성된 비밀 코드를 복사하여 [키(Your key)] 텍스트 입력에 붙여넣습니다.

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, usernamepassword 변수를 사용자 자신의 정보로 바꾸세요. 또한 다음을 수행하여 사용자 풀 앱 클라이언트에 대해 ALLOW_ADMIN_USER_PASSWORD_AUTH 흐름을 사용하도록 설정해야 합니다.

  1. Amazon Cognito 콘솔을 엽니다.
  2. [사용자 풀 관리(Manage User Pools)]를 선택합니다.
  3. 앱 클라이언트를 선택하고 [세부 정보 표시(Show details)]를 선택합니다.
  4. [인증을 위해 관리자 API에 사용자 이름 암호 인증 사용(ALLOW_ADMIN_USER_PASSWORD_AUTH)(Enable username password auth for admin APIs for authentication (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, usernamesoftware_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": {}
}

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?