

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 사용자 풀의 사용자 관리
<a name="managing-users"></a>

사용자 풀을 생성한 후 사용자 계정을 생성, 확인 및 관리할 수 있습니다. Amazon Cognito 사용자 풀 그룹을 사용하면 IAM 역할을 그룹에 매핑하여 사용자와 리소스에 대한 액세스를 관리할 수 있습니다.

Amazon Cognito 사용자 풀의 사용자 관리에는 다양한 구성 옵션과 관리 작업이 포함됩니다. 사용자 풀은 수백만 명의 사용자로 확장할 수 있습니다. 이 정도 규모의 사용자 디렉터리에는 똑같이 확장 가능하고 반복 가능한 관리 도구가 필요합니다. 많은 사용자 프로필을 생성하거나, 비활성 사용자를 관리하거나, 거버넌스 및 규정 준수 보고서를 생성하거나, 사용자가 대부분의 작업을 수행하는 셀프 서비스 도구를 설정할 수 있습니다. 사용자 풀을 생성한 후 이메일 또는 전화번호 확인 요구 등 사용자가 계정을 등록하고 확인하는 방법을 제어할 수 있습니다. 관리자는 사용자 계정을 직접 생성하고 환영 메시지 및 암호 요구 사항을 사용자 지정할 수도 있습니다.

사용자 풀에는 사용자의 그룹 멤버십을 기반으로 리소스에 대한 액세스를 관리할 수 있는 사용자 그룹이 있습니다. 이러한 그룹에 IAM 역할을 할당하여 ID 풀을 통해 AWS 서비스에 대한 액세스를 관리할 수 있습니다. 사용자의 그룹 멤버십은 ID와 액세스 토큰 모두에 있습니다. 이 정보를 사용하면 애플리케이션에서 런타임 시 또는 Amazon Verified Permissions와 같은 정책 엔진을 사용하여 액세스 제어 결정을 내릴 수 있습니다.

사용자 풀에는 많은 사용자가 있는 경우가 많습니다. 사용자 계정을 검색하고 업데이트하는 경우가 많습니다. Amazon Cognito 콘솔 및 API는 사용자 이름, 이메일 및 전화번호와 같은 표준 속성을 기반으로 사용자 쿼리를 지원합니다. 관리자는 암호를 재설정하고, 계정을 비활성화하고, 사용자 이벤트 기록을 볼 수도 있습니다.

기존 사용자 데이터를 마이그레이션하기 위해 Amazon Cognito에는 CSV 파일에서 사용자를 가져오고 [Lambda 트리거](user-pool-lambda-migrate-user.md)를 사용하여 처음 로그인할 때 사용자를 자동으로 마이그레이션할 수 있는 옵션이 있습니다. 이러한 옵션은 다른 사용자 디렉터리에서 사용자 풀로 사용자 전환을 지원합니다.

사용자 풀의 사용자 관리 기능을 사용하여 사용자 수명 주기 및 인증 환경을 세밀하게 제어할 수 있습니다. 셀프 서비스 가입, 관리자가 만든 계정, 그룹 및 마이그레이션 도구의 조합으로 Amazon Cognito 사용자 풀은 유연한 사용자 디렉터리로 만들어집니다.

**Topics**
+ [사용자 생성을 위한 정책 구성](user-pool-settings-admin-create-user-policy.md)
+ [사용자 계정 가입 및 확인](signing-up-users-in-your-app.md)
+ [관리자로 사용자 계정 생성](how-to-create-user-accounts.md)
+ [사용자 풀에 그룹 추가](cognito-user-pools-user-groups.md)
+ [사용자 계정 관리 및 검색](how-to-manage-user-accounts.md)
+ [암호, 계정 복구 및 암호 정책](managing-users-passwords.md)
+ [사용자 풀로 사용자 가져오기](cognito-user-pools-import-users.md)
+ [사용자 속성 작업](user-pool-settings-attributes.md)

# 사용자 생성을 위한 정책 구성
<a name="user-pool-settings-admin-create-user-policy"></a>

사용자 풀에서 사용자가 가입하도록 허용하거나 사용자를 관리자로 생성할 수 있습니다. 또한 가입 후 인증 및 확인 프로세스를 사용자에게 맡기는 정도를 제어할 수 있습니다. 예를 들어, 가입을 검토하고 외부 검증 프로세스에 따라 가입을 수락하고 싶을 수 있습니다. 이 구성 또는 *관리자로 사용자 생성 정책*은 또한 사용자가 더 이상 사용자 계정을 확인할 수 없을 때까지의 시간을 설정합니다.

Amazon Cognito는 소프트웨어를 위한 고객 ID 및 액세스 관리(CIAM) 플랫폼으로서 일반 고객의 요구를 충족할 수 있습니다. 관리형 로그인의 유무에 관계없이 가입을 수락하고 앱 클라이언트가 있는 사용자 풀은 공개적으로 검색 가능한 앱 클라이언트 ID와 가입 요청을 아는 인터넷 상의 모든 사용자를 위한 사용자 프로필을 생성합니다. 가입한 사용자 프로필은 액세스 및 ID 토큰을 받을 수 있으며 앱에 대해 승인된 리소스에 액세스할 수 있습니다. 사용자 풀에서 가입을 활성화하기 전에 옵션을 검토하고 구성이 보안 표준을 준수하는지 확인하십시오. 다음 절차에 설명된 대로 **자체 등록 활성화** 및 `AllowAdminCreateUserOnly`를 주의해서 설정하십시오.

------
#### [ AWS Management Console ]

사용자 풀의 **가입** 메뉴에는 사용자 풀에 있는 사용자의 가입 및 관리 생성을 위한 몇 가지 설정이 포함되어 있습니다.

**가입 환경 구성**

1. **Cognito 지원 검증 및 확인**에서 **Cognito가 검증 및 확인을 위한 메시지를 자동으로 보내도록 허용** 여부를 선택합니다. 이 설정을 활성화하면 Amazon Cognito는 사용자 풀에 제시해야 하는 코드가 포함된 이메일 또는 SMS 메시지를 새 사용자에게 보냅니다. 이렇게 하면 이메일 주소 또는 전화 번호의 소유권을 확인하고, 동등한 속성을 확인된 것으로 설정하고, 로그인할 사용자 계정을 확인합니다. 선택한 **확인할 속성**에 따라 확인 메시지의 전달 방법 및 대상이 결정됩니다.

1. 사용자를 생성할 때 **속성 변경 확인**은 중요하지 않지만, 이는 속성 확인과 관련이 있습니다. [로그인 속성](user-pool-settings-attributes.md#user-pool-settings-aliases.title)을 변경했지만 아직 확인하지 않은 사용자가 새 속성 값이나 원래 속성으로 계속 로그인하도록 허용할 수 있습니다. 자세한 내용은 [사용자가 이메일 또는 전화 번호를 변경하는 경우 확인](signing-up-users-in-your-app.md#verifying-when-users-change-their-email-or-phone-number) 단원을 참조하십시오.

1. **필수 속성**에는 사용자가 가입하거나 사용자를 생성하기 전에 값을 제공해야 하는 속성이 표시됩니다. 사용자 풀을 생성할 때 필수 속성만 설정할 수 있습니다.

1. **사용자 지정 속성**은 사용자를 처음 만들 때만 *변경할 수 없는* 사용자 지정 속성의 값을 설정할 수 있기 때문에 사용자 생성 및 가입 프로세스에서 중요합니다. 사용자 지정 속성에 대한 자세한 내용은 [사용자 지정 속성](user-pool-settings-attributes.md#user-pool-settings-custom-attributes) 섹션을 참조하십시오.

1. 사용자가 [인증되지 않은](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html#user-pool-apis-auth-unauth) `SignUp` API로 새 계정을 생성할 수 있도록 하려면 **셀프 서비스 가입**에서 **자체 등록 활성화**를 선택하세요. 자체 등록을 비활성화하면 Amazon Cognito 콘솔에서 또는 [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) API 요청으로 새 사용자만 관리자로 생성할 수 있습니다. 자체 등록이 비활성화된 사용자 풀에서는 [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) API 요청이 `NotAuthorizedException`을 반환하고 관리형 로그인에 **가입** 링크가 표시되지 않습니다.

사용자를 관리자로 생성하려는 사용자 풀의 경우 **관리자가 설정한 임시 암호 만료 기간**의 **인증 방법** 메뉴에서 임시 암호의 사용 기간을 구성할 수 있습니다.

사용자를 관리자로서 생성할 때 고려해야 할 또 다른 중요한 요소는 초대 메시지입니다. 새 사용자를 생성하면 Amazon Cognito에서 앱 링크가 포함된 메시지를 전송하여 사용자가 처음으로 로그인할 수 있도록 합니다. **메시지 템플릿**의 **인증 방법** 메뉴에서 이 메시지 템플릿을 사용자 지정합니다.

앱 클라이언트 보안 암호가 없으면 가입을 방지하는 클라이언트 보안 암호를 사용하여 [기밀 앱 클라이언트](user-pool-settings-client-apps.md#user-pool-settings-client-app-client-types.title)(일반적으로 웹 애플리케이션)를 구성할 수 있습니다. 보안 모범 사례에 따라 공용 앱 클라이언트(일반적으로 모바일 앱)에서 앱 클라이언트 보안 암호를 배포하지 마세요. Amazon Cognito 콘솔의 **앱 클라이언트** 메뉴에서 클라이언트 보안 암호를 사용하여 앱 클라이언트를 생성할 수 있습니다.

------
#### [ Amazon Cognito user pools API ]

[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) 또는 [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API 요청에서 사용자 풀의 사용자 생성을 위한 파라미터를 프로그래밍 방식으로 설정할 수 있습니다.

[AdminCreateUserConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AdminCreateUserConfig) 요소는 사용자 풀의 다음 속성에 대한 값을 설정합니다.

1. 셀프 서비스 가입 활성화

1. 새 관리자 생성 사용자에게 보내는 초대 메시지

다음 예시를 전체 API 요청 본문에 추가하면 셀프 서비스 가입이 비활성화되고 기본 초대 이메일이 포함된 사용자 풀을 설정합니다.

```
"AdminCreateUserConfig": { 
      "AllowAdminCreateUserOnly": true,
      "InviteMessageTemplate": { 
         "EmailMessage": "Your username is {username} and temporary password is {####}.",
         "EmailSubject": "Welcome to ExampleApp",
         "SMSMessage": "Your username is {username} and temporary password is {####}."
      }
   }
```

[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) 또는 [UpdateUserPool API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) 요청의 다음 추가 파라미터는 새 사용자 생성을 제어합니다.

[AutoVerifiedAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AutoVerifiedAttributes)  
새 사용자를 등록할 때 [메시지를 자동으로 전송](user-pool-settings-email-phone-verification.md#user-pool-settings-email-phone-verification.title)하려는 속성, 이메일 주소 또는 전화번호입니다.

[정책](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Policies)  
사용자 풀 [암호 정책](managing-users-passwords.md#user-pool-settings-policies.title)입니다.

[스키마](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)  
사용자 풀 [사용자 지정 특성](user-pool-settings-attributes.md#user-pool-settings-custom-attributes.title)입니다. 이들은 사용자를 처음 만들 때만 *변경할 수 없는* 사용자 지정 속성의 값을 설정할 수 있기 때문에 사용자 생성 및 가입 프로세스에서 중요합니다.  
또한 이 파라미터는 사용자 풀에 필요한 속성을 설정합니다. 다음 텍스트를 전체 API 요청 본문의 `Schema` 요소에 삽입한 후 필요에 따라 `email` 속성을 설정합니다.  

```
{
            "Name": "email",
            "Required": true
}
```

------

# 사용자 계정 가입 및 확인
<a name="signing-up-users-in-your-app"></a>

사용자 계정은 다음 방법 중 하나로 사용자 풀에 추가됩니다.
+ 사용자가 사용자 풀의 클라이언트 앱에 가입합니다. 모바일 또는 웹 앱일 수 있습니다.
+ 사용자 계정을 사용자 풀로 가져올 수 있습니다. 자세한 내용은 [CSV 파일에서 사용자 풀로 사용자 가져오기](cognito-user-pools-using-import-tool.md) 섹션을 참조하세요.
+ 사용자 풀에 사용자 계정을 만들고 로그인하도록 사용자를 초대할 수 있습니다. 자세한 내용은 [관리자로 사용자 계정 생성](how-to-create-user-accounts.md) 단원을 참조하십시오.

가입한 사용자가 로그인하려면 먼저 확인을 받아야 합니다. 가져온 사용자 및 생성된 사용자는 이미 확인되었지만 처음 로그인할 때 자신의 암호를 생성해야 합니다. 다음 섹션에서는 확인 프로세스와 이메일 및 전화 확인에 대해 설명합니다.

**가입 시 암호**  
Amazon Cognito는 다음 조건을 제외하고 가입 시 모든 사용자의 암호를 요구합니다. 이러한 조건이 *모두* 충족되면 가입 작업에서 암호를 생략할 수 있습니다.

1. 사용자 풀 및 앱 클라이언트에서 [암호 없는 로그인](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)이 활성 상태입니다.

1. 애플리케이션은 AWS SDK의 인증 모듈로 사용자 지정 빌드됩니다. 관리형 로그인 및 호스팅 UI에는 항상 암호가 필요합니다.

1. 사용자는 사용자가 허용하는 이메일 또는 SMS 메시지 일회용 암호(OTP) 등 암호 없는 로그인 방법에 대한 속성 값을 제공합니다. 예를 들어 이메일 및 전화 OTP로 로그인을 허용하는 경우 사용자는 전화번호 또는 이메일 주소를 제공할 수 있지만 이메일로만 로그인을 허용하는 경우 이메일 주소를 제공해야 합니다.

1. 사용자 풀은 사용자가 암호 없는 로그인에 사용할 수 있는 속성을 [자동으로 확인합니다](#allowing-users-to-sign-up-and-confirm-themselves).

1. 지정된 [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) 요청의 경우 사용자는 [암호](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-Password) 파라미터 값을 제공하지 않습니다.

## 사용자 계정 확인 개요
<a name="signup-confirmation-verification-overview"></a>

다음 다이어그램은 확인 프로세스를 보여 줍니다.

![\[사용자가 확인 코드를 입력하면 이메일 또는 전화를 자동으로 확인합니다.\]](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/images/amazon-cognito-sign-in-confirm-user.png)


사용자 계정은 다음 상태 중 하나일 수 있습니다.

**등록됨(확인되지 않음)**  
사용자가 성공적으로 가입했지만 사용자 계정이 확인될 때까지 로그인할 수 없습니다. 이 상태에서는 사용자가 활성화되었지만 확인되지 않았습니다.  
자신을 등록하는 새 사용자는 이 상태에서 시작됩니다.

**확인됨**  
사용자 계정이 확인되었으며 사용자가 로그인할 수 있습니다. 사용자가 코드를 입력하거나 이메일 링크를 따라 사용자 계정을 확인하면 해당 이메일 또는 전화번호가 자동으로 확인됩니다. 코드나 링크는 24시간 동안 유효합니다.  
관리자 또는 사전 가입 Lambda 트리거에서 사용자 계정을 확인한 경우 계정에 연결되어 있는 확인된 이메일이나 전화번호가 없을 수 있습니다.

**암호 재설정 필요**  
사용자 계정이 확인되었지만, 사용자가 로그인하기 전에 코드를 요청하고 암호를 재설정해야 합니다.  
관리자 또는 개발자가 가져온 사용자 계정은 이 상태에서 시작합니다.

**암호 강제 변경**  
사용자 계정이 확인되고 사용자가 임시 암호를 사용하여 로그인할 수 있지만, 처음 로그인할 때 다른 작업을 수행하기 전에 암호를 새 값으로 변경해야 합니다.  
관리자 또는 개발자가 만든 사용자 계정은 이 상태에서 시작합니다.

**비활성화됨**  
사용자 계정을 삭제하려면 먼저 해당 사용자에 대한 로그인 액세스를 비활성화해야 합니다.

**추가 리소스**
+ [Amazon Cognito를 사용하여 비활성 사용자 계정 감지 및 수정](https://aws.amazon.com/blogs/security/detecting-and-remediating-inactive-user-accounts-with-amazon-cognito/)

## 가입 시 연락처 정보 확인
<a name="allowing-users-to-sign-up-and-confirm-themselves"></a>

새 사용자가 앱에 가입할 때 적어도 하나의 연락 방법을 제공하도록 하고 싶을 것입니다. 예를 들어 사용자의 연락처 정보를 사용하여 다음을 수행할 수 있습니다.
+ 사용자가 암호를 재설정하기로 선택한 경우 임시 암호를 보냅니다.
+ 개인 정보 또는 재무 정보가 업데이트되면 사용자에게 알립니다.
+ 특별 제품 및 서비스 또는 할인과 같은 프로모션 메시지를 보냅니다.
+ 계정 요약 또는 결제 미리 알림을 보냅니다.

이와 같은 사용 사례의 경우 확인된 대상에 메시지를 보내는 것이 중요합니다. 그렇지 않으면 잘못 입력한 이메일 주소 또는 전화 번호로 메시지를 보내게 될 수 있습니다. 또는 최악의 경우, 사용자를 사칭하는 악의적인 행위자에게 민감한 정보를 보내게 될 수도 있습니다.

올바른 사람에게만 메시지를 보내려면 사용자가 가입할 때 다음을 반드시 제공하도록 Amazon Cognito 사용자 풀을 구성합니다.

1. 이메일 주소 또는 전화 번호.

1. Amazon Cognito가 이메일 주소나 전화 번호로 전송하는 인증 코드. 24시간이 지났고 사용자 코드 또는 링크가 더 이상 유효하지 않은 경우 [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html) API 작업을 호출하여 새 코드 또는 링크를 생성 및 전송합니다.

확인 코드를 제공하면 코드를 받은 메일함이나 휴대폰에 액세스할 수 있음을 사용자가 증명합니다. 사용자가 코드를 제공하고 나면 Amazon Cognito는 다음과 같은 방법으로 사용자 풀에서 사용자에 대한 정보를 업데이트합니다.
+ 사용자의 상태를 `CONFIRMED`로 설정합니다.
+ 이메일 주소나 전화 번호가 확인되었음을 나타내도록 사용자 속성을 업데이트합니다.

이 정보를 보려면 Amazon Cognito 콘솔을 사용하면 됩니다. 또는 `AdminGetUser` API 작업, `admin-get-user` 명령을와 함께 AWS CLI사용하거나 AWS SDKs.

사용자에게 확인된 연락 방법이 있는 경우 사용자가 암호 재설정을 요청할 때 Amazon Cognito가 자동으로 사용자에게 메시지를 보냅니다.

### 사용자 속성을 확인하고 확인하는 기타 작업
<a name="allowing-users-to-sign-up-and-confirm-themselves-other-actions"></a>

다음 사용자 활동은 사용자 속성을 확인합니다. 이러한 속성을 자동으로 확인하도록 설정할 필요는 없습니다. 나열된 작업은 모든 경우에 해당 속성을 확인된 것으로 표시합니다.

**이메일 주소**  

1. 이메일 일회용 암호(OTP)를 사용하여 [암호 없는 인증](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)을 성공적으로 완료했습니다.

1. 이메일 OTP를 사용하여 [다중 인증(MFA)](user-pool-settings-mfa.md)을 성공적으로 완료했습니다.

**전화번호**  

1. SMS OTP를 사용하여 [암호 없는 인증](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)을 성공적으로 완료했습니다.

1. SMS OTP로 [MFA](user-pool-settings-mfa.md)를 성공적으로 완료했습니다.

### 이메일 또는 전화 확인을 요구하도록 사용자 풀을 구성하려면
<a name="verification-configure"></a>

사용자의 이메일 주소와 전화번호를 확인할 때 사용자에게 연락할 수 있는지 확인합니다. 에서 다음 단계를 완료 AWS Management Console 하여 사용자가 이메일 주소 또는 전화번호를 확인하도록 요구하는 사용자 풀을 구성합니다.

**참고**  
아직 계정에 사용자 풀을 만들지 않았으면 [사용자 풀 시작하기](getting-started-user-pools.md) 섹션을 참조하세요.

**사용자 풀을 구성하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. 탐색 창에서 **사용자 풀(User Pools)**을 선택합니다. 목록에서 기존 사용자 풀을 선택하거나 [사용자 풀을 생성합니다](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. **가입** 탭을 선택하고 **속성 확인 및 사용자 계정 확인**을 찾습니다. **편집**을 선택합니다.

1. **Cognito 지원 검증 및 확인**에서 **Cognito가 검증 및 확인을 위한 메시지를 자동으로 보내도록 허용** 여부를 선택합니다. 이 설정을 활성화하면 Amazon Cognito는 사용자가 가입하거나 사용자 프로필을 생성할 때 선택한 사용자 연락처 속성으로 메시지를 보냅니다. 속성을 확인하고 로그인을 위한 사용자 프로필을 확인하기 위해 Amazon Cognito는 코드나 링크를 메시지로 사용자에게 보냅니다. 이후 사용자가 UI에 코드를 입력해야 앱이 `ConfirmSignUp` 또는 `AdminConfirmSignUp` API 요청에서 이를 확인할 수 있습니다.
**참고**  
[**Cognito 지원 검증 및 확인(Cognito-assisted verification and confirmation)**]을 사용하지 않도록 설정하고 인증된 API 작업이나 Lambda 트리거를 사용하여 속성을 검증하고 사용자를 확인할 수도 있습니다.  
이 옵션을 선택하면 사용자가 가입할 때 Amazon Cognito가 확인 코드를 보내지 않습니다. Amazon Cognito의 확인 코드를 사용하지 않고 하나 이상의 연락 방법을 확인하는 사용자 지정 인증 흐름을 사용하는 경우 이 옵션을 선택합니다. 예를 들어 특정 도메인에 속하는 이메일 주소를 자동으로 확인하는 사전 가입 Lambda 트리거를 사용할 수 있습니다.  
사용자의 연락처 정보를 확인하지 않으면 사용자가 앱을 사용하지 못할 수 있습니다. 다음을 위해 사용자로부터 확인된 연락처 정보를 요구하는 것입니다.  
[**암호 재설정(Reset their passwords)**] - 사용자가 앱에서 `ForgotPassword` API 작업을 호출하는 옵션을 선택하면 Amazon Cognito는 사용자의 이메일 주소나 전화 번호로 임시 암호를 전송합니다. Amazon Cognito는 사용자에게 확인된 연락 방법이 하나 이상 있는 경우에만 이 암호를 전송합니다.
[**이메일 주소나 전화 번호를 별칭으로 사용하여 로그인(Sign in by using an email address or phone number as an alias)**] - 이러한 별칭을 허용하도록 사용자 풀을 구성하면 사용자는 별칭이 확인된 경우에만 별칭으로 로그인할 수 있습니다. 자세한 내용은 [로그인 속성 사용자 지정](user-pool-settings-attributes.md#user-pool-settings-aliases) 섹션을 참조하세요.

1. [**확인할 속성(Attributes to verify)**]을 선택합니다.  
**[SMS 메시지 전송, 전화 번호 확인(Send SMS message, verify phone number)]**  
Amazon Cognito에서 사용자가 가입할 때 SMS 메시지로 확인 코드를 전송합니다. 일반적으로 SMS 메시지를 통해 사용자와 커뮤니케이션하는 경우 이 옵션을 선택합니다. 예를 들어 배송 알림, 약속 확인 또는 알림을 보내는 경우 확인된 전화 번호를 사용할 수 있습니다. 사용자 전화 번호는 계정을 확인할 때 검증되는 속성으로, 사용자 이메일 주소를 확인하고 커뮤니케이션하려면 추가 조치를 취해야 합니다.  
**[이메일 메시지 전송, 이메일 주소 확인(Send email message, verify email address)]**  
Amazon Cognito에서 사용자가 가입할 때 이메일 메시지를 통해 확인 코드를 전송합니다. 일반적으로 이메일을 통해 사용자와 커뮤니케이션하는 경우 이 옵션을 선택합니다. 예를 들어 결제 청구서, 주문 요약 또는 특별 제품 및 서비스를 보내는 경우 확인된 이메일 주소를 사용할 수 있습니다. 사용자 이메일 주소는 계정을 확인할 때 검증되는 속성으로, 사용자 전화 번호를 확인하고 커뮤니케이션하려면 추가 조치를 취해야 합니다.  
**[전화 번호를 사용할 수 있는 경우 SMS 메시지 전송, 그렇지 않으면 이메일 메시지 전송(Send SMS message if phone number is available, otherwise send email message)]**  
모든 사용자에게 동일한 확인된 연락 방법을 요구하지 않는 경우 이 옵션을 선택합니다. 이 경우 앱의 가입 페이지에서 사용자에게 선호하는 연락 방법만 확인하도록 요청할 수 있습니다. 확인 코드를 전송할 때 Amazon Cognito는 앱에서 `SignUp` 요청 시에 제공한 연락 수단으로 코드를 보냅니다. 사용자가 이메일 주소와 전화 번호를 모두 제공하고 앱이 `SignUp` 요청에서 두 가지 연락 수단을 모두 제공할 경우 Amazon Cognito는 전화 번호로만 확인 코드를 전송합니다.  
사용자가 이메일 주소와 전화 번호를 모두 확인하도록 요구하는 경우 이 옵션을 선택합니다. Amazon Cognito는 사용자가 등록할 때 하나의 연락 방법을 확인하며, 사용자가 로그인한 후 앱이 다른 연락 방법을 확인해야 합니다. 자세한 내용은 [사용자가 이메일 주소와 전화 번호를 둘 다 확인하도록 요구하는 경우](#verification-email-plus-phone) 섹션을 참조하세요.

1. **변경 사항 저장(Save changes)**을 선택합니다.

### 이메일 또는 전화 확인을 사용하는 인증 흐름
<a name="verification-flow"></a>

사용자 풀에서 사용자가 연락처 정보를 확인해야 하는 경우 사용자가 가입할 때 앱은 다음과 같은 흐름을 지원해야 합니다.

1. 사용자가 사용자 이름, 전화 번호 및/또는 이메일 주소와 기타 속성을 입력하여 앱에 가입합니다.

1. Amazon Cognito 서비스가 앱으로부터 가입 요청을 받습니다. 요청에 가입에 필요한 모든 속성이 포함되어 있는지 확인한 후, 이 서비스는 가입 프로세스를 완료하고 사용자의 휴대폰(SMS 메시지) 또는 이메일로 확인 코드를 보냅니다. 이 코드는 24시간 동안 유효합니다.

1. 가입이 완료되었으며 사용자 계정이 확인 대기 중이라는 메시지를 서비스가 앱에 반환합니다. 해당 응답에는 확인 코드가 전송된 위치에 대한 정보가 포함됩니다. 이 시점에 사용자의 계정은 확인되지 않은 상태이며 사용자의 이메일 주소와 전화 번호가 확인되지 않았습니다.

1. 이제 앱에서 확인 코드를 입력하라는 메시지를 표시할 수 있습니다. 사용자가 코드를 즉시 입력할 필요는 없습니다. 단, 사용자는 확인 코드를 입력할 때까지 로그인할 수 없습니다.

1. 사용자가 앱에서 확인 코드를 입력합니다.

1. 앱이 [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html)을 호출하여 코드를 Amazon Cognito 서비스로 전송합니다. 이 서비스는 코드를 확인하고 코드가 올바르면 사용자 계정을 확인 상태로 설정합니다. 사용자 계정을 성공적으로 확인한 후 Amazon Cognito 서비스는 확인하는 데 사용된 속성(이메일 또는 전화번호)을 자동으로 확인된 것으로 표시합니다. 이 속성의 값이 변경되지 않는 한, 사용자가 다시 확인할 필요가 없습니다.

1. 이 시점에 사용자 계정은 확인된 상태이며 사용자가 로그인할 수 있습니다.

### 사용자가 이메일 주소와 전화 번호를 둘 다 확인하도록 요구하는 경우
<a name="verification-email-plus-phone"></a>

Amazon Cognito는 사용자가 가입할 때 하나의 연락 방법만 확인합니다. 이메일 주소 또는 전화번호 확인 중에서 선택해야 하는 경우 Amazon Cognito는 SMS 메시지를 통해 확인 코드를 전송하여 전화번호를 확인하도록 선택합니다. 예를 들어 사용자가 이메일 주소 또는 전화 번호를 확인할 수 있도록 사용자 풀을 구성하고 가입 시 앱이 이러한 속성을 모두 제공하는 경우 Amazon Cognito는 전화 번호만 확인합니다. 사용자가 전화번호를 확인하고 나면 Amazon Cognito가 사용자의 상태를 `CONFIRMED`로 설정하며, 사용자는 앱에 로그인할 수 있습니다.

사용자가 로그인하면 가입 중에 확인되지 않은 연락 방법을 확인하는 옵션을 앱에서 제공할 수 있습니다. 이 두 번째 수단을 확인하기 위해 앱은 `VerifyUserAttribute` API 작업을 호출합니다. 이 작업을 수행하려면 `AccessToken` 파라미터가 필요하며, Amazon Cognito는 인증된 사용자에 대한 액세스 토큰만 제공합니다. 따라서 사용자가 로그인한 후에만 두 번째 연락 방법을 확인할 수 있습니다.

사용자가 이메일 주소와 전화 번호를 모두 확인하도록 요구하는 경우 다음을 수행합니다.

1. 사용자가 이메일 주소 또는 전화 번호를 확인할 수 있도록 사용자 풀을 구성합니다.

1. 앱의 가입 흐름에서 사용자에게 이메일 주소와 전화 번호를 모두 제공하도록 요구합니다. [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) API 작업을 호출하고 `UserAttributes` 파라미터에서 이메일 주소와 전화 번호를 제공합니다. 이때 Amazon Cognito는 사용자의 휴대폰으로 확인 코드를 전송합니다.

1. 앱 인터페이스에서 사용자가 확인 코드를 입력하는 확인 페이지를 표시합니다. [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html) API 작업을 호출하여 사용자를 확인합니다. 이 시점에 사용자의 상태는 `CONFIRMED`이며 사용자의 전화 번호는 확인되었지만 이메일 주소는 확인되지 않았습니다.

1. 로그인 페이지를 표시하고 [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API 작업을 호출하여 사용자를 인증합니다. 사용자가 인증되면 Amazon Cognito는 앱에 액세스 토큰을 반환합니다.

1. [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html) API 작업을 호출합니다. 요청에 다음 파라미터를 지정합니다.
   + `AccessToken` - 사용자가 로그인할 때 Amazon Cognito가 반환하는 액세스 토큰입니다.
   + `AttributeName` - `"email"`을 속성 값으로 지정합니다.

   Amazon Cognito가 사용자의 이메일 주소로 확인 코드를 전송합니다.

1. 사용자가 확인 코드를 입력하는 확인 페이지를 표시합니다. 사용자가 코드를 제출하면 [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) API 작업을 호출합니다. 요청에 다음 파라미터를 지정합니다.
   + `AccessToken` - 사용자가 로그인할 때 Amazon Cognito가 반환하는 액세스 토큰입니다.
   + `AttributeName` - `"email"`을 속성 값으로 지정합니다.
   + `Code` - 사용자가 제공한 확인 코드입니다.

   이 시점에 이메일 주소는 확인된 상태입니다.

## 사용자가 앱에 가입할 수 있도록 허용하지만 사용자 풀 관리자로 확인
<a name="signing-up-users-in-your-app-and-confirming-them-as-admin"></a>

사용자 풀이 사용자 풀에 자동으로 확인 메시지를 보내는 것을 원하지 않지만 누구나 계정에 가입하도록 허용하려는 경우가 있을 수 있습니다. 이 모델에서는 예를 들어 신규 가입 요청을 사람이 직접 검토하고 가입을 일괄적으로 검증하고 처리할 수 있는 여지가 남아 있습니다. Amazon Cognito 콘솔에서 또는 IAM 인증 API 작업 [AdminConfirmSignup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html)을 사용하여 새 사용자 계정을 확인할 수 있습니다. 사용자 풀의 확인 메시지 전송 여부에 관계없이 관리자로서 사용자 계정을 확인할 수 있습니다.

이 방법을 통해서만 사용자 셀프 서비스 가입을 확인할 수 있습니다. 관리자로 생성한 사용자를 확인하려면 `Permanent`를 `True`로 설정하여 [AdminSetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) API 요청을 생성합니다.

1. 사용자가 사용자 이름, 전화 번호 및/또는 이메일 주소와 기타 속성을 입력하여 앱에 가입합니다.

1. Amazon Cognito 서비스가 앱으로부터 가입 요청을 받습니다. 요청에 가입에 필요한 모든 속성이 포함되어 있는지 확인한 후, 이 서비스는 가입 프로세스를 완료하고 등록이 완료되었으며 확인 대기 중이라는 메시지를 앱에 반환합니다. 이 시점에 사용자의 계정은 확인되지 않은 상태입니다. 사용자는 계정이 확인될 때까지 로그인할 수 없습니다.

1. 사용자의 계정을 확인합니다. 계정을 확인하려면에 로그인 AWS Management Console 하거나 자격 AWS 증명으로 API 요청에 서명해야 합니다.

   1. Amazon Cognito 콘솔에서 사용자를 확인하려면 **사용자** 메뉴로 이동하여 확인하려는 사용자를 선택한 다음 **작업** 메뉴에서 **확인**을 선택합니다.

   1.  AWS API 또는 CLI에서 사용자를 확인하려면에서 [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html) API 요청 또는 [admin-confirm-sign-up](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-confirm-sign-up.html)을 생성합니다 AWS CLI.

1. 이 시점에 사용자 계정은 확인된 상태이며 사용자가 로그인할 수 있습니다.

## 보안 암호 해시 값 컴퓨팅
<a name="cognito-user-pools-computing-secret-hash"></a>

모범 사례에 따라 기밀 앱 클라이언트에 클라이언트 보안 암호를 할당합니다. 앱 클라이언트에 클라이언트 보안 암호를 할당할 때, Amazon Cognito 사용자 풀 API 요청에는 클라이언트 보안 암호가 포함된 해시가 요청 본문에 포함되어야 합니다. 다음 목록의 API 작업에 대한 클라이언트 보안 암호를 알고 있는지 확인하려면, 클라이언트 보안 암호를 앱 클라이언트 ID 및 사용자의 사용자 이름과 연결한 다음 문자열을 base64로 인코딩합니다.

앱이 보안 암호 해시가 있는 클라이언트에 사용자를 로그인시키는 경우 모든 사용자 풀 로그인 속성의 값을 암호 해시의 사용자 이름 요소로 사용할 수 있습니다. 앱이 `REFRESH_TOKEN_AUTH`가 있는 인증 작업에서 새 토큰을 요청하는 경우 사용자 이름 요소의 값은 로그인 속성에 따라 달라집니다. 사용자 풀에 로그인 속성으로 `username`이 없는 경우 액세스 또는 ID 토큰의 사용자 `sub` 클레임에서 보안 암호 해시 사용자 이름 값을 설정하십시오. `username`가 로그인 속성인 경우에는 `username` 클레임에서 보안 암호 해시 사용자 이름 값을 설정합니다.

다음 Amazon Cognito 사용자 풀 API는 `SecretHash` 파라미터의 클라이언트 보안 암호 해시 값을 허용합니다.
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)

또한 다음 API는 인증 파라미터 또는 챌린지 응답의`SECRET_HASH` 파라미터에 클라이언트 보안 암호 해시 값을 허용합니다.


| API 작업 | SECRET\$1HASH의 상위 파라미터 | 
| --- |--- |
| InitiateAuth | AuthParameters | 
| AdminInitiateAuth | AuthParameters | 
| RespondToAuthChallenge | ChallengeResponses | 
| AdminRespondToAuthChallenge | ChallengeResponses | 

보안 암호 해시 값은 사용자 풀 클라이언트 및 사용자 이름의 보안 암호 키와 메시지의 클라이언트 ID를 사용하여 계산된 Base 64 인코딩 키 추가 해시 메시지 인증 코드(HMAC)입니다. 다음 유사 코드는 이 값이 계산되는 방식을 보여줍니다. 이 유사 코드에서 `+`는 연결을 나타내고, `HMAC_SHA256`은 HmacSHA256을 사용해 HMAC 값을 생성하는 기능을 나타내며, `Base64`는 해시 출력의 Base-64 인코딩 버전을 생성하는 기능을 나타냅니다.

```
Base64 ( HMAC_SHA256 ( "Client Secret Key", "Username" + "Client Id" ) )
```

`SecretHash` 파라미터를 계산하고 사용하는 방법에 대한 자세한 개요는 AWS 지식 센터의 [ Amazon Cognito 사용자 풀 API에서 “클라이언트 <client-id>의 보안 암호 해시를 확인할 수 없음” 오류를 해결하려면 어떻게 해야 합니까?](https://aws.amazon.com/premiumsupport/knowledge-center/cognito-unable-to-verify-secret-hash/)를 참조하세요.

서버 측 앱 코드에서 다음 코드 예를 사용할 수 있습니다.

------
#### [ Shell ]

```
echo -n "[username][app client ID]" | openssl dgst -sha256 -hmac [app client secret] -binary | openssl enc -base64
```

------
#### [ Java ]

```
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
 
public static String calculateSecretHash(String userPoolClientId, String userPoolClientSecret, String userName) {
    final String HMAC_SHA256_ALGORITHM = "HmacSHA256";
    
    SecretKeySpec signingKey = new SecretKeySpec(
            userPoolClientSecret.getBytes(StandardCharsets.UTF_8),
            HMAC_SHA256_ALGORITHM);
    try {
        Mac mac = Mac.getInstance(HMAC_SHA256_ALGORITHM);
        mac.init(signingKey);
        mac.update(userName.getBytes(StandardCharsets.UTF_8));
        byte[] rawHmac = mac.doFinal(userPoolClientId.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(rawHmac);
    } catch (Exception e) {
        throw new RuntimeException("Error while calculating ");
    }
}
```

------
#### [ Python ]

```
import sys
import hmac, hashlib, base64 
username = sys.argv[1] 
app_client_id = sys.argv[2] 
key = sys.argv[3] 
message = bytes(sys.argv[1]+sys.argv[2],'utf-8') 
key = bytes(sys.argv[3],'utf-8') 
secret_hash = base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode() 
print("SECRET HASH:",secret_hash)
```

------

## 이메일 또는 전화 번호를 확인하지 않고 사용자 계정 확인
<a name="confirming-user-without-verification-of-email-or-phone-number"></a>

Lambda 사전 가입 트리거를 사용하면 확인 코드를 요구하거나 이메일 또는 전화번호를 확인하지 않고도 가입 시 사용자 계정을 자동으로 확인할 수 있습니다. 이 방법으로 확인된 사용자는 코드를 받지 않고도 즉시 로그인할 수 있습니다.

이 트리거를 통해 확인된 사용자의 이메일 또는 전화 번호를 표시할 수도 있습니다.

**참고**  
이 방법은 사용자가 시작할 때 편리하지만 이메일 또는 전화 번호 중 하나 이상을 자동 확인하는 것이 좋습니다. 그렇지 않으면 사용자가 암호를 잊어 버린 경우 복구할 수 없게 될 수 있습니다.

사용자가 가입 시 확인 코드를 받아 입력하도록 요구하지 않고 Lambda 사전 가입 트리거에서 이메일 및 전화번호를 자동으로 확인하지 않으면, 해당 사용자 계정에 대해 확인된 이메일 주소 또는 전화번호가 없을 위험이 있습니다. 이 경우 사용자가 나중에 이메일 주소 또는 전화 번호를 확인할 수 있습니다. 그러나 사용자가 암호를 잊어버렸는데 확인된 이메일 주소 또는 전화번호가 없는 경우 암호 찾기 흐름에서 사용자에게 확인 코드를 보내는 데 확인된 이메일 또는 전화번호가 필요하기 때문에 사용자의 계정이 잠깁니다.

## 사용자가 이메일 또는 전화 번호를 변경하는 경우 확인
<a name="verifying-when-users-change-their-email-or-phone-number"></a>

여러 로그인 이름으로 구성한 사용자 풀에서 사용자는 로그인 시 전화번호 또는 이메일 주소를 사용자 이름으로 입력할 수 있습니다. 사용자가 앱에서 이메일 주소 또는 전화번호를 업데이트하면 Amazon Cognito는 새 속성 값의 소유권을 확인하는 코드가 포함된 메시지를 즉시 보낼 수 있습니다. 이러한 확인 코드의 자동 전송을 활성화하려면 [이메일 또는 전화 확인 구성](user-pool-settings-email-phone-verification.md) 섹션을 참조하세요.

확인 코드를 받는 사용자는 [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) 요청에서 해당 코드를 Amazon Cognito에 다시 제공해야 합니다. 코드를 제공하면 해당 속성이 확인된 것으로 표시됩니다. 일반적으로 사용자가 이메일 주소 또는 전화번호를 업데이트할 때 새 값을 소유하고 있는지 확인한 후에 로그인하고 메시지를 수신할 수 있습니다. 사용자 풀에는 사용자가 이메일 주소 또는 전화번호에 대한 업데이트를 확인해야 하는지 여부를 결정하는 구성 가능한 옵션이 있습니다.

이 옵션은 사용자 풀 속성 `AttributesRequireVerificationBeforeUpdate`입니다. [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-UserAttributeUpdateSettings) 또는 [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-UserAttributeUpdateSettings) 요청에서 구성하거나 Amazon Cognito 콘솔의 **가입** 메뉴에서 **업데이트가 보류 중일 때 원래 속성 값 활성 유지**를 설정하여 구성합니다.

사용자 풀이 이메일 주소에 대한 업데이트를 처리하는 방법 및 전화번호는 사용자 풀의 사용자 이름 구성에 연결됩니다. 사용자 풀 사용자 이름은 로그인 이름이 이메일 주소, 전화번호 또는 둘 다인 *사용자 이름 속성* 구성일 수 있습니다. 또한 `username` 속성이 이메일 주소, 전화번호 또는 대체 로그인 이름으로 선호하는 사용자 이름과 함께 로그인 이름인 *별칭 속성* 구성에 있을 수 있습니다. 자세한 내용은 [로그인 속성 사용자 지정](user-pool-settings-attributes.md#user-pool-settings-aliases) 단원을 참조하십시오.

 또한 사용자 지정 메시지 Lambda 트리거를 사용하여 확인 메시지를 사용자 지정할 수 있습니다. 자세한 내용은 [사용자 정의 메시지 Lambda 트리거](user-pool-lambda-custom-message.md) 단원을 참조하십시오. 사용자의 이메일 주소나 전화번호가 확인되지 않은 경우, 애플리케이션은 사용자에게 해당 속성을 확인해야 한다는 사실을 알리고, 사용자가 확인 코드를 입력할 수 있는 버튼이나 링크를 제공해야 합니다.

다음 표에서는 `AttributesRequireVerificationBeforeUpdate` 및 별칭 설정이 사용자가 로그인 속성의 값을 변경할 때 결과를 결정하는 방법을 설명합니다.


| 사용자 이름 구성 | 사용자가 새 속성을 확인해야 하는 동작 | 사용자가 새로운 속성을 확인할 필요가 없는 경우의 동작 | 
| --- | --- | --- | 
| 사용자 이름 속성 | 원래 속성은 확인되고 로그인에 적합하며 원래 값으로 유지됩니다. 사용자가 새 값을 확인하면 Amazon Cognito는 속성 값을 업데이트하고 확인된 것으로 표시하며 로그인에 적합합니다. | Amazon Cognito는 속성을 새 값으로 업데이트합니다. 새 값은 로그인할 수 있습니다. 사용자가 새 값을 확인하면 Amazon Cognito는 해당 값을 확인된 것으로 표시합니다. | 
| 별칭 속성 | 원래 속성은 확인되고 로그인에 적합하며 원래 값으로 유지됩니다. 사용자가 새 값을 확인하면 Amazon Cognito는 속성 값을 업데이트하고 확인된 것으로 표시하며 로그인에 적합합니다. | Amazon Cognito는 속성을 새 값으로 업데이트합니다. 원래 속성 값이나 새 속성 값 모두 로그인할 수 없습니다. 사용자가 새 값을 확인하면 Amazon Cognito는 속성 값을 업데이트하고 확인된 것으로 표시하며 로그인에 적합합니다. | 

**예제 1.**  
사용자 1은 이메일 주소 `user1@example.com`으로 애플리케이션에 로그인하고 사용자 이름 `user1`(별칭 속성)을 갖습니다. 사용자 풀은 로그인 속성에 대한 업데이트를 확인하고 확인 메시지를 자동으로 전송하도록 구성됩니다. 이메일 주소를 `user1+foo@example.com`으로 업데이트하도록 요청합니다. `user1+foo@example.com`에서 확인 이메일을 수신하고 이메일 주소 `user1@example.com`으로만 *다시 로그인할 수* 있습니다. 나중에 확인 코드를 입력하고 이메일 주소 `user1+foo@example.com`으로만 다시 로그인할 수 있습니다.

**예제 2.**  
사용자 2는 이메일 주소 `user2@example.com`으로 애플리케이션에 로그인하고 사용자 이름 (별칭 속성)을 갖습니다. 사용자 풀은 로그인 속성에 대한 업데이트를 확인하지 *않고* 확인 메시지를 자동으로 보내도록 구성되어 있습니다. 이메일 주소를 `user2+bar@example.com`으로 업데이트하도록 요청합니다. `user2+bar@example.com`에서 확인 이메일을 수신하고 *다시 로그인할 수 없습니다*. 나중에 확인 코드를 입력하고 이메일 주소 `user2+bar@example.com`으로만 다시 로그인할 수 있습니다.

**예제 3**  
사용자 3은 이메일 주소 `user3@example.com`으로 애플리케이션에 로그인하고 사용자 이름(사용자 이름 속성)이 없습니다. 사용자 풀은 로그인 속성에 대한 업데이트를 확인하지 *않고* 확인 메시지를 자동으로 보내도록 구성되어 있습니다. 이메일 주소를 `user3+baz@example.com`으로 업데이트하도록 요청합니다. `user3+baz@example.com`에서 확인 이메일을 수신하지만 확인 코드로 추가 조치를 취하지 않고 *즉시 로그인할 수* 있습니다.

## 관리자 또는 개발자가 생성한 사용자 계정에 대한 확인 및 검증 프로세스
<a name="confirmation-and-verification-of-users-whose-accounts-youve-created"></a>

관리자 또는 개발자가 만든 사용자 계정은 이미 확인 상태이므로 사용자가 확인 코드를 입력할 필요가 없습니다. Amazon Cognito 서비스가 이러한 사용자에게 보내는 초대 메시지에는 사용자 이름과 임시 암호가 포함됩니다. 사용자는 로그인하기 전에 이 암호를 변경해야 합니다. 자세한 내용은 [관리자로 사용자 계정 생성](how-to-create-user-accounts.md)의 [이메일 및 SMS 메시지 사용자 정의](how-to-create-user-accounts.md#creating-a-new-user-customize-messages) 섹션과 [Lambda 트리거를 사용하여 사용자 풀 워크플로 사용자 정의](cognito-user-pools-working-with-lambda-triggers.md)의 사용자 지정 메시지 트리거 섹션을 참조하세요.

## 가져온 사용자 계정에 대한 확인 및 검증 프로세스
<a name="confirmation-and-verification-of-users-whose-accounts-youve-imported"></a>

 AWS Management Console, CLI 또는 API( 참조[CSV 파일에서 사용자 풀로 사용자 가져오기](cognito-user-pools-using-import-tool.md))에서 사용자 가져오기 기능을 사용하여 생성된 사용자 계정은 이미 확인된 상태이므로 사용자는 확인 코드를 입력할 필요가 없습니다. 초대 메시지가 전송되지 않습니다. 그러나 가져온 사용자 계정은 사용자가 먼저 `ForgotPassword` API를 호출하여 코드를 요청한 다음, `ConfirmForgotPassword` API를 호출하고 전달된 코드를 사용하여 암호를 만들어야 로그인할 수 있습니다. 자세한 내용은 [가져온 사용자에게 암호 재설정 요구](cognito-user-pools-using-import-tool.md#cognito-user-pools-using-import-tool-password-reset) 섹션을 참조하세요.

사용자 계정을 가져올 때 사용자의 이메일 또는 전화 번호가 확인된 상태로 표시되어야 하므로 사용자가 로그인 시에는 확인이 필요하지 않습니다.

## 앱을 테스트하는 동안 이메일 전송
<a name="managing-users-accounts-email-testing"></a>

Amazon Cognito는 클라이언트 앱에서 사용자 풀을 위해 계정을 생성하고 관리할 때 사용자에게 이메일 메시지를 보냅니다. 이메일 확인을 요구하도록 사용자 풀을 구성하는 경우 Amazon Cognito는 다음과 같은 경우 이메일을 보냅니다.
+ 사용자가 가입할 경우.
+ 사용자가 이메일 주소를 업데이트할 경우.
+ 사용자가 `ForgotPassword` API 작업을 호출하는 작업을 수행할 경우.
+ 사용자 계정을 관리자로 생성할 경우.

이메일을 시작한 작업이 무엇인지에 따라 이메일에는 확인 코드가 들어가거나 임시 암호가 들어갑니다. 사용자는 이러한 이메일을 수신하고 메시지를 이해해야 합니다. 그렇지 않으면 로그인하여 앱을 사용하지 못할 수 있습니다.

이메일이 성공적으로 전송되고 메시지가 올바른지 확인하려면 앱에서 Amazon Cognito로부터의 이메일 전송을 시작하는 작업을 테스트합니다. 예를 들어 앱에서 가입 페이지를 사용하거나 `SignUp` API 작업을 사용하면, 테스트 이메일 주소로 등록하여 이메일을 시작할 수 있습니다. 이 방법으로 테스트하려면 다음을 기억해야 합니다.

**중요**  
이메일 주소를 사용하여 Amazon Cognito에서 이메일을 시작하는 작업을 테스트하는 경우, 가짜 이메일 주소(메일박스가 없는 이메일 주소)를 사용하지 마세요. Amazon Cognito로부터 이메일을 수신할 실제 이메일 주소를 사용하여 *하드 바운스*를 유발하지 않도록 합니다.  
하드 바운스 메일은 Amazon Cognito가 수신자의 메일박스로 이메일을 전송하지 못할 때 발생하며, 메일박스가 없는 경우 항상 발생합니다.  
Amazon Cognito는 지속적으로 하드 바운스가 발생하는 AWS 계정에서 보낼 수 있는 이메일 수를 제한합니다.

이메일을 시작하는 작업을 테스트할 때 다음 이메일 주소 중 하나를 사용하여 하드 바운스를 방지합니다.
+ 자신이 소유하고 테스트에 사용하는 이메일 계정의 주소. 자신의 이메일 주소를 사용하면 Amazon Cognito에서 보내는 이메일을 받게 됩니다. 이 이메일을 통해 인증 코드를 사용하여 앱의 가입 환경을 테스트할 수 있습니다. 사용자 풀에 대한 이메일 메시지를 사용자 지정한 경우 사용자 지정 내용이 올바른지 확인할 수 있습니다.
+ 메일박스 시뮬레이터 주소, *success@simulator.amazonses.com*. 시뮬레이터 주소를 사용하는 경우 Amazon Cognito가 이메일을 성공적으로 전송하지만 사용자는 이메일을 볼 수 없습니다. 이 옵션은 인증 코드를 사용할 필요가 없고 이메일 메시지를 확인할 필요가 없을 때 유용합니다.
+ 임의의 레이블이 추가된 메일박스 시뮬레이터 주소, 예: *success\$1user1@simulator.amazonses.com* 또는 *success\$1user2@simulator.amazonses.com*. Amazon Cognito가 이들 주소로 이메일을 성공적으로 전송하지만 사용자는 전송된 이메일을 볼 수 없습니다. 이 옵션은 사용자 풀에 여러 테스트 사용자를 추가하여 가입 프로세스를 테스트하며, 각 테스트 사용자에게 고유한 이메일 주소가 있는 경우에 유용합니다.

# 이메일 또는 전화 확인 구성
<a name="user-pool-settings-email-phone-verification"></a>

**인증 방법** 메뉴에서 이메일 또는 전화 확인 설정을 선택할 수 있습니다. 멀티 팩터 인증(MFA)에 대한 자세한 내용은 [SMS Text Message MFA(SMS 문자 메시지 MFA)](user-pool-settings-mfa-sms-email-message.md)를 참조하세요.

Amazon Cognito는 Amazon SNS를 사용하여 SMS 메시지를 전송합니다. AWS 서비스 이전에 Amazon Cognito 또는 다른에서 SMS 메시지를 전송하지 않은 경우 Amazon SNS가 SMS 샌드박스에 계정을 배치할 수 있습니다. 샌드박스에서 프로덕션으로 계정을 제거하기 전에 확인된 전화 번호로 테스트 메시지를 보내는 것이 좋습니다. 또한 SMS 메시지를 미국 대상 전화 번호로 보내려는 경우 Amazon Pinpoint에서 발신 또는 발신자 ID를 받아야 합니다. SMS 메시지를 사용하도록 Amazon Cognito 사용자 풀을 구성하려면 [Amazon Cognito 사용자 풀의 SMS 메시지 설정](user-pool-sms-settings.md) 섹션을 참조하세요.

Amazon Cognito는 이메일 주소 또는 전화번호를 자동으로 확인할 수 있습니다. 이 확인 작업을 수행하기 위해 Amazon Cognito에서는 확인 코드를 보내거나 확인 링크를 보냅니다. 이메일 주소의 경우 Amazon Cognito에서 코드 또는 링크를 이메일 메시지에 넣어 보냅니다. Amazon Cognito 콘솔의 **메시지 템플릿** 메뉴에서 **인증 메시지** 템플릿을 편집할 때 **인증 유형**의 **코드** 또는 **링크**를 선택할 수 있습니다. 자세한 내용은 [이메일 확인 메시지 사용자 정의](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-email-verification-message-customization) 단원을 참조하십시오.

전화번호의 경우 Amazon Cognito에서 코드를 SMS 문자 메시지에 넣어 보냅니다.

Amazon Cognito는 사용자를 확인하고 사용자가 잊어버린 암호를 복구할 수 있도록 전화 번호 또는 이메일 주소를 확인해야 합니다. 또는 사전 가입 Lambda 트리거나 [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html) API 작업을 사용하여 사용자를 자동으로 확인할 수 있습니다. 자세한 내용은 [사용자 계정 가입 및 확인](signing-up-users-in-your-app.md) 단원을 참조하십시오.

확인 코드나 링크는 24시간 동안 유효합니다.

이메일 주소 또는 전화 번호를 확인하도록 선택하면 사용자가 가입할 때 Amazon Cognito에서 확인 코드 또는 링크를 자동으로 보냅니다. 사용자 풀에 [사용자 지정 SMS 발신자 Lambda 트리거](user-pool-lambda-custom-sms-sender.md) 또는 [사용자 정의 이메일 발신자 Lambda 트리거](user-pool-lambda-custom-email-sender.md)가 구성된 경우 해당 함수가 대신 호출됩니다.

**참고**  
Amazon SNS는 전화 번호 확인을 위해 사용하는 SMS 문자 메시지 사용 요금을 별도로 청구합니다. 이메일 메시지는 무료로 보낼 수 있습니다. Amazon SNS 요금에 대한 자세한 내용은 [전 세계 SMS 요금](https://aws.amazon.com/sns/sms-pricing/)을 참조하세요. 현재 SMS 메시징을 사용할 수 있는 국가의 목록은 [지원되는 리전 및 국가](https://docs.aws.amazon.com/sns/latest/dg/sms_supported-countries.html)를 참조하세요.
Amazon Cognito에서 이메일 메시지를 생성하는 작업을 앱에서 테스트하는 경우 Amazon Cognito에서 하드 바운스 없이 연결할 수 있는 실제 이메일 주소를 사용합니다. 자세한 내용은 [앱을 테스트하는 동안 이메일 전송](signing-up-users-in-your-app.md#managing-users-accounts-email-testing) 섹션을 참조하세요.
암호 찾기 흐름에서는 사용자를 확인하기 위해 사용자의 이메일 또는 전화 번호를 요구합니다.

**중요**  
사용자가 전화번호 및 이메일 주소 둘 다를 사용하여 가입했으며 사용자 풀 설정에서 이 두 속성의 확인을 요구하는 경우 Amazon Cognito에서 확인 코드를 SMS 메시지를 통해 전화번호로 보냅니다. Amazon Cognito에선 아직 이메일 주소를 확인하지 않았기 때문에 앱에서 [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html)를 호출하여 이메일 주소가 확인을 기다리는지 여부를 확인해야 합니다. 확인이 필요한 경우 앱에서 [GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html)를 호출하여 이메일 확인 흐름을 시작해야 합니다. 그런 다음 [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html)를 호출하여 확인 코드를 제출해야 합니다.

 AWS 계정 및 개별 메시지에 대한 SMS 메시지 지출 할당량을 조정할 수 있습니다. 이러한 한도는 SMS 메시지 전송 비용에만 적용됩니다. 자세한 내용은 [Amazon SNS FAQ](https://aws.amazon.com/sns/faqs/)의 **계정 수준 및 메시지 수준의 지출 할당량이란 무엇이며 어떻게 작동합니까?**를 참조하세요.

Amazon Cognito AWS 리전 는 사용자 풀을 생성한 또는 다음 표의 레거시 Amazon SNS 대체 리전에서 Amazon SNS 리소스를 사용하여 SMS 메시지를 전송합니다. ** Amazon SNS ** 아시아 태평양(서울) 리전에 있는 Amazon Cognito 사용자 풀은 예외입니다. 이러한 사용자 풀은 Amazon SNS 구성을 아시아 태평양(도쿄) 리전에서 사용합니다. 자세한 내용은 [SMS 메시지 AWS 리전 용 선택](user-pool-sms-settings.md#sms-choose-a-region) 섹션을 참조하세요.


| Amazon Cognito 리전 | 레거시 Amazon SNS 대체 리전 | 
| --- | --- | 
| 미국 동부(오하이오) | 미국 동부(버지니아 북부) | 
| 아시아 태평양(뭄바이) | 아시아 태평양(싱가포르) | 
| 아시아 태평양(서울) | 아시아 태평양(도쿄) | 
| 캐나다(중부) | 미국 동부(버지니아 북부) | 
| 유럽(프랑크푸르트) | 유럽(아일랜드) | 
| 유럽(런던) | 유럽(아일랜드) | 

**예: **Amazon Cognito 사용자 풀이 아시아 태평양(뭄바이)에 있고 ap-southeast-1의 지출 한도가 늘어난 경우 ap-southeast-1의 별도 증가를 요청하지 않을 수 있습니다. 대신 Amazon SNS 리소스를 아시아 태평양(싱가포르)에서 사용할 수 있습니다.

## 이메일 주소 및 전화번호에 대한 업데이트 확인
<a name="user-pool-settings-verifications-verify-attribute-updates"></a>

이메일 주소 또는 전화번호 속성은 사용자가 값을 변경한 직후에 미확인 상태로 활성화됩니다. 또한 Amazon Cognito에서 속성을 업데이트하기 전에 사용자가 새 값을 확인하도록 요구할 수도 있습니다. 사용자가 먼저 새 값을 확인하도록 요청하는 경우 원래 값을 사용하여 로그인하고 새 값을 확인할 때까지 메시지를 수신할 수 있습니다.

사용자가 이메일 주소 또는 전화번호를 사용자 풀의 로그인 별칭으로 사용할 수 있는 경우 업데이트된 속성의 로그인 이름은 업데이트된 속성의 확인이 필요한지에 따라 달라집니다. 업데이트된 속성을 확인해야 하는 경우 사용자는 새 값을 확인할 때까지 원래 속성 값으로 로그인할 수 있습니다. 사용자가 업데이트된 속성을 확인하지 않아도 되는 경우 사용자는 새 값을 확인할 때까지 새 속성 값이나 원래 속성 값으로 로그인하거나 메시지를 받을 수 없습니다.

예를 들어, 사용자 풀은 이메일 주소 별칭으로 로그인을 허용하고 사용자가 업데이트할 때 이메일 주소를 확인해야 합니다. `sue@example.com`으로 로그인하는 Sue는 이메일 주소를 `sue2@example.com`으로 바꾸기를 원했지만, 실수로 `ssue2@example.com`을 입력했습니다. Sue는 확인 이메일을 받지 못하니 `ssue2@example.com`을 확인할 수가 없습니다. Sue는 `sue@example.com`으로 로그인한 후 앱에서 양식을 다시 제출하여 이메일 주소를 `sue2@example.com`으로 업데이트합니다. 확인 이메일을 받고 앱에 확인 코드를 입력한 그녀는 이제 `sue2@example.com`으로 로그인하기 시작합니다.

**사용자가 속성을 업데이트하고 사용자 풀이 새 속성 값을 검증하는 경우**
+ 새 값을 검증하기 위한 코드를 확인하기 전에 원래 속성 값으로 로그인할 수 있습니다.
+ 새 값을 검증하기 위한 코드를 확인한 후에만 새 속성 값으로 로그인할 수 있습니다.
+ [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API 요청에서 `email_verified` 또는`phone_number_verified`를 `true`로 설정하면 Amazon Cognito가 전송한 코드를 확인하기 전에 로그인할 수 있습니다.

**사용자가 속성을 업데이트하고 사용자 풀이 새 속성 값을 검증하지 않는 경우**
+ 원래 속성 값으로 로그인하거나 메시지를 수신할 수 없습니다.
+ 새 값을 검증하기 위한 코드를 확인하기 전에는 새 속성 값으로 로그인하거나 확인 코드 이외의 메시지를 받을 수 없습니다.
+ [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API 요청에서 `email_verified` 또는`phone_number_verified`를 `true`로 설정하면 Amazon Cognito가 전송한 코드를 확인하기 전에 로그인할 수 있습니다.

## 사용자가 이메일 주소 또는 전화번호를 업데이트할 때 속성 확인을 요청하려면


1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)에 로그인합니다. 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. 탐색 창에서 [**사용자 풀(User Pools)**]을 선택한 다음 편집할 사용자 풀을 선택합니다.

1. **가입** 메뉴의 **속성 확인 및 사용자 계정 확인**에서 **편집**을 선택합니다.

1. **업데이트가 보류 중일 때 원래 속성 값을 활성 상태로 유지(Keep original attribute value active when an update is pending)**를 선택합니다.

1. **업데이트가 보류 중일 때 활성 속성 값(Active attribute values when an update is pending)**에서 Amazon Cognito가 값을 업데이트하기 전에 사용자가 확인해야 할 속성을 선택합니다.

1. **변경 사항 저장**을 선택합니다.

Amazon Cognito API를 사용하여 속성 업데이트를 확인하도록 하려면 [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) 요청에 `AttributesRequireVerificationBeforeUpdate` 파라미터를 설정하면 됩니다.

## Amazon Cognito에 자동으로 SMS 메시지를 전송할 수 있는 권한 부여
<a name="user-pool-settings-verifications-iam-role-for-sms"></a>

Amazon Cognito가 자동으로 사용자에게 SMS 메시지를 보내려면 권한이 필요합니다. 해당 권한을 부여하려면 AWS Identity and Access Management (IAM) 역할을 생성할 수 있습니다. Amazon Cognito 콘솔의 **인증 방법** 메뉴에서 SMS에서 **편집**을 선택하여 역할을 설정합니다.

# MFA, 인증, 확인 및 초대 메시지 구성
<a name="cognito-user-pool-settings-message-customizations"></a>

Amazon Cognito를 사용하면 SMS 및 이메일 인증, 검증, 사용자 초대 메시지를 사용자 지정하여 애플리케이션의 보안과 사용자 경험을 강화할 수 있습니다. 일부 메시지에 대한 코드 기반 및 원클릭 링크 확인 중에서 선택할 수 있습니다. 이 주제에서는 Amazon Cognito 콘솔에서 인증 및 확인 통신을 개인화하는 방법을 설명합니다.

**메시지 템플릿** 메뉴에서 다음을 사용자 지정할 수 있습니다.
+ 일회용 암호(OTP) 및 다중 인증(MFA)을 위한 이메일 및 SMS 메시지 템플릿
+ SMS 및 이메일 확인 메시지
+ 이메일의 확인 유형(코드 또는 링크)
**참고**  
Amazon Cognito는 사용자가 확인 코드를 가입하거나 재전송할 때 확인 메시지에서 링크 기반 템플릿이 포함된 링크를 전송합니다. 속성 업데이트 및 암호 재설정 작업의 이메일은 코드 템플릿을 사용합니다.
+ 사용자 초대 메시지
+ 사용자 풀을 통해 전송되는 이메일의 FROM 및 REPLY-TO 이메일 주소

**참고**  
SMS 및 이메일 확인 메시지 템플릿은 전화 번호 및 이메일 확인을 요구하도록 선택한 경우에만 표시됩니다. 마찬가지로, SMS MFA 메시지 템플릿은 MFA 설정이 [**필수(required)**] 또는 [**선택 사항(optional)**]인 경우에만 표시됩니다.

**Topics**
+ [메시지 템플릿](#cognito-user-pool-settings-message-templates)
+ [이메일 및 SMS MFA 메시지 사용자 지정](#cognito-user-pool-settings-SMS-message-customization)
+ [이메일 확인 메시지 사용자 정의](#cognito-user-pool-settings-email-verification-message-customization)
+ [사용자 초대 메시지 사용자 정의](#cognito-user-pool-settings-user-invitation-message-customization)
+ [이메일 주소 사용자 정의](#cognito-user-pool-settings-email-address-customization)
+ [Amazon Cognito가 사용자를 대신하여 (사용자 정의 FROM 이메일 주소에서) Amazon SES 이메일을 전송하도록 권한 부여](#cognito-user-pool-settings-ses-authorization-to-send-email)

## 메시지 템플릿
<a name="cognito-user-pool-settings-message-templates"></a>

메시지 템플릿을 사용하여 메시지에 자리 표시자를 삽입할 수 있습니다. Amazon Cognito는 자리 표시자를 해당 값으로 바꿉니다. 든 유형의 메시지 템플릿에서 *범용 템플릿 자리 표시자*를 참조할 수 있지만 이러한 값이 모든 메시지 유형에 있는 것은 아닙니다.


**범용 템플릿 자리 표시자**  

|  설명  |  토큰  | 메시지 유형 | 
| --- | --- | --- | 
| 확인 코드 | \$1\$1\$1\$1\$1\$1 | 검증, 확인 및 MFA 메시지 | 
| 임시 암호 | \$1\$1\$1\$1\$1\$1 | 암호 분실 및 초대 메시지 | 
| 사용자 이름 | \$1username\$1 | 초대 및 고급 보안 메시지 | 

[위협 방지](cognito-user-pool-settings-threat-protection.md)를 사용하여 사용할 수 있는 자동 응답 중 하나는 Amazon Cognito가 잠재적으로 악의적인 활동을 감지했음을 사용자에게 알리는 것입니다. 고급 보안 템플릿 자리 표시자를 사용하여 다음을 수행할 수 있습니다.
+ IP 주소, 도시, 국가, 로그인 시간 및 디바이스 이름과 같은 이벤트에 대한 특정 세부 정보를 포함합니다. Amazon Cognito 위협 보호는 이러한 세부 정보를 분석할 수 있습니다.
+ 원클릭 링크가 유효한지 확인할 수 있습니다.
+ 이벤트 ID, 피드백 토큰, 사용자 이름을 사용하여 자체 원클릭 링크를 작성합니다.

**참고**  
원클릭 링크를 생성하고 고급 보안 이메일 템플릿에서 `{one-click-link-valid}` 및 `{one-click-link-invalid}` 자리 표시자를 사용하려면 이미 사용자 풀에 대한 도메인이 구성되어 있어야 합니다.

위협 방지는 메시지 템플릿에 삽입할 수 있는 다음과 같은 자리 표시자를 추가합니다. 이러한 자리 표시자는 Amazon Cognito가 위험 수준에 대해 세션이 평가된 사용자에게 보내는 알림인 **적응형 인증 메시지**에 적용됩니다. 이러한 변수로 메시지 템플릿을 구성하려면 Amazon Cognito 콘솔에서 위협 보호의 **전체 함수** 구성을 업데이트하거나 [SetRiskConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html) 요청에 템플릿을 제출하세요.


**고급 보안 템플릿 자리 표시자**  

|  설명  |  토큰  | 
| --- | --- | 
| IP 주소 | \$1ip-address\$1 | 
| City | \$1city\$1 | 
| 국가 | \$1country\$1 | 
| 로그인 시간 | \$1login-time\$1 | 
| 디바이스 이름 | \$1device-name\$1 | 
| 원클릭 링크가 유효합니다. | \$1one-click-link-valid\$1 | 
| 원클릭 링크가 유효하지 않습니다. | \$1one-click-link-invalid\$1 | 
| 이벤트 ID | \$1event-id\$1 | 
| 피드백 토큰 | \$1feedback-token\$1 | 

## 이메일 및 SMS MFA 메시지 사용자 지정
<a name="cognito-user-pool-settings-SMS-message-customization"></a>

[다중 인증(MFA)](user-pool-settings-mfa.md)을 위한 SMS 및 이메일 메시지를 사용자 지정하려면 Amazon Cognito 사용자 풀 콘솔의 **메시지 템플릿** 메뉴에서 **MFA 메시지를** 편집합니다.

**중요**  
사용자 정의 메시지에는 `{####}` 자리 표시자가 포함되어야 합니다. 이 자리 표시자는 메시지를 보내기 전에 인증 코드로 대체됩니다.

Amazon Cognito는 인증 코드를 포함한 SMS 메시지의 최대 길이를 UTF-8 문자 140자로 설정합니다.

### SMS 확인 메시지 사용자 정의
<a name="cognito-user-pool-settings-SMS-verification-message-customization"></a>

전화번호 확인을 위해 SMS 메시지를 사용자 지정하려면 사용자 풀의 **메시지 템플릿** 메뉴에서 **확인 메시지** 템플릿을 편집합니다.

**중요**  
사용자 정의 메시지에는 `{####}` 자리 표시자가 포함되어야 합니다. 이 자리 표시자는 메시지를 보내기 전에 확인 코드로 대체됩니다.

메시지의 최대 길이는 확인 코드를 포함하여 140자(UTF-8)입니다.

## 이메일 확인 메시지 사용자 정의
<a name="cognito-user-pool-settings-email-verification-message-customization"></a>

Amazon Cognito를 사용하여 사용자 풀에 있는 사용자의 이메일 주소를 확인하려면 사용자가 선택할 수 있는 링크가 포함된 이메일 메시지를 사용자에 보내거나 사용자가 입력할 수 있는 코드를 사용자에게 보냅니다.

이메일 주소 인증 메시지의 이메일 제목 및 메시지 콘텐츠를 사용자 지정하려면 사용자 풀의 **메시지 템플릿** 메뉴에서 **확인 메시지** 템플릿을 편집합니다. **확인 메시지** 템플릿을 편집할 때 **인증 유형**의 **코드** 또는 **링크**를 선택할 수 있습니다.

확인 유형으로 **코드**를 선택한 경우 사용자 지정 메시지에 `{####}` 자리 표시자가 포함되어야 합니다. 메시지를 전송할 때 이 자리 표시자는 확인 코드로 대체됩니다.

확인 유형으로 **링크**를 선택한 경우 사용자 지정 메시지에 `{##Verify Your Email##}` 형식의 자리 표시자가 포함되어야 합니다. 예를 들어 `{##Click here##}` 같이 자리 표시자 문자 사이의 텍스트 문자열을 변경할 수 있습니다. 이 자리 표시자는 *이메일 확인(Verify Your Email)*이라는 확인 링크로 대체됩니다.

이메일 확인 메시지에 대한 링크를 클릭하면 다음 예와 같은 URL로 이동합니다.

```
https://<your user pool domain>/confirmUser/?client_id=abcdefg12345678&user_name=emailtest&confirmation_code=123456
```

메시지의 최대 길이는 확인 코드(있는 경우)를 포함하여 20,000자(UTF-8)입니다. 이 메시지에 HTML 태그를 사용하여 내용을 포맷할 수 있습니다.

## 사용자 초대 메시지 사용자 정의
<a name="cognito-user-pool-settings-user-invitation-message-customization"></a>

**메시지 템플릿** 메뉴의 **초대 메시지** 템플릿을 편집하여 Amazon Cognito가 SMS 또는 이메일 메시지를 통해 새 사용자에게 보내는 사용자 초대 메시지를 사용자 정의할 수 있습니다.

**중요**  
사용자 정의 메시지에는 `{username}` 및 `{####}` 자리 표시자가 포함되어야 합니다. Amazon Cognito는 초대 메시지를 보낼 때 이러한 자리 표시자를 사용자의 사용자 이름과 암호로 대체합니다.

SMS 메시지의 최대 길이는 확인 코드를 포함하여 140자(UTF-8)입니다. 이메일 메시지의 최대 길이는 확인 코드를 포함하여 20,000자(UTF-8)입니다. 이메일 메시지에 HTML 태그를 사용하여 내용을 포맷할 수 있습니다.

## 이메일 주소 사용자 정의
<a name="cognito-user-pool-settings-email-address-customization"></a>

기본값으로 Amazon Cognito는 사용자 풀의 사용자에게 **no-reply@verificationemail.com** 주소에서 이메일 메시지를 전송합니다. **no-reply@verificationemail.com** 대신 사용자 정의 FROM 및 REPLY-TO 이메일 주소를 지정할 수 있습니다.

**FROM 및 REPLY-TO 이메일 주소를 사용자 정의하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동하여, [**사용자 풀(User Pools)**]을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택하거나 [사용자 풀을 생성합니다](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. **인증 방법** 메뉴를 선택합니다. [**이메일(Email)**]에서 [**편집(Edit)**]을 선택합니다.

1. **SES 리전(SES Region)**을 선택합니다.

1. 선택한 **SES 리전(SES Region)**의 Amazon SES로 확인한 이메일 주소 목록에서 **발신 이메일 주소(FROM email address)**를 선택합니다. 확인된 도메인의 이메일 주소를 사용하려면 AWS Command Line Interface 또는 AWS API에서 이메일 설정을 구성합니다. 자세한 내용은 *Amazon Simple Email Service 개발자 가이드*에서 [Amazon SES에서 이메일 주소 및 도메인 확인](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-addresses-and-domains.html)을 참조하세요.

1. 선택한 [**SES 리전(SES Region)**]의 구성 집합 목록에서 [**구성 집합(Configuration set)**]을 선택합니다.

1. 이메일 메시지의 친숙한 [**FROM 발신자 이름(FROM sender name)**]을 `John Stiles <johnstiles@example.com>` 포맷으로 입력합니다.

1. 회신 이메일 주소를 사용자 지정하려면 **회신 이메일 주소** 필드에 유효한 이메일 주소를 입력합니다.

## Amazon Cognito가 사용자를 대신하여 (사용자 정의 FROM 이메일 주소에서) Amazon SES 이메일을 전송하도록 권한 부여
<a name="cognito-user-pool-settings-ses-authorization-to-send-email"></a>

기본 주소 대신 사용자 정의 FROM 이메일 주소에서 이메일을 전송하도록 Amazon Cognito를 구성할 수 있습니다. 사용자 정의 주소를 사용하려면 Amazon SES 확인 자격 증명에서 이메일 메시지를 전송할 수 있는 권한을 Amazon Cognito에 부여해야 합니다. 대부분의 경우에 전송 권한 부여 정책을 생성하여 권한을 부여할 수 있습니다. 자세한 내용은 [Amazon Simple Email Service 개발자 가이드](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html)에서 *Amazon SES에서 전송 권한 부여 사용*을 참조하세요.

이메일 메시지에 Amazon SES를 사용하도록 사용자 풀을 구성하면 Amazon Cognito는 계정에 `AWSServiceRoleForAmazonCognitoIdpEmailService` 역할을 생성하여 Amazon SES에 대한 액세스 권한을 부여합니다. `AWSServiceRoleForAmazonCognitoIdpEmailService` 서비스 연결 역할을 사용하는 경우에는 전송 권한 부여 정책이 필요하지 않습니다. 사용자 풀의 기본 이메일 기능 *및* FROM 주소로 확인된 Amazon SES 자격 증명을 둘 다 사용하는 경우에만 전송 권한 부여 정책을 추가해야 합니다.

Amazon Cognito가 생성하는 서비스 연결 역할에 대한 자세한 내용은 [Amazon Cognito에 서비스 연결 역할 사용](using-service-linked-roles.md) 섹션을 참조하세요.

다음 전송 권한 부여 정책 예제는 Amazon Cognito에 Amazon SES 확인 자격 증명을 사용할 수 있는 제한적인 권한을 부여합니다. Amazon Cognito는 `aws:SourceArn` 조건의 사용자 풀과 `aws:SourceAccount` 조건의 계정을 둘 다 대신하는 경우에만 이메일 메시지를 전송할 수 있습니다. 자세한 내용은 *Amazon Simple Email Service 개발자 가이드*에서 [Amazon SES 전송 권한 부여 정책 예제](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policy-examples.html)를 참조하세요.

**참고**  
이 예제에서 "Sid" 값은 명령문을 고유하게 식별하는 임의 문자열입니다. 정책 구문에 대한 자세한 내용은 *Amazon Simple Email Service 개발자 가이드*에서 [Amazon SES 전송 권한 부여 정책](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html)을 참조하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "stmnt1234567891234",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "email.cognito-idp.amazonaws.com"
                ]
            },
            "Action": [
                "SES:SendEmail",
                "SES:SendRawEmail"
            ],
            "Resource": "arn:aws:ses:us-east-1:111122223333:identity/support@example.com",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE"
                }
            }
        }
    ]
}
```

------

드롭다운 메뉴에서 Amazon SES 자격 증명을 선택하면 Amazon Cognito 콘솔이 유사한 정책을 자동으로 추가합니다. CLI 또는 API를 사용하여 사용자 풀을 구성하는 경우 이전 예제와 같이 구성된 정책을 Amazon SES 자격 증명에 연결해야 합니다.

# 관리자로 사용자 계정 생성
<a name="how-to-create-user-accounts"></a>

사용자 풀은 인터넷에 있는 모든 사용자가 애플리케이션의 사용자 프로필에 등록할 수 있는 고객 ID 및 액세스 관리(CIAM) 사용자 디렉터리일 뿐만 아니라, 사용자 프로필을 등록할 수 있는 곳이기도 합니다. 셀프 서비스 가입을 비활성화할 수 있습니다. 이미 고객을 알고 있으며 미리 승인된 고객만 허용하고 싶을 수도 있습니다. [프라이빗 SAML 2.0 또는 OIDC ID 제공업체](cognito-user-pools-identity-federation.md)를 사용하여, [사용자를 가져오거나](cognito-user-pools-import-users.md), [가입 시 사용자를 선별](user-pool-lambda-pre-sign-up.md)하거나, 관리 API 작업을 사용하여 사용자를 생성하여 애플리케이션에 수동 인증 가드레일을 설정할 수 있습니다. 사용자를 관리적으로 생성하는 워크플로는 프로그래밍 방식으로 사용자를 다른 시스템에 등록한 후 프로비저닝하거나, Amazon Cognito 콘솔에서 사례별 또는 테스트 기반으로 할 수 있습니다.

사용자를 관리자로 생성할 때 Amazon Cognito는 사용자를 위한 임시 암호를 설정하고 환영 메시지 또는 초대 메시지를 보냅니다. 초대 메시지의 링크를 따라가 처음으로 로그인하고 암호를 설정하고 계정을 확인할 수 있습니다. 다음 페이지에서는 새 사용자를 생성하고 환영 메시지를 구성하는 방법을 설명합니다. 사용자 풀 API 및 AWS SDK 또는 CDK를 사용한 사용자 생성에 대한 자세한 내용은 [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html)를 참조하세요.

사용자 풀을 생성한 후 AWS Command Line Interface 또는 Amazon Cognito API뿐만 아니라 AWS Management Console를 사용하여 사용자를 생성할 수 있습니다. 사용자 풀에서 새 사용자에 대한 프로파일을 생성하고, SMS 또는 이메일을 통해 사용자에게 가입 지침이 포함된 환영 메시지를 전송할 수 있습니다.

다음은 관리자가 사용자 풀에서 사용자를 관리하는 방법의 몇 가지 예입니다.
+ Amazon Cognito 콘솔 또는 `AdminCreateUser` API 작업을 사용하여 새 사용자 프로필을 생성합니다.
+ 사용자 풀과 앱 클라이언트에서 사용자 이름 및 암호, 암호 없음, 패스키 및 사용자 지정 [인증 흐름](amazon-cognito-user-pools-authentication-flow-methods.md)을 사용할 수 있습니다.
+ 사용자 속성 값을 설정합니다.
+ 사용자 지정 속성을 생성합니다.
+ `AdminCreateUser` API 요청에서 변경할 수 없는 [사용자 지정 속성](user-pool-settings-attributes.md#user-pool-settings-custom-attributes)의 값을 설정합니다. 이 기능은 Amazon Cognito 콘솔에서 사용할 수 없습니다.
+ 임시 암호를 지정하거나, 암호 없이 사용자를 생성하거나, Amazon Cognito가 암호를 자동으로 생성하도록 허용합니다.
+ 새 사용자를 생성하고 계정을 자동으로 확인하거나, 이메일 주소를 확인하거나, 전화번호를 확인합니다.
+ 사용자 지정 메시지, 사용자 지정 SMS 발신자 및 사용자 지정 이메일 발신자와 같은 AWS Management Console 또는 Lambda 트리거를 통해 새 사용자의 사용자 지정 SMS 및 [이메일](user-pool-lambda-custom-email-sender.md) 초대 [메시지를](user-pool-lambda-custom-message.md) 지정합니다. [사용자 지정 SMS 발신자 Lambda 트리거](user-pool-lambda-custom-sms-sender.md) 
+ 초대 메시지가 SMS, 이메일 또는 둘 다를 통해 전송되는지 여부를 지정합니다.
+ `AdminCreateUser` API를 호출하고 `RESEND` 파라미터에 대해 `MessageAction`를 지정하여 기존 사용자에게 환영 메시지를 재전송합니다.
+ 사용자가 생성될 때 초대 메시지의 전송을 [제한](#admincreateuserwalkthrough-step-invitationmessage)합니다.
+ 새로운 사용자 계정에 대해 최대 90일의 만료 기간을 지정합니다.
+ 사용자가 직접 가입하거나 관리자가 새 사용자만 추가하도록 합니다.

관리자는 서버 측 애플리케이션의 AWS 자격 증명으로 사용자를 로그인할 수도 있습니다. 자세한 내용은 [API 및 SDK 인증을 위한 권한 부여 모델](authentication-flows-public-server-side.md) 단원을 참조하십시오.

## 사용자 인증 흐름 및 사용자 생성
<a name="how-to-create-user-accounts-flows"></a>

사용자의 관리 생성에는 사용자 풀의 구성에 따라 다른 옵션이 있습니다. *인증 흐름* 또는 사용자가 로그인 및 MFA에 사용할 수 있는 메서드는 사용자를 생성하는 방법과 사용자에게 보내는 메시지를 변경할 수 있습니다. 다음은 사용자 풀에서 사용할 수 있는 몇 가지 인증 흐름입니다.
+ 사용자 이름 및 암호
+ 패스키
+ 타사 IdP로 로그인
+ 이메일 및 SMS 일회용 암호(OTP)를 사용한 암호 없음
+ 이메일, SMS 및 인증자 앱 OTP 사용한 다중 인증
+ Lambda 트리거를 사용한 사용자 지정 인증

이러한 로그인 요소를 구성하는 방법에 대한 자세한 내용은 [Amazon Cognito 사용자 풀로 인증](authentication.md) 섹션을 참조하세요.

## 암호 없이 사용자 생성
<a name="how-to-create-user-accounts-thingstoknow-passwordless"></a>

사용자 풀에 암호 없는 로그인을 활성화한 경우 암호 없이 사용자를 생성할 수 있습니다. 암호 없이 사용자를 생성하려면 사용 가능한 암호 없는 로그인 요소의 속성 값을 제공해야 합니다. 예를 들어 사용자 풀에서 이메일 OTP 암호 없는 로그인을 사용할 수 있는 경우 암호가 없고 이메일 주소 속성이 있는 사용자를 생성할 수 있습니다. 새 사용자가 사용할 수 있는 유일한 인증 흐름에 암호 또는 사용자 이름 암호와 같은 암호가 필요한 경우 각 새 사용자에 대한 임시 암호를 생성하거나 생성해야 합니다.

**암호 없이 새 사용자를 생성하려면**
+ Amazon Cognito 콘솔에서 **암호 설정 안 함**을 선택합니다.
+ `AdminCreateUser` API 요청의 `TemporaryPassword` 파라미터를 생략하거나 비워 둡니다.

**암호가 없는 사용자는 자동으로 확인됩니다.**  
일반적으로 신규 사용자는 임시 암호를 받고 생성할 때 `FORCE_CHANGE_PASSWORD` 상태로 전환됩니다. 암호 없이 사용자를 생성하면 즉시 `CONFIRMED` 상태가 됩니다. `CONFIRMED` 상태의 이러한 사용자에게는 확인 코드를 다시 보낼 수 없습니다.

**암호가 없는 사용자의 경우 초대 메시지가 변경됩니다.**  
기본적으로 Amazon Cognito는 새 사용자에게 `Your username is {userName} and your password is {####}.` 암호 없이 사용자를 생성할 때 `Your username is {userName}.` 사용자에 대한 암호 설정 여부를 반영하도록 초대 메시지를 사용자 지정하라고 표시하는 [초대](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-user-invitation-message-customization) 메시지를 보냅니다. `{####}` 암호 없는 인증 모델에서 암호 변수를 생략합니다.

**암호 없는 요소를 사용할 수 있는 경우 암호를 자동 생성할 수 없습니다.**  
이메일 또는 전화 OTP 암호 없는 로그인을 지원하도록 사용자 풀을 구성한 경우 암호를 자동으로 생성할 수 없습니다. 암호를 갖게 될 각 사용자에 대해 프로필을 생성할 때 임시 암호를 설정해야 합니다.

**암호 없는 사용자는 필요한 모든 속성에 대한 값을 가져야 합니다.**  
암호 *없이* 사용자를 생성하면 사용자가 사용자 풀에서 필수로 표시한 모든 속성에 대한 값을 제공하는 경우에만 요청이 성공합니다. 이는 OTP 전송에 필요한 전화번호 및 이메일 속성뿐만 아니라 필요한 모든 속성에 적용됩니다.

## 나중에 필수 속성 값을 제공할 사용자 생성
<a name="how-to-create-user-accounts-thingstoknow-password-restrictions"></a>

사용자 풀에 속성이 필요하지만 애플리케이션에서 사용자 상호 작용 중에 사용자를 관리 방식으로 생성한 후 해당 속성을 수집해야 할 수 있습니다. 관리자는 *임시 암호로* 사용자를 생성할 때 필요한 속성의 값을 생략할 수 있습니다. 암호 없는 사용자의 필수 속성 값은 생략할 수 없습니다.

필수 속성 및 임시 암호 값이 누락된 사용자는 처음 로그인할 때 [NEW\$1PASSWORD\$1REQUIRED](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html#CognitoUserPools-RespondToAuthChallenge-request-ChallengeResponses) 문제를 받습니다. 그런 다음 `requiredAttributes` 파라미터에서 누락된 필수 속성에 대한 값을 제공할 수 있습니다. 필요한 모든 속성을 [변경할 수 있는](user-pool-settings-attributes.md#user-pool-settings-custom-attributes) 경우에만 암호와 필수 속성 없이 사용자를 생성할 수 있습니다. 사용자는 로그인하는 앱 클라이언트에서 필수 속성을 [쓸 수 있는](user-pool-settings-client-apps.md#cognito-user-pools-app-idp-settings-about) 경우에만 `NEW_PASSWORD_REQUIRED` 문제 및 필수 속성 값으로 로그인을 완료할 수 있습니다.

관리자가 생성한 사용자의 영구 암호를 설정하면 상태가 `CONFIRMED`로 변경되고 사용자 풀은 처음 로그인할 때 새 암호 *또는* 필수 속성을 입력하라는 메시지를 표시하지 않습니다.

## 에서 새 사용자 생성 AWS Management Console
<a name="creating-a-new-user-using-the-console"></a>

Amazon Cognito 콘솔을 사용하여 사용자 암호 요구 사항을 설정하고, 사용자에게 전송되는 초대 및 확인 메시지를 구성하고, 새 사용자를 추가할 수 있습니다.

### 암호 정책 설정 및 자체 등록 사용
<a name="set-user-password-policy"></a>

최소 암호 복잡성에 대한 설정과 사용자가 퍼블릭 API를 사용하여 사용자 풀에 가입할 수 있는지 여부를 구성할 수 있습니다.

**암호 정책 구성**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동하여, [**사용자 풀(User Pools)**]을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택하거나 [사용자 풀을 생성합니다](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. **인증 방법** 메뉴를 선택하고 **암호 정책**을 찾습니다. **편집**을 선택합니다.

1. [**암호 정책 모드(Password policy mode)**]로 [**사용자 정의(Custom)**]를 선택합니다.

1. [**암호 최소 길이(Password minimum length)**]를 선택합니다. 암호 길이 요구 사항에 대한 제한은 [사용자 풀 리소스 할당량](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html#limits-hard)을 참조하세요.

1. [**암호 복잡성(Password complexity)**] 요구 사항을 선택합니다.

1. 관리자가 설정한 암호가 유효한 기간을 선택합니다.

1. **변경 사항 저장(Save changes)**을 선택합니다.

**셀프 서비스 가입 허용**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동하여, [**사용자 풀(User Pools)**]을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택하거나 [사용자 풀을 생성합니다](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. **가입** 메뉴를 선택하고 **셀프 서비스 가입**을 찾습니다. [**편집(Edit)**]을 선택합니다.

1. **자체 등록 사용(Enable self-registration)** 여부를 선택합니다. 자체 등록은 일반적으로 클라이언트 보안 암호 또는 AWS Identity and Access Management (IAM) API 자격 증명을 배포하지 않고 사용자 풀에 새 사용자를 등록해야 하는 퍼블릭 앱 클라이언트에서 사용됩니다.
**자체 등록 사용 중지**  
자체 등록을 사용하지 않는 경우 IAM API 자격 증명을 사용하는 관리 API 작업 또는 페더레이션 공급자를 사용한 로그인을 통해 새 사용자를 생성해야 합니다.

1. **변경 사항 저장(Save changes)**을 선택합니다.

### 이메일 및 SMS 메시지 사용자 정의
<a name="creating-a-new-user-customize-messages"></a>

**사용자 메시지 사용자 정의**

사용자를 로그인하도록 초대하거나, 사용자가 사용자 계정에 가입하거나, 사용자가 로그인하고 멀티 팩터 인증(MFA) 메시지가 표시될 때 Amazon Cognito가 사용자에게 보내는 메시지를 사용자 정의할 수 있습니다.
**참고**  
[**초대 메시지(Invitation message)**]는 사용자 풀에 사용자를 생성하고 로그인하도록 초대할 때 전송됩니다. Amazon Cognito는 사용자의 이메일 주소나 전화 번호로 초기 로그인 정보를 전송합니다.  
[**확인 메시지(Verification message)**]는 사용자가 사용자 풀의 사용자 계정에 가입할 때 전송됩니다. Amazon Cognito가 사용자에게 코드를 전송합니다. 사용자는 Amazon Cognito에 코드를 제공할 때 연락처 정보를 검증하고 로그인 계정을 확인합니다. 확인 코드는 24시간 동안 유효합니다.  
[**MFA 메시지(MFA message)**]는 사용자 풀에서 SMS MFA를 사용하도록 설정하고, SMS MFA를 구성한 사용자가 로그인하고 MFA 메시지가 표시될 때 전송됩니다.

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동하여, [**사용자 풀(User Pools)**]을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택하거나 [사용자 풀을 생성합니다](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. **메시지 템플릿** 메뉴를 선택하고 **확인 메시지**, **초대 메시지** 또는 **MFA 메시지**를 선택한 다음 **편집**을 선택합니다.

1. 선택한 메시지 유형에 맞게 메시지를 사용자 정의합니다.
**참고**  
메시지를 사용자 정의할 때 메시지 템플릿의 모든 변수를 포함해야 합니다. 변수(예: **\$1\$1\$1\$1\$1\$1**)를 포함하지 않으면 사용자에게 메시지 작업을 완료하기에 충분한 정보가 없습니다.  
자세한 내용은 [메시지 템플릿](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-message-templates.html)을 참조하세요.

1. 

   1. [**확인 메시지(Verification messages)**]

      1. [**이메일(Email)**] 메시지에 대한 [**확인 유형(Verification type)**]을 선택합니다. [**코드(Code)**] 확인은 사용자가 입력해야 하는 숫자 코드를 전송합니다. [**링크(Link)**] 확인은 사용자가 연락처 정보를 확인하기 위해 클릭할 수 있는 링크를 전송합니다. [**링크(Link)**] 메시지에 대한 변수의 텍스트는 하이퍼링크 텍스트로 표시됩니다. 예를 들어 \$1\$1\$1Click here\$1\$1\$1 변수를 사용하는 메시지 템플릿은 이메일 메시지에 [Click here]()로 표시됩니다.

      1. [**이메일(Email)**] 메시지의 [**이메일 제목(Email subject)**]을 입력합니다.

      1. [**이메일(Email)**] 메시지용 사용자 정의 [**이메일 메시지(Email message)**] 템플릿을 입력합니다. HTML을 사용하여 이 템플릿을 사용자 정의할 수 있습니다.

      1. [**SMS**] 메시지용 사용자 정의 [**SMS 메시지(SMS message)**] 템플릿을 입력합니다.

      1. **변경 사항 저장(Save changes)**을 선택합니다.

   1. [**초대 메시지(Invitation messages)**]

      1. [**이메일(Email)**] 메시지의 [**이메일 제목(Email subject)**]을 입력합니다.

      1. [**이메일(Email)**] 메시지용 사용자 정의 [**이메일 메시지(Email message)**] 템플릿을 입력합니다. HTML을 사용하여 이 템플릿을 사용자 정의할 수 있습니다.

      1. [**SMS**] 메시지용 사용자 정의 [**SMS 메시지(SMS message)**] 템플릿을 입력합니다.

      1. **변경 사항 저장(Save changes)**을 선택합니다.

   1. [**MFA 메시지(MFA messages)**]

      1. [**SMS**] 메시지용 사용자 정의 [**SMS 메시지(SMS message)**] 템플릿을 입력합니다.

      1. **변경 사항 저장(Save changes)**을 선택합니다.

### 사용자 생성
<a name="creating-a-new-user-using-the-users-tab"></a>

**사용자 생성**

Amazon Cognito 콘솔에서 사용자 풀의 새 사용자를 생성할 수 있습니다. 일반적으로 사용자는 암호를 설정한 후에 로그인할 수 있습니다. 이메일 주소를 사용하여 로그인하려면 사용자가 `email` 속성을 확인해야 합니다. 전화 번호를 사용하여 로그인하려면 사용자가 `phone_number` 속성을 확인해야 합니다. 관리자로서 계정을 확인하려면 AWS CLI 또는 API를 사용하거나 페더레이션 자격 증명 공급자를 사용하여 사용자 프로필을 생성할 수도 있습니다. 자세한 내용은 [Amazon Cognito API 참조](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/)를 참조하세요.

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동하여, [**사용자 풀(User Pools)**]을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택하거나 [사용자 풀을 생성합니다](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. **사용자** 메뉴를 선택한 다음 **사용자 생성**을 선택합니다.

1. 사용자 풀에 대한 암호 요구 사항, 사용 가능한 계정 복구 방법 및 별칭 속성에 대한 지침은 **사용자 풀 로그인 및 보안 요구 사항(User pool sign-in and security requirements)**을 검토합니다.

1. <a name="admincreateuserwalkthrough-step-invitationmessage"></a>**초청 메시지(Invitation message)**를 보내는 방식을 선택합니다. SMS 메시지와 이메일 메시지 중 하나 또는 둘 다를 선택합니다. 초대 메시지를 표시하지 않으려면 **초대를 보내지 않음**을 선택합니다.
**참고**  
초청 메시지를 보내려면 먼저 사용자 풀의 **인증 방법** 메뉴에서 Amazon Simple Notification Service 및 Amazon Simple Email Service를 사용하여 발신자 및 AWS 리전 을 구성합니다. 수신자 메시지 및 데이터 요금이 적용됩니다. Amazon SES에서 이메일 메시지를 별도로 청구하며, Amazon SNS에서 SMS 메시지를 별도로 청구합니다.

1. 새 사용자의 **사용자 이름(Username)**을 선택합니다.

1. 사용자에 대해 **암호 생성(Create a password)**을 직접 수행할지 아니면 Amazon Cognito에서 **암호 생성(Generate a password)**을 수행하도록 할지를 선택합니다. 사용자 풀에서 [암호 없는 로그인](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)을 사용할 수 있는 경우 암호를 생성하는 옵션을 사용할 수 없습니다. 임시 암호는 사용자 풀 암호 정책을 준수해야 합니다.

1. **생성(Create)**을 선택합니다.

1. **사용자** 메뉴를 선택하고 사용자에 대한 **사용자 이름** 항목을 선택합니다. **사용자 속성(User attributes)** 및 **그룹 멤버십(Group memberships)**을 추가하고 편집합니다. **사용자 이벤트 기록(User event history)**을 검토합니다.

# 사용자 풀에 그룹 추가
<a name="cognito-user-pools-user-groups"></a>

Amazon Cognito 사용자 풀에서 그룹에 대한 지원을 통해 그룹을 생성하고 관리하고, 사용자를 그룹에 추가하고, 그룹에서 사용자를 제거할 수 있습니다. 그룹을 통해 사용자 모음을 생성하여 권한을 관리하거나 다른 유형의 사용자를 표시합니다. 그룹에 AWS Identity and Access Management (IAM) 역할을 할당하여 그룹 구성원에 대한 권한을 정의할 수 있습니다.

그룹을 사용하여 사용자 풀에서 사용자 모음을 생성할 수 있습니다. 이 작업은 해당 사용자에 대한 권한을 설정하여 수행되는 경우가 많습니다. 예를 들어, 웹 사이트 및 앱의 독자, 기고자 및 편집자에 대해 별도의 사용자 그룹을 생성할 수 있습니다. 그룹과 연관된 IAM 역할을 사용하면 Amazon S3에 기고자만 콘텐츠를 넣을 수 있으며, 편집자만 Amazon API Gateway의 API를 통해 콘텐츠를 게시할 수 있도록 다른 그룹에 대해 서로 다른 권한을 설정할 수도 있습니다.

Amazon Cognito는 사용자 풀에 추가하는 각 OIDC, SAMl 및 소셜 [ID 제공업체](cognito-user-pools-identity-federation.md#cognito-user-pools-identity-federation-how-it-works)(idP)에 대한 사용자 그룹을 생성합니다. 그룹 이름은 `us-east-1_EXAMPLE_MYSSO` 또는 `us-east-1_EXAMPLE_Google`과 같은 `[user pool ID]_[IdP name]` 형식입니다. 자동으로 생성된 각 고유 IdP 사용자 프로필이 이 그룹에 자동으로 추가됩니다. [연결된 사용자](cognito-user-pools-identity-federation-consolidate-users.md)는 이 그룹에 자동으로 추가되지 않지만 별도의 프로세스에서 그룹에 프로필을 추가할 수 있습니다.

 AWS Management Console, APIs 및 CLI에서 사용자 풀의 그룹을 생성하고 관리할 수 있습니다. 개발자(자 AWS 격 증명 사용)는 사용자 풀의 그룹을 생성, 읽기, 업데이트, 삭제 및 나열할 수 있습니다. 그룹에서 사용자를 추가하고 제거할 수도 있습니다.

사용자 풀 내에서 그룹 사용에 대한 추가 비용은 없습니다. 자세한 내용은 [Amazon Cognito 요금](https://aws.amazon.com/cognito/pricing/)을 참조하세요.

## 그룹에 IAM 역할 할당
<a name="assigning-iam-roles-to-groups"></a>

그룹을 사용하면 IAM 역할을 사용하는 리소스에 대한 권한을 제어할 수 있습니다. IAM 역할에는 신뢰 정책 및 권한 정책이 포함됩니다. 역할 [신뢰](https://docs.aws.amazon.com/cognito/latest/developerguide/role-trust-and-permissions.html) 정책은 역할을 사용할 수 있는 사용자를 지정합니다. [권한](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies) 정책은 그룹 구성원이 액세스할 수 있는 작업과 리소스를 지정합니다. IAM 역할을 생성하는 경우 그룹 사용자가 역할을 수임할 수 있도록 역할 트러스트 정책을 설정합니다. 역할 권한 정책에서 그룹에 부여할 권한을 지정합니다.

Amazon Cognito에서 그룹을 생성할 때 역할의 [ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)을 제공하여 IAM 역할을 지정합니다. 그룹 구성원이 Amazon Cognito를 사용하여 로그인하면 자격 증명 풀에서 임시 자격 증명을 받을 수 있습니다. 해당 권한은 연결된 IAM 역할에 따라 결정됩니다.

개별 사용자가 여러 그룹에 있을 수 있습니다. 사용자가 여러 그룹에 있는 경우 개발자는 다음과 같이 IAM 역할을 자동으로 선택하기 위한 옵션을 보유합니다.
+ 각 그룹에 우선 순위 값을 할당할 수 있습니다. 우선 순위가 좋은(낮은) 그룹이 선택되고 이와 연관된 IAM 역할이 적용됩니다.
+ 자격 증명 풀을 통해 사용자에 대한 AWS 자격 증명을 요청할 경우 [GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html) `CustomRoleARN` 파라미터에서 역할 ARN을 지정하여 사용 가능한 역할 중에서 앱을 선택할 수도 있습니다. 지정된 IAM 역할은 사용자에 대해 사용 가능한 역할과 일치해야 합니다.

## 그룹에 우선 순위 값 할당
<a name="assigning-precedence-values-to-groups"></a>

사용자는 둘 이상의 그룹에 속할 수 있습니다. 사용자의 액세스 및 ID 토큰에 있는 `cognito:groups` 클레임에는 사용자가 속한 모든 그룹의 목록이 포함되어 있습니다. `cognito:roles` 클레임에는 그룹에 해당하는 역할 목록이 포함되어 있습니다.

사용자가 둘 이상의 그룹에 속할 수 있으므로 각 그룹에 우선 순위가 할당될 수 있습니다. 우선 순위는 사용자 풀에서 사용자가 속한 다른 그룹을 기준으로 이 그룹의 우선 순위를 지정하는, 음수가 아닌 숫자입니다. 0은 가장 높은 우선 순위 값입니다. 우선 순위 값이 낮은 그룹은 우선 순위 값이 높거나 null인 그룹보다 우선합니다. 사용자가 둘 이상의 그룹에 속해 있는 경우 우선 순위 값이 가장 낮은 그룹의 IAM 역할이 사용자 ID 토큰의 `cognito:preferred_role` 클레임에 적용됩니다.

두 개의 그룹에 동일한 우선 순위 값이 있을 수 있습니다. 이러한 경우 두 그룹 모두 우선 적용되지 않습니다. 우선 순위 값이 동일한 두 그룹에 동일한 역할 ARN이 있는 경우 해당 역할은 각 그룹의 사용자에 대한 ID 토큰의 `cognito:preferred_role` 클레임에 사용됩니다. 두 그룹의 역할 ARN이 서로 다른 경우 `cognito:preferred_role` 클레임은 사용자의 ID 토큰에서 설정되지 않습니다.

## 그룹을 사용하여 Amazon API Gateway로 권한 제어
<a name="using-groups-to-control-permission-with-amazon-api-gateway"></a>

Amazon API Gateway를 통해 사용자 풀에서 그룹을 사용하여 권한을 제어할 수 있습니다. 사용자가 속한 그룹은 `cognito:groups` 클레임에 있는 사용자 풀의 ID 토큰과 액세스 토큰에 모두 포함됩니다. 요청과 함께 ID 또는 액세스 토큰을 Amazon API Gateway에 제출하고 REST API에 Amazon Cognito 사용자 풀 권한 부여자를 사용할 수 있습니다. 자세한 내용은 [API Gateway 개발자 가이드](https://docs.aws.amazon.com/apigateway/latest/developerguide/)에서 [Amazon Cognito 사용자 풀을 권한 부여자로 사용하여 REST API에 대한 액세스 제어](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html)를 참조하세요.

사용자 정의 JWT 권한 부여자를 사용하여 Amazon API Gateway HTTP API에 대한 액세스 권한을 부여할 수도 있습니다. 자세한 내용은 [API Gateway 개발자 가이드](https://docs.aws.amazon.com/apigateway/latest/developerguide/)에서 [JWT 권한 부여자를 사용하여 HTTP API에 대한 액세스 제어](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-jwt-authorizer.html)를 참조하세요.

## 그룹에 대한 제한 사항
<a name="user-pool-user-groups-limitations"></a>

사용자 그룹에 다음 제한이 적용됩니다.
+ 생성할 수 있는 그룹 수는 [Amazon Cognito 서비스 할당량](quotas.md)에 따라 제한됩니다.
+ 그룹은 중첩될 수 없습니다.
+ 그룹에서 사용자를 검색할 수 없습니다.
+ 이름으로 그룹을 검색할 수 없지만 그룹을 나열할 수 있습니다.

## 에서 새 그룹 생성 AWS Management Console
<a name="creating-a-new-group-using-the-console"></a>

새 그룹을 생성하려면 다음 절차를 따르세요.

**새 그룹을 생성하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **그룹** 메뉴를 선택한 다음 **그룹 생성**을 선택합니다.

1. [**그룹 생성(Create a group)**] 페이지의 [**그룹 이름(Group name)**]에 새 그룹의 친숙한 이름을 입력합니다.

1. 다음 필드를 사용하여 이 그룹에 대한 추가 정보를 선택적으로 제공할 수 있습니다.
   + [**설명(Description)**] - 새 그룹의 용도에 대한 세부 정보를 입력합니다.
   + [**우선 순위(Precedence)**] - Amazon Cognito는 우선 순위가 더 낮은 소속 그룹을 기준으로 지정된 사용자의 모든 그룹 권한을 평가하고 적용합니다. 우선 순위가 더 낮은 그룹이 선택되고 연결된 IAM 역할이 적용됩니다. 자세한 내용은 [그룹에 우선 순위 값 할당](#assigning-precedence-values-to-groups) 단원을 참조하십시오.
   + [**IAM 역할(IAM role)**] - 리소스에 대한 권한을 제어해야 하는 경우 그룹에 IAM 역할을 할당할 수 있습니다. 사용자 풀을 자격 증명 풀과 통합한 경우 **IAM 역할** 설정은 자격 증명 풀이 토큰에서 역할을 선택하도록 구성된 경우 사용자의 ID 토큰에 할당될 역할을 결정합니다. 자세한 내용은 [그룹에 IAM 역할 할당](#assigning-iam-roles-to-groups) 단원을 참조하십시오.
   + [**이 그룹에 사용자 추가(Add users to this group)**] - 그룹이 생성된 후 기존 사용자를 이 그룹의 구성원으로 추가합니다.

1. [**생성(Create)**]을 선택하여 확인합니다.

# 사용자 계정 관리 및 검색
<a name="how-to-manage-user-accounts"></a>

사용자 풀에는 수백만 명의 사용자가 포함될 수 있습니다. 이 크기의 데이터세트를 사용하는 것은 관리자에게 어려운 일입니다. Amazon Cognito에는 사용자 프로필을 찾고 수정할 수 있는 도구가 있습니다. 사용자를 찾는 가장 좋은 방법은 Amazon Cognito 콘솔의 **사용자** 메뉴와 [ListUsers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html)를 사용하는 것입니다. 사용자에 대한 정보를 검색하는 방법 중에서 [AdminGetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetUser.html)와 같이 비용에 영향이 없는 옵션은 다음과 같습니다.

가이드의 이 섹션에는 사용자 풀에서 사용자 프로필을 찾고 업데이트하는 방법에 대한 정보가 나와 있습니다.

## 사용자 속성 보기
<a name="manage-user-accounts-viewing-user-attributes"></a>

Amazon Cognito 콘솔에서 사용자 속성을 보려면 다음 절차를 따르세요.

**사용자 속성을 보려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **사용자** 메뉴를 선택하고 목록에서 사용자를 선택합니다.

1. 사용자 세부 정보 페이지의 [**사용자 속성(User attributes)**]에서 사용자와 연결된 속성을 볼 수 있습니다.

## 사용자 암호 재설정
<a name="manage-user-accounts-reset-user-password"></a>

Amazon Cognito 콘솔에서 사용자 암호를 재설정하려면 다음 절차를 따르세요.

**사용자 암호를 재설정하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **사용자** 메뉴를 선택하고 목록에서 사용자를 선택합니다.

1. 사용자 세부 정보 페이지에서 [**작업(Actions)**], [**암호 재설정(Reset password)**]을 차례로 선택합니다.

1. [**암호 재설정(Reset password)**] 대화 상자에서 정보를 검토한 다음, 준비가 되면 [**재설정(Reset)**]을 선택합니다.

   이 작업으로 인해 사용자에게 확인 코드가 즉시 전송되며 사용자 상태가 `RESET_REQUIRED`로 변경되어 사용자의 현재 암호를 사용할 수 없게 됩니다. [**암호 재설정(Reset password)**] 코드는 1시간 동안 유효합니다.

## 사용자 계정 활성화, 비활성화 및 삭제
<a name="manage-user-accounts-enable-disable"></a>

사용하지 않는 사용자 프로필을 삭제하거나 일시적으로 액세스를 차단하려면 비활성화할 수 있습니다. 사용자는 자신의 계정을 삭제할 수 있지만 사용자 풀 관리자만 사용자 계정을 활성화 및 비활성화할 수 있습니다.

**삭제의 영향**  
사용자는 삭제된 사용자 계정으로 로그인할 수 없으며 액세스 권한을 다시 얻으려면 다시 가입하거나 생성해야 합니다.

**계정 비활성화의 영향**  
사용자 계정을 비활성화하면 Amazon Cognito는 인증된 모든 세션을 자동으로 무효화하고, 로그인을 위해 사용자 계정을 비활성화하고, [액세스 및 새로 고침 토큰을 취소합니다](token-revocation.md). Amazon Cognito는 사용자가 비활성화한 계정에 로그인하려고 할 때 `User is not enabled` 메시지와 함께 `invalid_request` 오류를 반환합니다. 이 동작은 앱 클라이언트에 대한 [사용자 존재 공개 설정](cognito-user-pool-managing-errors.md)에 따라 변경되지 않습니다. 로컬 사용자 계정과 페더레이션 사용자 계정의 로컬 프로필을 비활성화할 수 있습니다. 사용자가 관리형 로그인 또는 클래식 호스팅 UI로 로그인하면 계정을 비활성화한 다음 인증된 세션을 유지 관리하는 브라우저 쿠키로 다시 로그인하려고 하면 Amazon Cognito가 사용자를 로그인 페이지로 리디렉션합니다.

**계정 활성화의 영향**  
사용자는 계정을 활성화한 후 즉시 계정에 로그인할 수 있습니다. 사용자 계정은 기본적으로 활성화되어 있습니다. 사용자의 속성과 암호는 계정이 비활성화되기 전과 동일하게 유지됩니다. 사용자 계정을 비활성화했든 새로 고침 토큰을 별도로 취소했든 상관없이 애플리케이션이 취소한 토큰은 토큰을 소유한 사용자 계정을 활성화한 후에도 유효하지 않습니다.

------
#### [ Delete a user account (console) ]

**사용자 계정을 삭제하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **사용자** 메뉴를 선택하고 목록에서 사용자의 사용자 이름 옆에 있는 라디오 버튼을 선택합니다.

1. **삭제**를 선택합니다.

1. **사용자 액세스 권한 비활성화**를 선택합니다.

1. **삭제**를 선택합니다.

------
#### [ Delete a user account (API) ]

사용자는 셀프 서비스 액세스 토큰으로 인증된 [DeleteUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUser.html) API 작업을 사용하여 계정을 삭제할 수 있습니다. 다음은 `DeleteUser` 요청 본문의 예입니다.

```
{
   "AccessToken": "eyJra456defEXAMPLE"
}
```

관리자는 IAM 인증 [AdminDeleteUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDeleteUser.html) API 작업을 사용하여 사용자 계정을 삭제할 수 있습니다. 다음은 `AdminDeleteUser` 요청 본문의 예입니다.

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------
#### [ Disable a user account (console) ]

**사용자 계정을 비활성화하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **사용자** 메뉴를 선택하고 목록에서 사용자의 사용자 이름을 선택합니다.

1. 사용자 세부 정보 페이지에서 **작업**, **사용자 액세스 비활성화**를 선택합니다.

1. 생성하는 대화 상자에서 **비활성화**를 선택합니다.

------
#### [ Disable a user account (API) ]

관리자는 IAM 인증 [AdminDisableUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDisableUser.html) API 작업을 사용하여 사용자 계정을 비활성화할 수 있습니다. 다음은 `AdminDisableUser` 요청 본문의 예입니다.

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------
#### [ Enable a user account (console) ]

**사용자 계정을 활성화하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **사용자** 메뉴를 선택하고 목록에서 사용자의 사용자 이름을 선택합니다.

1. 사용자 세부 정보 페이지에서 **작업**, **사용자 액세스 활성화**를 선택합니다.

1. 생성하는 대화 상자에서 **활성화**를 선택합니다.

------
#### [ Enable a user account (API) ]

관리자는 IAM 인증 [AdminEnableUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminEnableUser.html) API 작업을 사용하여 사용자 계정을 활성화할 수 있습니다. 다음은 `AdminEnableUser` 요청 본문의 예입니다.

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------

## 사용자 속성 검색
<a name="manage-user-accounts-searching-user-attributes"></a>

사용자 풀을 이미 생성한 경우 AWS Management Console의 [**사용자(Users)**] 패널에서 검색할 수 있습니다. **Filter** 파라미터를 받는 Amazon Cognito [ListUsers API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html)를 사용할 수도 있습니다.

다음 표준 속성 중 하나를 검색할 수 있습니다. 사용자 지정 속성은 검색할 수 없습니다.
+ username(대/소문자 구분)
+ email
+ phone\$1number
+ name
+ given\$1name
+ family\$1name
+ preferred\$1username
+ cognito:user\$1status(콘솔에서 **상태**라고 함)(대/소문자 구분)
+ status(콘솔에서 **활성**이라고 함)(대/소문자 구분)
+ sub

**참고**  
클라이언트 측 필터를 사용하여 사용자를 나열할 수도 있습니다. 서버 측 필터는 1개 이하의 속성을 일치시킵니다. 고급 검색의 경우 AWS Command Line Interface에서 `list-users` 작업의 `--query` 파라미터에 클라이언트 측 필터를 사용합니다. 클라이언트 측 필터를 사용하는 경우 ListUsers는 0명 이상의 사용자를 페이지가 매겨진 목록으로 반환합니다. 결과가 0인 여러 페이지를 연속으로 받을 수 있습니다. Null 페이지 매김 토큰 값을 받을 때까지 반환되는 각 페이지 매김 토큰으로 쿼리를 반복한 다음, 결합된 결과를 검토합니다.  
서버 측 및 클라이언트 측 필터링에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서의 [출력 필터링을 참조하세요 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html).

## 를 사용하여 사용자 검색 AWS Management Console
<a name="cognito-user-pools-manage-user-accounts-searching-for-users-using-console"></a>

사용자 풀을 이미 생성한 경우 AWS Management Console의 **사용자(Users)** 패널에서 검색할 수 있습니다.

AWS Management Console 검색은 항상 접두사("starts with") 검색입니다.

**Amazon Cognito 콘솔에서 사용자를 검색하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 자격 AWS 증명을 입력하라는 메시지가 표시될 수 있습니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **사용자** 메뉴를 선택하고 검색 필드에 사용자 이름을 입력합니다. 일부 속성 값은 대/소문자를 구분합니다(예: [**사용자 이름(User name)**]).

   검색 필터를 조정하여 다른 사용자 속성(예: [**이메일(Email)**], [**전화 번호(Phone number)**] 또는 [**성(Last name)**])으로 범위를 좁혀 사용자를 찾을 수도 있습니다.

## `ListUsers` API를 사용하여 사용자 검색
<a name="cognito-user-pools-searching-for-users-using-listusers-api"></a>

 앱에서 사용자를 검색하려면 Amazon Cognito [ListUsers API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html)를 사용합니다. 이 API는 다음 파라미터를 사용합니다.
+  `AttributesToGet`: 문자열의 어레이입니다. 여기에서 각 문자열은 검색 결과에서 각 사용자에 대해 반환될 사용자 속성의 이름입니다. 모든 속성을 검색하려면 `AttributesToGet` 파라미터를 포함하거나 리터럴 문자열 `null`의 값으로 `AttributesToGet`을 요청하지 마세요.
+  `Filter`: "`AttributeName` `Filter-Type` "`AttributeValue`"" 양식의 필터 문자열입니다. 필터 문자열 내의 인용 부호는 백슬래시(`\`) 문자를 사용하여 이스케이프되어야 합니다. 예를 들어 `"family_name = \"Reddy\""`입니다. 필터 문자열이 비어 있는 경우 `ListUsers`는 사용자 풀에서 모든 사용자를 반환합니다.
  +  `AttributeName`: 검색할 속성의 이름입니다. 힌 번에 속성 하나만 검색할 수 있습니다.
**참고**  
표준 속성만 검색할 수 있습니다. 사용자 지정 속성은 검색할 수 없습니다. 이는 인덱싱된 속성만 검색할 수 있으며 사용자 지정 속성은 인덱싱될 수 없기 때문입니다.
  +  `Filter-Type`: 정확하게 일치해야 하는 경우 `given_name = "Jon"`과 같이 `=`을 사용하세요. 접두사("다음으로 시작")가 일치해야 하는 경우 `given_name ^= "Jon"`과 같이 `^=`를 사용하세요.
  +  `AttributeValue`: 각 사용자에 대해 일치해야 하는 속성 값입니다.
+  `Limit`: 반환할 최대 사용자 수입니다.
+  `PaginationToken`: 이전 검색에서 더 많은 결과를 가져올 토큰입니다. Amazon Cognito는 1시간 후에 페이지 매김 토큰을 만료합니다.
+  `UserPoolId`: 검색을 수행해야 할 사용자 풀에 대한 사용자 풀 ID입니다.

모든 검색은 대/소문자를 구분합니다. 검색 결과는 `AttributeName` 문자열로 명명되는 속성별로 오름차순으로 정렬됩니다.

## `ListUsers` API 사용 예제
<a name="cognito-user-pools-searching-for-users-listusers-api-examples"></a>

다음은 모든 사용자를 반환하고 모든 속성을 포함하는 예제입니다.

```
{
    "AttributesToGet": null,
    "Filter": "",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

다음은 전화 번호가 "\$11312"로 시작하는 모든 사용자를 반환하고 모든 속성을 포함하는 예제입니다.

```
{
    "AttributesToGet": null,
    "Filter": "phone_number ^= \"+1312\"",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

다음은 성이 "Reddy"인 사용자 중 처음 10명의 사용자를 반환하는 예제입니다. 각 사용자에 대해 검색 결과에는 사용자의 지정된 이름, 전화 번호 및 이메일 주소가 포함됩니다. 사용자 풀에 일치하는 사용자가 10명을 초과하는 경우 응답에 페이지 매김 토큰이 포함됩니다.

```
{
    "AttributesToGet": [
        "given_name", 
        "phone_number", 
        "email"
    ],
    "Filter": "family_name = \"Reddy\"",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

이전 예제가 페이지 매김 토큰을 반환하는 경우 다음 예제는 동일한 필터 문자열과 일치하는 다음 10명의 사용자를 반환합니다.

```
{
    "AttributesToGet": [
        "given_name", 
        "phone_number", 
        "email"
    ],
    "Filter": "family_name = \"Reddy\"",
    "Limit": 10,
    "PaginationToken": "pagination_token_from_previous_search",
    "UserPoolId": "us-east-1_samplepool"
}
```

# 암호, 계정 복구 및 암호 정책
<a name="managing-users-passwords"></a>

[페더레이션 사용자](cognito-terms.md#terms-federateduser)를 포함하여 사용자 풀에 로그인하는 모든 사용자는 사용자 프로필에 암호가 할당됩니다. [로컬 사용자](cognito-terms.md#terms-localuser)와 [연결된 사용자](cognito-terms.md#terms-linkeduser)는 로그인할 때 암호를 제공해야 합니다. 페더레이션 사용자는 사용자 풀 암호를 사용하지 않지만 해당 ID 제공업체(idP)를 사용하여 로그인합니다. 사용자가 자신의 암호를 재설정하고, 관리자로서 암호를 재설정 또는 변경하고, 암호 복잡성 및 기록에 대한 [정책을 설정](#user-pool-settings-policies)하도록 허용할 수 있습니다.

Amazon Cognito는 사용자 암호를 일반 텍스트로 저장하지 않습니다. 대신 각 사용자의 암호 해시를 사용자별 솔트와 함께 저장합니다. 이로 인해 사용자 풀의 사용자 프로필에서 기존 암호를 검색할 수 없습니다. 가장 좋은 방법은 일반 텍스트 사용자 암호를 어디에도 저장하지 않는 것입니다. 사용자가 암호를 잊어버린 경우 암호 재설정을 수행합니다.

## 암호 재설정 및 복구
<a name="user-pool-password-reset-and-recovery"></a>

사용자가 암호를 잊어버렸습니다. 암호를 직접 재설정하거나 관리자가 암호를 재설정하도록 요구할 수 있습니다. Amazon Cognito 사용자 풀에는 두 모델 모두에 대한 옵션이 있습니다. 가이드의 이 부분에서는 사용자 풀 설정과 암호 재설정을 위한 API 작업을 설명합니다.

[ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html) API 작업 및 관리형 로그인 옵션 **암호 찾기**는 사용자에게 코드를 전송하여 올바른 코드를 가지고 있음을 확인하면 [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html)를 사용하여 새 암호를 설정할 수 있는 기회를 제공합니다. 이는 셀프 서비스 암호 복구 모델입니다.

**확인되지 않은 사용자의 복구**  
이메일 주소 또는 전화번호를 확인한 사용자에게 복구 메시지를 보낼 수 있습니다. 확인된 복구 이메일 또는 전화가 없는 경우 사용자 풀 관리자는 이메일 주소 또는 전화 번호를 확인됨으로 표시할 수 있습니다. Amazon Cognito 콘솔에서 사용자의 **사용자 속성**을 편집하고 **전화번호를 확인됨으로 표시** 또는 **이메일 주소를 확인됨으로 표시** 옆의 확인란을 선택합니다. [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) 요청에서 `email_verified` 또는 `phone_number_verified`를 true로 설정할 수도 있습니다. 신규 사용자의 경우 [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html) API 작업은 이메일 주소 또는 전화번호로 새 코드를 전송하고 셀프 서비스 확인 및 검증을 완료할 수 있습니다.

**관리자로서 암호 재설정**  
[AdminSetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) 및 [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) API 작업은 관리자가 암호를 재설정하는 방법입니다. `AdminSetUserPassword`는 임시 또는 영구 암호를 설정하고, `AdminResetUserPassword`는 `ForgotPassword`와 동일한 방식으로 사용자에게 암호 재설정 코드를 보냅니다.

### 암호 재설정 및 복구 구성
<a name="user-pool-password-reset-and-recovery-configure"></a>

Amazon Cognito는 콘솔에서 사용자 풀을 생성할 때 선택하는 필수 속성 및 로그인 옵션에서 계정 복구 옵션을 자동으로 선택합니다. 이러한 기본 설정을 수정할 수 있습니다.

사용자가 선호하는 MFA 메서드는 암호를 복구하는 데 사용할 수 있는 메서드에 영향을 미칩니다. 선호하는 MFA가 이메일 메시지인 사용자는 이메일로 암호 재설정 코드를 받을 수 없습니다. 선호하는 MFA가 SMS 메시지인 사용자는 SMS로 암호 재설정 코드를 받을 수 없습니다.

사용자가 선호하는 암호 재설정 방법을 사용할 수 없는 경우 [암호 복구](#user-pool-password-reset-and-recovery) 설정에서 대체 옵션을 제공해야 합니다. 예를 들어 복구 메커니즘에 이메일이 최우선 순위일 수 있고 이메일 MFA가 사용자 풀의 옵션일 수 있습니다. 이 경우 SMS 메시지 계정 복구를 두 번째 옵션으로 추가하거나 관리 API 작업을 사용하여 해당 사용자의 암호를 재설정합니다.

Amazon Cognito는 `InvalidParameterException` 오류 응답과 함께 유효한 복구 방법이 없는 사용자의 암호 재설정 요청에 응답합니다.

**참고**  
사용자는 동일한 이메일 주소 또는 전화번호로 MFA 및 암호 재설정 코드를 받을 수 없습니다. MFA용 이메일 메시지의 일회용 암호(OTP)를 사용하는 경우 계정 복구에 SMS 메시지를 사용해야 합니다. MFA에 SMS 메시지의 OTP를 사용하는 경우 계정 복구에 이메일 메시지를 사용해야 합니다. MFA가 있는 사용자 풀에서 사용자가 이메일 주소 속성은 있지만 전화번호가 없거나, 전화번호 속성은 있지만 이메일 주소가 없는 경우 셀프 서비스 암호 복구를 완료하지 못할 수 있습니다.  
사용자가 이 구성으로 사용자 풀에서 암호를 재설정할 수 없는 상태를 방지하려면 `email` 및 `phone_number` [속성을 필요에 따라](user-pool-settings-attributes.md) 설정합니다. 또는 사용자가 가입하거나 관리자가 사용자 프로필을 생성할 때 항상 이러한 속성을 수집하고 설정하는 프로세스를 설정할 수 있습니다. 사용자에게 두 속성이 모두 있는 경우 Amazon Cognito는 사용자의 MFA 요소가 *아닌* 대상으로 암호 재설정 코드를 자동으로 전송합니다.

다음 절차에서는 사용자 풀에서 셀프 서비스 계정 복구를 구성합니다.

------
#### [ Configure self-service password reset (API/SDK) ]

`AccountRecoverySetting` 파라미터는 사용자가 [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html) API 요청에서 암호를 복구하는 데 사용할 수 있는 방법이나 관리형 로그인에서 **암호 찾기**를 선택할 때 사용할 수 있는 방법을 설정하는 사용자 풀 파라미터입니다. `ForgotPassword`는 확인된 이메일이나 확인된 전화번호로 복구 코드를 보냅니다. 복구 코드는 1시간 동안 유효합니다. 사용자 풀에 대해 [AccountRecoverySetting](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AccountRecoverySettingType.html)을 지정할 때 Amazon Cognito는 사용자가 설정한 우선 순위에 따라 코드 전달 대상을 선택합니다.

사용자가 `AccountRecoverySetting`를 정의하고 SMS MFA를 구성한 경우 SMS를 계정 복구 메커니즘으로 사용할 수 없습니다. 이 설정의 우선 순위는 `1`이 가장 높은 우선 순위로 결정됩니다. Amazon Cognito는 지정된 메서드 중 하나에만 확인을 보냅니다. 다음 예시 `AccountRecoverySetting`에서는 이메일 주소를 계정 복구 코드의 기본 대상으로 설정하여 사용자에게 이메일 주소 속성이 없는 경우 SMS 메시지로 돌아갑니다.

```
"AccountRecoverySetting": { 
   "RecoveryMechanisms": [ 
      { 
         "Name": "verified_email",
         "Priority": 1
      },
      { 
         "Name": "verified_phone_number",
         "Priority": 2
      }
   ]
}
```

`admin_only` 값은 셀프 서비스 계정 복구를 끕니다. 대신 사용자가 암호 재설정을 위해 관리자에게 문의하도록 요구합니다. `admin_only`는 다른 계정 복구 메커니즘과 함께 사용할 수 없습니다. 다음 e

```
"AccountRecoverySetting": { 
   "RecoveryMechanisms": [ 
      { 
         "Name": "admin_only",
         "Priority": 1
      }
   ]
}
```

`AccountRecoverySetting`을 지정하지 않으면 Amazon Cognito는 먼저 확인된 전화번호로 복구 코드를 보내고, 사용자에게 전화번호 속성이 없는 경우 확인된 이메일 주소로 복구 코드를 보냅니다.

`AccountRecoverySetting`에 대한 자세한 내용은 [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) 및 [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)을 참조하세요.

------
#### [ Configure self-service password reset (console) ]

사용자 풀의 **로그인** 메뉴에서 계정 복구 및 암호 재설정 옵션을 구성합니다.

**사용자 계정 복구를 설정하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)에 로그인합니다.

1. [**사용자 풀(User Pools)**]을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택하거나 [사용자 풀을 생성합니다](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. **로그인** 메뉴를 선택합니다. **사용자 계정 복구**를 찾아 **편집**을 선택합니다.

1. 사용자가 자신의 암호를 재설정하도록 허용하려면 **셀프 서비스 계정 복구 활성화**를 선택합니다.

1. 사용자 풀이 사용자에게 보내는 암호 복구 코드에 대한 전송 방법을 구성합니다. **사용자 계정 복구 메시지의 전송 방법**에서 사용 가능한 옵션을 선택합니다. 가장 좋은 방법은 메시지 전송을 위한 보조 방법이 있는 옵션을 선택하는 것입니다. 예를 들어 **가능한 경우 이메일, 그렇지 않으면 SMS**를 선택하는 것입니다. 보조 전송 방법을 사용하면 Amazon Cognito는 MFA와 다른 암호 재설정 미디어를 사용해야 하는 방식으로 사용자에게 코드를 보낼 수 있습니다.

1. **변경 사항 저장**을 선택합니다.

------

### 암호 찾기 동작
<a name="forgot-password"></a>

암호 및 암호 확인 작업의 일부로서 지정된 시간 동안 사용자가 암호 재설정 코드를 요청 또는 입력하는 데 5\$120회의 시도가 허용됩니다. 정확한 값은 요청과 관련된 위험 매개 변수에 따라 다릅니다. 이 동작은 변경될 수 있습니다.

## 사용자 풀 암호 요구 사항 추가
<a name="user-pool-settings-policies"></a>

강력하고 복잡한 암호를 설정하는 것이 사용자 풀을 위해 가장 좋습니다. 특히 인터넷에 공개된 애플리케이션에서 약한 암호를 사용하면 사용자의 자격 증명이 암호를 추측하고 데이터에 액세스하려고 시도하는 시스템에 노출될 수 있습니다. 암호가 복잡할수록 추측하기가 더 어렵습니다. Amazon Cognito에는 [위협 방지](cognito-user-pool-settings-threat-protection.md#cognito-user-pool-settings-threat-protection.title) 및 [AWS WAF 웹 ACL](user-pool-waf.md#user-pool-waf.title)과 같은 보안 의식이 있는 관리자를 위한 추가 도구가 있지만 암호 정책이 사용자 디렉터리 보안의 핵심 요소입니다.

Amazon Cognito 사용자 풀의 로컬 사용자 암호는 자동으로 만료되지 않습니다. 사용자 암호 재설정의 시간, 날짜 및 메타데이터를 외부 시스템에 기록하는 것이 가장 좋습니다. 암호 수명에 대한 외부 로그를 사용하면 애플리케이션 또는 Lambda 트리거가 사용자의 암호 기간을 조회하고 지정된 기간 후에 재설정을 요구할 수 있습니다.

사용자 풀을 구성하여 보안 표준을 준수하는 최소한의 암호 복잡성을 요구할 수 있습니다. 복잡한 암호의 길이는 최소 8자입니다. 대문자, 숫자 및 특수 문자를 혼합한 것도 포함됩니다.

Essentials 또는 Plus 기능 계층을 사용하면 암호 재사용 정책을 설정할 수도 있습니다. 사용자가 현재 암호 또는 최대 23개의 이전 암호와 일치하는 새 암호로 재설정하지 못하도록 설정하여 최대 총 24개의 암호를 사용할 수 있도록 할 수 있습니다.

**사용자 풀 암호 정책 설정**

1. 사용자 풀을 생성하고 **보안 요구 사항 구성** 단계로 이동하거나 기존 사용자 풀에 액세스하여 **인증 방법** 메뉴로 이동합니다.

1. **암호 정책**으로 이동합니다.

1. **암호 정책 모드**를 선택합니다. **Cognito 기본값**은 권장 최소 설정으로 사용자 풀을 구성합니다. **사용자 지정** 암호 정책을 선택할 수도 있습니다.

1. **암호 최소 길이**를 설정합니다. 모든 사용자는 이 값보다 크거나 같은 길이의 암호를 등록하거나 생성해야 합니다. 이 최솟값을 99까지 설정할 수 있지만 사용자는 최대 256자의 암호를 설정할 수 있습니다.

1. **암호 요구 사항**에서 암호 복잡성 규칙을 구성하십시오. 각 사용자 암호에 필요한 문자 유형(숫자, 특수 문자, 대문자, 소문자)을 선택합니다.

   암호에 다음 문자 중 하나 이상을 요구할 수 있습니다. Amazon Cognito가 암호에 최소 필수 문자가 포함되어 있는지 확인한 후에는 사용자의 암호에 최대 암호 길이까지 모든 유형의 추가 문자를 포함할 수 있습니다.
   + [기본 라틴](https://en.wikipedia.org/wiki/ISO_basic_Latin_alphabet) 문자의 대문자와 소문자
   + 숫자
   + 다음은 특수 문자입니다.

     ```
     ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ ` = + - 
     ```
   + 비선행 비후행 공백 문자

1. **관리자가 설정한 임시 암호의 만료 기간**을 설정합니다. 이 기간이 지나면 Amazon Cognito 콘솔에서 또는 `AdminCreateUser`를 통해 생성한 새 사용자는 로그인하거나 새 암호를 설정할 수 없습니다. 임시 암호로 로그인한 후에는 사용자 계정이 만료되지 않습니다. Amazon Cognito 사용자 풀 API에서 암호 지속 기간을 업데이트하려면 [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) 또는 [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API 요청에서 [TemporaryPasswordValidityDays](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_PasswordPolicyType.html#CognitoUserPools-Type-PasswordPolicyType-TemporaryPasswordValidityDays) 값을 설정합니다.

1. 사용 가능한 경우 **이전 암호 사용 방지** 값을 설정합니다. 이 기능을 사용하려면 사용자 풀에서 Essentials 또는 Plus [기능 계층](cognito-sign-in-feature-plans.md)을 선택합니다. 이 파라미터의 값은 사용자가 암호를 재설정할 때 새 암호와 일치하지 않도록 하는 이전 암호의 수입니다.

만료된 사용자 계정의 액세스 권한을 재설정하려면 다음 중 하나를 수행합니다.
+ `MessageAction`가 `RESEND`로 설정된 [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) API 요청을 사용하여 새 임시 암호를 보내고 만료 기간을 재설정합니다.
+ 사용자 프로필을 삭제하고 새 프로필을 생성합니다.
+ [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) API 요청에서 새 확인 코드를 생성합니다.

# 사용자 풀로 사용자 가져오기
<a name="cognito-user-pools-import-users"></a>

두 가지 방법으로 기존 사용자 디렉터리 또는 사용자 데이터베이스에서 Amazon Cognito 사용자 풀로 사용자를 가져오거나 마이그레이션할 수 있습니다. Amazon Cognito를 사용하여 처음 로그인할 때 사용자 마이그레이션 Lambda 트리거를 사용하여 사용자를 마이그레이션할 수 있습니다. 이 방법을 사용하면 사용자가 기존 암호를 계속 사용할 수 있으므로 사용자 풀로 마이그레이션한 후 재설정할 필요가 없습니다. 또는 모든 사용자의 사용자 프로파일 속성이 포함된 CSV 파일을 업로드하여 사용자를 대량으로 마이그레이션할 수 있습니다. 다음 섹션에서는 이 두 가지 방법을 설명합니다.

**추가 리소스**
+ [사용자를 Amazon Cognito 사용자 풀로 마이그레이션하는 방법](https://aws.amazon.com/blogs/security/approaches-for-migrating-users-to-amazon-cognito-user-pools/)
+ [AWS re:Inforce 2023 - Amazon Cognito로 마이그레이션](https://www.youtube.com/watch?v=OkDj9uXWwCc)

**Topics**
+ [사용자 마이그레이션 Lambda 트리거를 사용하여 사용자 가져오기](cognito-user-pools-import-using-lambda.md)
+ [CSV 파일에서 사용자 풀로 사용자 가져오기](cognito-user-pools-using-import-tool.md)

# 사용자 마이그레이션 Lambda 트리거를 사용하여 사용자 가져오기
<a name="cognito-user-pools-import-using-lambda"></a>

이 접근 방식을 사용하면 사용자가 앱으로 처음 로그인하거나 암호 재설정을 요청할 때 기존 사용자 디렉터리에 있는 사용자를 사용자 풀로 원활하게 마이그레이션할 수 있습니다. [사용자 마이그레이션 Lambda 트리거](user-pool-lambda-migrate-user.md) 함수를 사용자 풀에 추가합니다. 이 함수는 로그인하려고 하는 사용자에 대한 메타데이터를 수신하고 외부 자격 증명 소스에서 사용자 프로필 정보를 반환합니다. 요청 및 응답 파라미터를 포함한 이 Lambda 트리거에 대한 자세한 내용과 코드 예는 [사용자 마이그레이션 Lambda 트리거 파라미터](user-pool-lambda-migrate-user.md#cognito-user-pools-lambda-trigger-syntax-user-migration) 섹션을 참조하세요.

사용자 마이그레이션을 시작하기 전에 AWS 계정에서 사용자 마이그레이션 Lambda 함수를 생성하고, 이 Lambda 함수를 사용자 풀의 사용자 마이그레이션 트리거로 설정합니다. Amazon Cognito 서비스 계정 보안 주체 `cognito-idp.amazonaws.com`만 사용자 자신의 사용자 풀 컨텍스트에서만 Lambda 함수를 호출하도록 허용하는 권한 부여 정책을 Lambda 함수에 추가합니다. 자세한 내용은 [AWS Lambda 에 대한 리소스 기반 정책(Lambda 함수 정책) 사용](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)을 참조하세요.

**로그인 프로세스**

1. 사용자가 앱을 열고 Amazon Cognito 사용자 풀 API 또는 관리형 로그인을 통해 로그인합니다. Amazon Cognito API로 쉽게 로그인하는 방법에 대한 자세한 내용은 [웹 및 모바일 앱과 Amazon Cognito 인증 및 권한 부여 통합](cognito-integrate-apps.md) 섹션을 참조하세요.

1. 앱이 사용자 이름 및 암호를 Amazon Cognito로 보냅니다. 앱에 AWS SDK로 빌드한 사용자 지정 로그인 UI가 있는 경우 앱은 `USER_PASSWORD_AUTH` 또는 `ADMIN_USER_PASSWORD_AUTH` 흐름과 함께 [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) 또는 [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)를 사용해야 합니다. 앱에서 이러한 흐름 중 하나를 사용하면 SDK가 암호를 서버로 보냅니다.
**참고**  
사용자 마이그레이션 트리거를 추가하기 전에 앱 클라이언트 설정에서 `USER_PASSWORD_AUTH` 또는 `ADMIN_USER_PASSWORD_AUTH` 흐름을 활성화합니다. 기본 `USER_SRP_AUTH` 흐름 대신 이러한 흐름을 사용해야 합니다. Amazon Cognito는 다른 디렉터리에서 사용자의 인증을 확인할 수 있도록 Lambda 함수에 암호를 보내야 합니다. SRP는 Lambda 함수에서 사용자의 암호를 가립니다.

1. Amazon Cognito는 제출된 사용자 이름이 사용자 풀의 사용자 이름 또는 별칭과 일치하는지 확인합니다. 사용자의 이메일 주소, 전화 번호 또는 기본 설정 사용자 이름을 사용자 풀의 별칭으로 설정할 수 있습니다. 사용자가 존재하지 않는 경우 Amazon Cognito는 사용자 이름 및 암호를 포함한 파라미터를 [사용자 마이그레이션 Lambda 트리거](user-pool-lambda-migrate-user.md) 함수에 보냅니다.

1. [사용자 마이그레이션 Lambda 트리거](user-pool-lambda-migrate-user.md) 함수는 기존 사용자 디렉터리 또는 사용자 데이터베이스를 사용하여 사용자를 확인하거나 인증합니다. 이 함수는 Amazon Cognito가 사용자 풀의 사용자 프로필에 저장하는 사용자 속성을 반환합니다. 제출된 사용자 이름이 별칭 속성과 일치하는 경우에만 `username` 파라미터를 반환할 수 있습니다. 사용자가 기존 암호를 계속 사용하도록 하려는 경우 함수가 Lambda 응답에서 `finalUserStatus` 속성을 `CONFIRMED`로 설정합니다. 앱은 [사용자 마이그레이션 Lambda 트리거 파라미터](user-pool-lambda-migrate-user.md#cognito-user-pools-lambda-trigger-syntax-user-migration)에 표시된 모든 `"response"` 파라미터를 반환해야 합니다.
**중요**  
사용자 마이그레이션 Lambda 코드에 전체 요청 이벤트 객체를 기록하지 마세요. 이 요청 이벤트 객체에는 사용자의 암호가 포함됩니다. 로그를 폐기하지 않는 경우 암호가 CloudWatch 로그에 나타납니다.

1. Amazon Cognito가 사용자 풀에 사용자 프로파일을 생성하고 앱 클라이언트에 토큰을 반환합니다.

1. 앱이 토큰 수집을 수행하고, 사용자 인증을 수락하고, 요청된 콘텐츠로 진행합니다.

사용자를 마이그레이션한 후 `USER_SRP_AUTH`를 로그인에 사용합니다. SRP(보안 원격 암호) 프로토콜에서 네트워크를 통해 암호를 보내지 않고 마이그레이션 중에 사용하는 `USER_PASSWORD_AUTH` 흐름에서 보안 강화를 제공합니다.

마이그레이션 중에 클라이언트 디바이스 문제, 네트워크 문제 등의 오류가 발생하면 앱이 Amazon Cognito 사용자 풀 API로부터 오류 응답을 수신합니다. 이 경우 Amazon Cognito가 사용자 풀에서 사용자 계정을 생성하거나 생성하지 않을 수도 있습니다. 그러면 사용자가 다시 로그인을 시도해야 합니다. 로그인이 반복해서 실패할 경우 앱에서 암호 찾기 흐름을 사용하여 사용자의 암호 재설정을 시도합니다.

암호 찾기 흐름도 `UserMigration_ForgotPassword` 이벤트 소스를 사용하여 [사용자 마이그레이션 Lambda 트리거](user-pool-lambda-migrate-user.md) 암호를 호출합니다. 사용자가 암호 재설정을 요청할 때 암호를 제출하지 않으므로 Amazon Cognito는 Lambda 함수로 전송하는 경우 암호를 포함하지 않습니다. 함수는 기존 사용자 디렉터리에서 사용자를 조회하고 사용자 풀의 사용자 프로필에 추가할 속성을 반환할 수만 있습니다. 함수가 간접 호출을 완료하고 Amazon Cognito에 응답을 반환하면 사용자 풀이 이메일 또는 SMS로 암호 재설정 코드를 보냅니다. 앱에서 사용자에게 확인 코드와 새 암호를 입력하라는 메시지를 표시한 다음 [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html) API 요청에서 해당 정보를 Amazon Cognito로 전송합니다. 관리형 로그인에서 암호를 잊어버린 경우를 위한 기본 제공 페이지를 사용할 수도 있습니다.

**추가 리소스**
+ [사용자를 Amazon Cognito 사용자 풀로 마이그레이션하는 방법](https://aws.amazon.com/blogs/security/approaches-for-migrating-users-to-amazon-cognito-user-pools/)

# CSV 파일에서 사용자 풀로 사용자 가져오기
<a name="cognito-user-pools-using-import-tool"></a>

외부 ID 저장소가 있고 새 로컬 사용자를 위해 사용자 풀을 준비할 시간이 있는 경우 쉼표로 구분된 값(CSV) 파일에서 대량 사용자 가져오기는 낮은 비용과 적은 노력으로 Amazon Cognito 사용자 풀로 마이그레이션할 수 있는 옵션일 수 있습니다. CSV 파일 가져오기는 템플릿 파일을 다운로드하고 작성한 다음 가져오기 작업의 사용자 풀로 파일을 전달하는 프로세스입니다. CSV 가져오기를 사용하여 테스트 사용자를 빠르게 생성할 수 있습니다. 또한 외부 ID 저장소에 대한 읽기 API 요청으로 파일을 프로그래밍 방식으로 작성한 다음 세부 정보 및 속성을 구문 분석하여 파일에 쓰기 작업을 수행할 수도 있습니다.

이 가져오기 프로세스는 **password**를 제외한 모든 사용자 속성의 값을 설정합니다. 암호 가져오기는 지원되지 않습니다. 보안 모범 사례에서는 일반 텍스트는 암호로 사용할 수 없으며, 해시 가져오기는 지원되지 않기 때문입니다. 즉, 사용자가 처음 로그인할 때 암호를 변경해야 합니다. 사용자는 이 방법을 사용하여 가져올 때 `RESET_REQUIRED` 상태가 됩니다.

CSV에서 사용자를 가져오는 가장 쉬운 방법은 사용자 풀에서 [암호 없는 로그인](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)을 활성화하는 것입니다. 이메일 주소 및 전화번호 속성과 올바른 사용자 풀 구성을 사용하면 가져오기 작업이 완료된 직후 이메일 또는 SMS 일회용 암호(OTP)로 로그인할 수 있습니다. 자세한 내용은 [가져온 사용자에게 암호 재설정 요구](#cognito-user-pools-using-import-tool-password-reset) 단원을 참조하십시오.

`Permanent` 파라미터를 `true`로 설정하는 [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) API 요청을 이용해 사용자의 암호를 설정할 수도 있습니다. CSV 가져오기는 사용자 풀의 청구된 월별 활성 사용자(MAU)에 영향을 주지 않습니다. 그러나 암호 재설정 작업은 MAU를 생성합니다. 즉시 활성화되지 않을 수 있는 암호를 사용하는 많은 수의 사용자를 가져올 때 비용을 관리하려면 사용자가 로그인하고 `RESET_REQUIRED` 문제를 받을 때 새 암호를 입력하도록 애플리케이션을 설정하세요.

**참고**  
각 사용자의 생성 날짜는 해당 사용자를 사용자 풀로 가져온 시간입니다. 생성 날짜는 가져온 속성 중 하나가 아닙니다.

**사용자 가져오기 작업을 생성하는 단계**

1.  AWS Identity and Access Management (IAM) 콘솔에서 Amazon CloudWatch Logs 역할을 생성합니다.

1. 사용자 가져오기.csv 파일을 만듭니다.

1. 사용자 가져오기 작업을 생성하고 실행합니다.

1. 사용자 가져오기.csv 파일을 업로드합니다.

1. 사용자 가져오기 작업을 시작하고 실행합니다.

1. CloudWatch를 사용하여 이벤트 로그를 확인합니다.

1. 가져온 사용자에게 암호를 재설정하도록 요구합니다.

**추가 리소스**
+ 사용자 풀 간 사용자 계정 내보내기를 위한 [Cognito 사용자 프로필 내보내기 참조 아키텍처](https://aws.amazon.com/solutions/implementations/cognito-user-profiles-export-reference-architecture/)

**Topics**
+ [CloudWatch Logs IAM 역할 생성](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role)
+ [사용자 가져오기 CSV 파일 생성](#cognito-user-pools-using-import-tool-csv-header)
+ [Amazon Cognito 사용자 풀 가져오기 작업 생성 및 실행](#cognito-user-pools-creating-import-job)
+ [CloudWatch 콘솔에서 사용자 풀 가져오기 결과 보기](#cognito-user-pools-using-import-tool-cloudwatch)
+ [가져온 사용자에게 암호 재설정 요구](#cognito-user-pools-using-import-tool-password-reset)

## CloudWatch Logs IAM 역할 생성
<a name="cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role"></a>

Amazon Cognito CLI 또는 API를 사용하는 경우 CloudWatch IAM 역할을 생성해야 합니다. 다음 절차에서는 Amazon Cognito가 가져오기 작업의 결과를 CloudWatch Logs Logs에 기록하는 데 사용할 수 있는 IAM 역할을 생성하는 방법을 설명합니다.

**참고**  
Amazon Cognito 콘솔에서 가져오기 작업을 생성할 때 IAM 역할을 생성할 수 있습니다. **Create a new IAM role**(새 IAM 역할 생성)을 선택하면 Amazon Cognito는 해당 역할에 적절한 신뢰 정책과 IAM 정책을 자동으로 적용합니다.

**사용자 풀 가져오기를 위한 CloudWatch Logs IAM 역할을 생성하려면(AWS CLI, API)**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 에 대한 새 IAM 역할을 생성합니다 AWS 서비스. 자세한 지침은 *AWS Identity and Access Management 사용 설명서*의 [AWS 서비스에 대한 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)을 참조하세요.

   1. **Trusted entity type**(신뢰할 수 있는 엔티티 유형)의 **Use case**(사용 사례)를 선택할 때 아무 서비스를 선택합니다. Amazon Cognito는 현재 서비스 사용 사례에 나열되지 않습니다.

   1. **Add permissions**(권한 추가) 화면에서 **Create policy**(정책 생성)을 선택하고 다음 정책 설명을 삽입합니다. 예를 들어 *REGION*을 사용자 풀 AWS 리전 의 로 바꿉니다`us-east-1`. *ACCOUNT*를 AWS 계정 ID(예: `111122223333`)로 바꿉니다.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "logs:CreateLogGroup",
                      "logs:CreateLogStream",
                      "logs:DescribeLogStreams",
                      "logs:PutLogEvents"
                  ],
                  "Resource": [
                      "arn:aws:logs:us-east-1:111122223333:log-group:/aws/cognito/*"
                  ]
              }
          ]
      }
      ```

------

1. 역할을 만들 때 Amazon Cognito를 신뢰할 수 있는 개체로 선택하지 않았으므로, 이제 역할의 신뢰 관계를 수동으로 편집해야 합니다. IAM 콘솔의 탐색 창에서 **Roles**(역할)를 선택하고 생성한 새 역할을 선택합니다.

1. **신뢰 관계** 탭을 선택합니다.

1. **신뢰 정책 편집**을 선택합니다.

1. 다음 정책 설명을 **Edit trust policy**(신뢰 정책 편집)에 붙여넣어 기존 텍스트를 대체합니다.

------
#### [ JSON ]

****  

   ```
   {
           "Version":"2012-10-17",		 	 	 
           "Statement": [
               {
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "cognito-idp.amazonaws.com"
                   },
                   "Action": "sts:AssumeRole"
               }
           ]
       }
   ```

------

1. **정책 업데이트**를 선택합니다.

1.  역할 ARN을 기록해 둡니다. 가져오기 작업을 생성할 때 ARN을 입력해야 합니다.

## 사용자 가져오기 CSV 파일 생성
<a name="cognito-user-pools-using-import-tool-csv-header"></a>

기존 사용자를 사용자 풀로 가져오려면 먼저 가져올 사용자와 사용자의 속성이 포함된 쉼표로 구분된 값(CSV) 파일을 생성해야 합니다. 사용자 풀에서는 사용자 풀의 속성 스키마를 반영하는 헤더가 있는 사용자 가져오기 파일을 검색할 수 있습니다. 그런 다음 [CSV 파일 형식 지정](#cognito-user-pools-using-import-tool-formatting-csv-file)의 형식 지정 요구 사항과 일치하는 사용자 정보를 삽입할 수 있습니다.

### CSV 파일 헤더 다운로드(콘솔)
<a name="cognito-user-pools-using-import-tool-downloading-csv-header-console"></a>

다음 절차를 사용하여 CSV 헤더 파일을 다운로드합니다.

**CSV 파일 헤더를 다운로드하려면**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 자격 AWS 증명을 입력하라는 메시지가 표시될 수 있습니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **사용자** 메뉴를 선택합니다.

1. **Import users**(사용자 가져오기) 섹션에서 **Create an import job**(가져오기 작업 생성)을 선택합니다.

1. **Upload CSV**(CSV 업로드)에서 template.csv 링크를 선택하고 CSV 파일을 다운로드합니다.**

### CSV 파일 헤더 다운로드(AWS CLI)
<a name="cognito-user-pools-using-import-tool-downloading-csv-header-using-cli"></a>

올바른 헤더 목록을 얻으려면 **사용자 가져오기**의 **사용자 메뉴**에서 **가져오기 작업 만들기**를 선택합니다. 다음 대화 상자에서 `template.csv` 링크를 선택하여 사용자 풀 속성이 포함된 템플릿 파일을 다운로드합니다.

다음 CLI 명령을 실행할 수도 있습니다. 여기서 *USER\$1POOL\$1ID*는 사용자를 가져올 사용자 풀의 사용자 풀 식별자입니다.

```
aws cognito-idp get-csv-header --user-pool-id "USER_POOL_ID"
```

샘플 응답:

```
{
    "CSVHeader": [
        "name",
        "given_name",
        "family_name",
        "middle_name",
        "nickname",
        "preferred_username",
        "profile",
        "picture",
        "website",
        "email",
        "email_verified",
        "gender",
        "birthdate",
        "zoneinfo",
        "locale",
        "phone_number",
        "phone_number_verified",
        "address",
        "updated_at",
        "cognito:mfa_enabled",
        "cognito:username"
    ],
    "UserPoolId": "USER_POOL_ID"
}
```

### CSV 파일 형식 지정
<a name="cognito-user-pools-using-import-tool-formatting-csv-file"></a>

 다운로드한 사용자 가져오기 CSV 헤더 파일은 다음 문자열처럼 보입니다. 사용자 풀에 추가한 사용자 지정 속성도 포함되어 있습니다.

```
cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,picture,website,email,email_verified,gender,birthdate,zoneinfo,locale,phone_number,phone_number_verified,address,updated_at,cognito:mfa_enabled
```

CSV 파일을 편집하여 이 헤더와 사용자의 속성 값이 포함되고 다음 규칙에 따라 형식이 지정되게 해야 합니다.

**참고**  
전화 번호의 올바른 형식 등, 속성 값에 대한 자세한 내용은 [사용자 속성 작업](user-pool-settings-attributes.md) 섹션을 참조하세요.
+ 파일의 첫 번째 행은 사용자 속성 이름을 포함하는 다운로드된 헤더 행입니다.
+ CSV 파일의 열 순서는 중요하지 않습니다.
+ 첫 번째 행 뒤의 각 행에는 사용자의 속성 값이 포함됩니다.
+ 헤더의 모든 열이 있어야 하지만 모든 열에 값을 제공할 필요는 없습니다.
+ 다음과 같은 속성이 필요합니다.
  + **cognito:username**
  + **email\$1verified** 또는 **phone\$1number\$1verified**
    + 각 사용자의 자동 확인 속성 중 하나 이상이 `true`이어야 합니다. 자동 확인 속성은 새 사용자가 사용자 풀에 가입할 때 Amazon Cognito에서 자동으로 코드를 보내는 이메일 주소 또는 전화 번호입니다.
    + 사용자 풀에는 하나 이상의 자동 확인 속성(**email\$1verified** 또는 **phone\$1number\$1verified**)이 있어야 합니다. 사용자 풀에 자동 확인된 속성이 없으면 가져오기 작업이 시작되지 않습니다.
    + 사용자 풀에 자동 확인 속성이 하나만 있는 경우 각 사용자에 대해 해당 속성을 확인해야 합니다. 예를 들어 사용자 풀에 **phone\$1number**만 자동 검증 속성으로 설정되어 있는 경우 각 사용자의 **phone\$1number\$1verified** 값이 `true`이어야 합니다.
**참고**  
사용자가 암호를 재설정하려면 확인된 이메일 또는 전화 번호가 있어야 합니다. Amazon Cognito는 CSV 파일에 지정된 이메일 또는 전화 번호로 재설정 암호 코드가 포함된 메시지를 보냅니다. 전화 번호로 메시지를 전송하는 경우 SMS 메시지를 통해 전송됩니다. 자세한 내용은 [가입 시 연락처 정보 확인](signing-up-users-in-your-app.md#allowing-users-to-sign-up-and-confirm-themselves) 단원을 참조하십시오.
  + **email**(**email\$1verified**가 `true`인 경우)
  + **phone\$1number**(**phone\$1number\$1verified**가 `true`인 경우)
  + 사용자 풀을 생성할 때 필수 속성으로 표시한 모든 속성
+ 문자열 속성 값은 인용 부호로 묶여 있지 *않아야* 합니다.
+ 속성 값에 쉼표가 포함된 경우 쉼표 앞에 백슬래시(\$1)를 넣어야 합니다. 이는 CSV 파일의 필드가 쉼표로 구분되어 있기 때문입니다.
+ CSV 파일 내용은 바이트 순서 표시가 없는 UTF-8 형식이어야 합니다.
+ **cognito:username** 필드는 필수이며 사용자 풀 내에서 고유해야 합니다. 유니 코드 문자열일 수 있습니다. 단, 공백 또는 탭을 포함할 수 없습니다.
+ **birthdate** 값이 있는 경우 이 값은 **mm/dd/yyyy** 포맷이어야 합니다. 즉, 예를 들어 생년월일 1985년 2월 1일은 **02/01/1985**로 인코딩되어야 합니다.
+ **cognito:mfa\$1enabled** 필드는 사용자 풀의 MFA 요구 사항에 부합해야 합니다. 사용자 풀에서 다중 인증(MFA)을 필수로 설정한 경우, 모든 사용자에 대해 이 필드는 `true`이거나 비어 있어야 합니다. MFA를 해제하도록 설정한 경우 이 필드는 모든 사용자에 대해 `false`이거나 비어 있어야 합니다. 빈 값은 가져온 사용자의 MFA 활성화 상태를 사용자 풀에 필요한 상태로 설정합니다. `cognito:mfa_enabled` 값을 설정했는지 여부에 관계없이 유효한 MFA 요소 없이 MFA 필수 사용자 풀에서 사용자를 가져올 수 있습니다. 이 상태의 사용자는 MFA가 활성화되어 있지만 이메일 속성, 전화번호 속성 또는 TOTP를 구성하고 해당 구성이 사용자 풀에서 유효한 MFA 팩터가 될 때까지 로그인할 수 없습니다.
+ 최대 행 길이는 16,000자입니다.
+ 최대 CSV 파일 크기는 100MB입니다.
+ 파일의 최대 행(사용자) 수는 500,000개입니다. 헤더 행은 이 최대값에 포함되지 않습니다.
+ **updated\$1at** 필드 값은 초 단위의 Epoch 시간이어야 합니다(예: **1471453471**).
+ 속성 값의 선행 또는 후행 공백은 잘립니다.

다음 목록은 사용자 지정 속성이 없는 사용자 풀에 대한 CSV 가져오기 파일 예시입니다. 사용자 풀 스키마가 이 예시와 다를 수 있습니다. 이 경우 사용자 풀에서 다운로드한 CSV 템플릿에 테스트 값을 입력해야 합니다.

```
cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,picture,website,email,email_verified,gender,birthdate,zoneinfo,locale,phone_number,phone_number_verified,address,updated_at,cognito:mfa_enabled
John,,John,Doe,,,,,,,johndoe@example.com,TRUE,,02/01/1985,,,+12345550100,TRUE,123 Any Street,,FALSE
Jane,,Jane,Roe,,,,,,,janeroe@example.com,TRUE,,01/01/1985,,,+12345550199,TRUE,100 Main Street,,FALSE
```

## Amazon Cognito 사용자 풀 가져오기 작업 생성 및 실행
<a name="cognito-user-pools-creating-import-job"></a>

이 섹션에서는 Amazon Cognito 콘솔과 AWS Command Line Interface ()를 사용하여 사용자 풀 가져오기 작업을 생성하고 실행하는 방법을 설명합니다AWS CLI.

**Topics**
+ [CSV 파일에서 사용자 가져오기(콘솔)](#cognito-user-pools-using-import-tool-console)
+ [사용자 가져오기(AWS CLI)](#cognito-user-pools-using-import-tool-cli)

### CSV 파일에서 사용자 가져오기(콘솔)
<a name="cognito-user-pools-using-import-tool-console"></a>

다음 절차에서는 CSV 파일에서 사용자를 가져오는 방법에 대해 설명합니다.

**CSV 파일에서 사용자를 가져오려면(콘솔)**

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)로 이동합니다. 자격 AWS 증명을 입력하라는 메시지가 표시될 수 있습니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **사용자** 메뉴를 선택합니다.

1. **Import users**(사용자 가져오기) 섹션에서 **Create an import job**(가져오기 작업 생성)을 선택합니다.

1. **Create import job**(가져오기 작업 생성) 페이지에 **Job name**(작업 이름)을 입력합니다.

1. **Create a new IAM role**(새 IAM 역할 생성) 또는**Use an existing IAM role**(기존 IAM 역할 사용)을 선택합니다.

   1. **Create a new IAM role**(새 IAM 역할 생성)을 선택한 경우 새 역할의 이름을 입력합니다. Amazon Cognito는 올바른 권한과 신뢰 관계를 가진 역할을 자동으로 생성합니다. 가져오기 작업을 생성하는 IAM 보안 주체는 IAM 역할을 생성할 권한이 있어야 합니다.

   1. **Use an existing IAM role**(기존 IAM 역할 사용)을 선택했다면 **IAM role selection**(IAM 역할 선택) 목록에서 역할을 선택합니다. 이 역할에는 [CloudWatch Logs IAM 역할 생성](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role)에서 설명하는 권한 및 신뢰 정책이 있어야 합니다.

1. **CSV 업로드**에서 **파일 선택**을 선택하고 준비한 CSV 파일을 연결합니다.

1. **Create job**(작업 생성)을 선택하여 작업을 제출하되, 시작은 나중에 합니다. 작업을 제출하고 즉시 시작하려면 **Create and start job**(작업 생성 및 시작)을 선택합니다.

1. 작업을 생성했지만 시작하지 않았다면 나중에 작업을 시작할 수 있습니다. **사용자 가져오기**의 **사용자** 메뉴에서 가져오기 작업을 선택하고 **시작**을 선택합니다. AWS SDK에서 [StartUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartUserImportJob.html) API 요청을 제출할 수도 있습니다.

1. **사용자 가져오기**의 **사용자** 메뉴에서 사용자 가져오기 작업의 진행 상황을 모니터링합니다. 작업이 실패할 경우 **Status**(상태) 값을 선택합니다. 자세한 내용을 보려면 **View the CloudWatch logs for more details**(CloudWatch 로그 상세 정보 보기)를 선택하고 CloudWatch Logs 콘솔에서 문제를 검토합니다.

### 사용자 가져오기(AWS CLI)
<a name="cognito-user-pools-using-import-tool-cli"></a>

다음 CLI 명령을 사용하여 사용자를 사용자 풀로 가져올 수 있습니다.
+ `create-user-import-job`
+ `get-csv-header`
+ `describe-user-import-job`
+ `list-user-import-jobs`
+ `start-user-import-job`
+ `stop-user-import-job`

이러한 명령의 명령줄 옵션 목록을 표시하려면 `help` 명령줄 옵션을 사용합니다. 예:

```
aws cognito-idp get-csv-header help
```

#### 사용자 가져오기 작업 생성
<a name="cognito-user-pools-using-import-tool-cli-creating-user-import-job"></a>

CSV 파일을 생성한 후 다음 CLI 명령을 실행하여 사용자 가져오기 작업을 생성합니다. 여기서 *JOB\$1NAME*은 선택한 작업 이름이고, *USER\$1POOL\$1ID*는 새 사용자가 추가되는 사용자 풀의 사용자 풀 ID이며, *ROLE\$1ARN*은 [CloudWatch Logs IAM 역할 생성](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role)에서 받은 역할 ARN입니다.

```
aws cognito-idp create-user-import-job --job-name "JOB_NAME" --user-pool-id "USER_POOL_ID" --cloud-watch-logs-role-arn "ROLE_ARN"
```

응답에 반환되는 *PRE\$1SIGNED\$1URL*은 15 분 동안 유효합니다. 이 시간이 지나면 만료되며 새 URL을 받으려면 새 사용자 가져오기 작업을 만들어야 합니다.

**Example 응답:**  

```
{
    "UserImportJob": {
        "Status": "Created",
        "SkippedUsers": 0,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl": "PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

#### 사용자 가져오기 작업의 상태 값
<a name="cognito-user-pools-using-import-tool-cli-status-values-for-user-import-job"></a>

사용자 가져오기 명령에 대한 응답에 다음 `Status` 값 중 하나가 표시됩니다.
+ `Created` - 작업이 생성되었지만 시작되지 않았습니다.
+ `Pending` - 전환 상태입니다. 작업을 시작했지만 아직 사용자 가져오기를 시작하지 않았습니다.
+ `InProgress` - 작업이 시작되었으며 사용자를 가져오는 중입니다.
+ `Stopping` - 작업을 중지했지만 작업에서 아직 사용자 가져오기가 중지되지 않았습니다.
+ `Stopped` - 작업을 중지했으며 작업에서 사용자 가져오기가 중지되었습니다.
+ `Succeeded` - 작업이 성공적으로 완료되었습니다.
+ `Failed` - 오류로 인해 작업이 중지되었습니다.
+ `Expired` - 작업을 생성했지만 24\$148시간 이내에 작업을 시작하지 않았습니다. 작업과 연결된 모든 데이터가 삭제되었으며 작업을 시작할 수 없습니다.

#### CSV 파일 업로드
<a name="cognito-user-pools-using-import-tool-cli-uploading-csv-file"></a>

다음 `curl` 명령을 사용하여 사용자 데이터가 포함된 CSV 파일을 `create-user-import-job` 명령의 응답에서 얻은 미리 서명된 URL에 업로드합니다.

```
curl -v -T "PATH_TO_CSV_FILE" -H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"
```

이 명령의 출력에서 `"We are completely uploaded and fine"`이라는 문구를 찾습니다. 이 구문은 파일이 성공적으로 업로드되었음을 나타냅니다. 가져오기 작업을 실행한 후에는 사용자 풀이 가져오기 파일에 정보를 보관하지 않습니다. 완료되거나 만료되면 Amazon Cognito는 업로드된 CSV 파일을 삭제합니다.

#### 사용자 가져오기 작업 설명
<a name="cognito-user-pools-using-import-tool-cli-describing-user-import-job"></a>

사용자 가져오기 작업에 대한 설명을 보려면 다음 명령을 사용합니다. 여기서 *USER\$1POOL\$1ID*는 사용자 풀 ID이며, *JOB\$1ID*는 사용자 가져오기 작업을 생성할 때 반환된 작업 ID입니다.

```
aws cognito-idp describe-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

**Example 샘플 응답:**  

```
{
    "UserImportJob": {
        "Status": "Created",
        "SkippedUsers": 0,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl": "PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn":"ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

앞의 샘플 출력에서 *PRE\$1SIGNED\$1URL*은 CSV 파일을 업로드한 URL입니다. *ROLE\$1ARN*은 역할을 생성할 때 받은 CloudWatch Logs 역할 ARN입니다.

#### 사용자 가져오기 작업 나열
<a name="cognito-user-pools-using-import-tool-cli-listing-user-import-jobs"></a>

사용자 가져오기 작업을 나열하려면 다음 명령을 사용합니다.

```
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 2
```

**Example 샘플 응답:**  

```
{
    "UserImportJobs": [
        {
            "Status": "Created",
            "SkippedUsers": 0,
            "UserPoolId": "USER_POOL_ID",
            "ImportedUsers": 0,
            "JobName": "JOB_NAME",
            "JobId": "JOB_ID",
            "PreSignedUrl":"PRE_SIGNED_URL",
            "CloudWatchLogsRoleArn":"ROLE_ARN",
            "FailedUsers": 0,
            "CreationDate": 1470957431.965
        },
        {
            "CompletionDate": 1470954227.701,
            "StartDate": 1470954226.086,
            "Status": "Failed",
            "UserPoolId": "USER_POOL_ID",
            "ImportedUsers": 0,
            "SkippedUsers": 0,
            "JobName": "JOB_NAME",
            "CompletionMessage": "Too many users have failed or been skipped during the import.",
            "JobId": "JOB_ID",
            "PreSignedUrl":"PRE_SIGNED_URL",
            "CloudWatchLogsRoleArn":"ROLE_ARN",
            "FailedUsers": 5,
            "CreationDate": 1470953929.313
        }
    ],
    "PaginationToken": "PAGINATION_TOKEN"
}
```

작업은 마지막으로 생성한 것부터 처음으로 생성한 것까지 시간순으로 나열됩니다. 두 번째 작업 다음에 있는 *PAGINATION\$1TOKEN* 문자열은 이 list 명령에 대한 추가 결과가 있음을 나타냅니다. 추가 결과를 나열하려면 다음과 같이 `--pagination-token` 옵션을 사용합니다.

```
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 10 --pagination-token "PAGINATION_TOKEN"
```

#### 사용자 가져오기 작업 시작
<a name="cognito-user-pools-using-import-tool-cli-starting-user-import-job"></a>

사용자 가져오기 작업을 시작하려면 다음 명령을 사용합니다.

```
aws cognito-idp start-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

계정당 한 번에 하나의 가져오기 작업만 활성화할 수 있습니다.

**Example 샘플 응답:**  

```
{
    "UserImportJob": {
        "Status": "Pending",
        "StartDate": 1470957851.483,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "SkippedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl":"PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

#### 사용자 가져오기 작업 중지
<a name="cognito-user-pools-using-import-tool-cli-stopping-user-import-job"></a>

진행 중인 사용자 가져오기 작업을 중지하려면 다음 명령을 사용합니다. 작업을 중지한 후에는 다시 시작할 수 없습니다.

```
aws cognito-idp stop-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

**Example 샘플 응답:**  

```
{
    "UserImportJob": {
        "CompletionDate": 1470958050.571,
        "StartDate": 1470958047.797,
        "Status": "Stopped",
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "SkippedUsers": 0,
        "JobName": "JOB_NAME",
        "CompletionMessage": "The Import Job was stopped by the developer.",
        "JobId": "JOB_ID",
        "PreSignedUrl":"PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957972.387
    }
}
```

## CloudWatch 콘솔에서 사용자 풀 가져오기 결과 보기
<a name="cognito-user-pools-using-import-tool-cloudwatch"></a>

Amazon CloudWatch 콘솔에서 가져오기 작업의 결과를 볼 수 있습니다.

**Topics**
+ [결과 보기](#cognito-user-pools-using-import-tool-viewing-the-results)
+ [결과 해석](#cognito-user-pools-using-import-tool-interpreting-the-results)

### 결과 보기
<a name="cognito-user-pools-using-import-tool-viewing-the-results"></a>

다음 단계에서는 사용자 풀 가져오기 결과를 보는 방법을 설명합니다.

**사용자 풀 가져오기의 결과를 보려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) CloudWatch 콘솔을 엽니다.

1. [**Logs**]를 선택합니다.

1. 사용자 풀 가져오기 작업에 대한 로그 그룹을 선택합니다. 로그 그룹 이름은 `/aws/cognito/userpools/USER_POOL_ID/USER_POOL_NAME` 형식입니다.

1. 방금 실행한 사용자 가져오기 작업에 대한 로그를 선택합니다. 로그 이름은 *JOB\$1ID*/*JOB\$1NAME* 형식입니다. 로그의 결과에서는 행 번호로 사용자를 나타냅니다. 사용자 데이터는 로그에 기록되지 않습니다. 각 사용자에 대해 다음과 유사한 행이 표시됩니다.
   + `[SUCCEEDED] Line Number 5956 - The import succeeded.`
   + `[SKIPPED] Line Number 5956 - The user already exists.`
   + `[FAILED] Line Number 5956 - The User Record does not set any of the auto verified attributes to true. (Example: email_verified to true).`

### 결과 해석
<a name="cognito-user-pools-using-import-tool-interpreting-the-results"></a>

성공적으로 가져온 사용자는 상태가 ‘PasswordReset’으로 설정되어 있습니다.

다음과 같은 경우에는 사용자가 가져와지지 않지만 가져오기 작업은 계속됩니다.
+ `true`로 설정된 자동 확인 속성이 없는 경우.
+ 사용자 데이터가 스키마와 일치하지 않는 경우.
+ 내부 오류로 인해 사용자를 가져올 수 없는 경우.

다음과 같은 경우 가져오기 작업이 실패합니다.
+ Amazon CloudWatch Logs 역할을 수임할 수 없거나, 해당 역할에 올바른 액세스 정책이 없거나, 해당 ㅇ역할이 삭제된 경우.
+ 사용자 풀이 삭제된 경우.
+ Amazon Cognito가 .csv 파일을 구문 분석할 수 없는 경우.

## 가져온 사용자에게 암호 재설정 요구
<a name="cognito-user-pools-using-import-tool-password-reset"></a>

사용자 풀이 암호 기반 로그인만 제공하는 경우 사용자는 암호를 가져온 후 암호를 재설정해야 합니다. 처음 로그인할 때는 *어떤* 암호든 입력할 수 있습니다. Amazon Cognito는 애플리케이션의 로그인 요청에 대한 API 응답에 새 암호를 입력하라는 메시지를 표시합니다.

사용자 풀에 암호 없는 인증 요소가 있는 경우 Amazon Cognito는 가져온 사용자의 인증 요소를 기본값으로 사용합니다. 새 암호를 입력하라는 메시지가 표시되지 않으며 암호 없는 이메일 또는 SMS OTP로 즉시 로그인할 수 있습니다. 또한 사용자에게 암호를 설정하라는 메시지를 표시하여 사용자 이름-암호 및 패스키와 같은 다른 로그인 방법을 완료할 수 있습니다. 다음 조건은 사용자 가져오기 후 암호 없는 로그인에 적용됩니다.

1. 사용 가능한 암호 없는 로그인 요소에 해당하는 속성을 가진 사용자를 가져와야 합니다. 사용자가 이메일 주소로 로그인할 수 있는 경우 `email` 속성을 가져와야 합니다. 전화번호인 경우 `phone_number` 속성을 가져와야 합니다. 둘 다인 경우 두 속성의 값을 가져옵니다.

1. 일반적으로 사용자는 암호를 재설정해야 하는 `RESET_REQUIRED` 상태로 가져옵니다. 암호 없는 팩터로 로그인할 수 있는 기능으로 가져온 경우 Amazon Cognito는 상태를 `CONFIRMED`로 설정합니다.

설정 방법 및 애플리케이션에서 인증 흐름을 구성하는 방법을 포함하여 암호 없는 인증에 대한 자세한 내용은 [Amazon Cognito 사용자 풀로 인증](authentication.md) 섹션을 참조하세요.

다음 절차에서는 CSV 파일을 가져온 후 `RESET_REQUIRED`의 로컬 사용자를 대상으로 맞춤형 로그인 메커니즘을 구축하여 사용자 경험을 개선하는 방법을 설명합니다. 사용자가 관리형 로그인으로 로그인하는 경우 **암호 찾기** 옵션을 선택하고 이메일 또는 문자 메시지의 코드를 제공하고 암호를 설정하도록 지시합니다.

**가져온 사용자에게 암호 재설정 요구**

1. 앱에서 임의의 암호를 사용하여 `InitiateAuth`를 통해 현재 사용자의 로그인을 자동으로 시도합니다.

1. `PreventUserExistenceErrors`를 사용할 경우 Amazon Cognito가 `NotAuthorizedException`을 반환합니다. 그렇지 않은 경우에는 `PasswordResetRequiredException`를 반환합니다.

1. 앱에서 `ForgotPassword` API를 요청하고 사용자의 암호를 재설정합니다.

   1. 앱에서 `ForgotPassword` API 요청에 사용자 이름을 제출합니다.

   1. Amazon Cognito는 확인된 이메일 또는 전화 번호에 코드를 보냅니다. 대상은 CSV 파일의 `email_verified` 및 `phone_number_verified`에 입력한 값에 따라 달라집니다. `ForgotPassword` 요청에 대한 응답은 코드의 대상을 나타냅니다.
**참고**  
이메일이나 전화 번호를 인증하도록 사용자 풀을 구성해야 합니다. 자세한 내용은 [사용자 계정 가입 및 확인](signing-up-users-in-your-app.md) 단원을 참조하십시오.

   1. 앱은 코드가 전송된 위치를 확인하라는 메시지를 사용자에게 표시하며, 코드와 새 암호를 입력하라고 지시합니다.

   1. 사용자가 앱에 코드와 새 암호를 입력합니다.

   1. 앱은 `ConfirmForgotPassword` API 요청에 코드와 새 암호를 제출합니다.

   1. 앱이 사용자를 로그인으로 리디렉션합니다.

# 사용자 속성 작업
<a name="user-pool-settings-attributes"></a>

속성은 이름, 이메일 주소, 전화 번호 등 개별 사용자를 식별하는 데 도움이 되는 정보입니다. 새 사용자 풀에는 기본 *표준 속성* 집합이 있습니다. 에서 사용자 풀 정의에 사용자 지정 속성을 추가할 수도 있습니다 AWS Management Console. 이 섹션에서는 이러한 속성을 자세히 설명하며 사용자 풀을 설정하는 방법에 대한 팁을 제공합니다.

사용자에 대한 일부 정보는 속성에 저장하지 마세요. 예를 들어, 사용 통계나 게임 점수와 같이 자주 변경되는 사용자 데이터는 Amazon Cognito Sync 또는 Amazon DynamoDB와 같은 별도의 데이터 스토어에 보관합니다.

사용자-속성 문자열 값을 사용자 풀에 제출하기 전에 입력을 삭제합니다. 제안된 사용자 속성 값을 분석하는 한 가지 방법은 [사전 가입](user-pool-lambda-pre-sign-up.md)과 같은 Lambda 트리거를 사용하는 것입니다.

**참고**  
일부 문서 및 표준에서는 속성을 *멤버*로 참조합니다.

**Topics**
+ [표준 속성](#cognito-user-pools-standard-attributes)
+ [사용자 이름 및 기본 설정 사용자 이름](#user-pool-settings-usernames)
+ [로그인 속성 사용자 지정](#user-pool-settings-aliases)
+ [사용자 지정 속성](#user-pool-settings-custom-attributes)
+ [속성 권한 및 범위](#user-pool-settings-attribute-permissions-and-scopes)

## 표준 속성
<a name="cognito-user-pools-standard-attributes"></a>

Amazon Cognito는 [OpenID Connect 사양](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims)에 따라 모든 사용자에게 표준 속성 집합을 할당합니다. 기본적으로 표준 및 사용자 지정 속성 값은 최대 2,048자의 문자열일 수 있지만 일부 속성 값에는 형식 제한이 있습니다.

표준 속성은 다음과 같습니다.
+ `name`
+ `family_name`
+ `given_name`
+ `middle_name`
+ `nickname`
+ `preferred_username`
+ `profile`
+ `picture`
+ `website`
+ `gender`
+ `birthdate`
+ `zoneinfo`
+ `locale`
+ `updated_at`
+ `address`
+ `email`
+ `phone_number`
+ `sub`

`sub`를 제외하고 표준 속성은 기본적으로 모든 사용자에게 선택 사항입니다. 필수 속성으로 설정하려면 사용자 풀을 생성하는 동안 속성 옆의 **필수(Required)** 확인란을 선택합니다. Amazon Cognito는 각 사용자의 `sub` 속성에 고유한 사용자 식별자 값을 할당합니다. **email** 및 **phone\$1number** 속성만 확인할 수 있습니다.

표준 속성에는 [DescribeUserPool API 응답](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html#API_DescribeUserPool_ResponseSyntax)의 `SchemaAttributes` 파라미터에서 볼 수 있는 사전 정의된 속성이 있습니다. 이러한 특성 속성에 대한 사용자 지정 값(예: 데이터 유형, 변경 가능성 및 길이 제약 조건)을 설정할 수 있습니다. 표준 특성 속성을 수정하려면 [CreateUserPool 스키마 파라미터](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)에서 사용자 지정 값을 설정합니다. 스키마는 필요한 속성을 설정하는 위치이기도 합니다. Amazon Cognito 콘솔에서 사용자 풀을 생성할 때는 표준 특성의 속성을 수정할 수 없습니다.

**참고**  
 표준 속성이 **필수(Required)**로 표시된 경우 사용자는 해당 속성의 값을 제공해야 등록할 수 있습니다. 사용자를 생성하지만 필수 속성에는 값을 제공하지 않으려면 관리자가 [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) API를 사용합니다. 사용자 풀을 생성한 후에는 필수 속성과 선택적 속성 간을 전환할 수 없습니다.표준 속성 세부 정보 및 형식 제한

**birthdate**  
값은 YYYY-MM-DD 형식으로 유효한 10자 날짜여야 합니다.

**이메일**  
사용자 및 관리자는 이메일 주소 값을 확인할 수 있습니다.  
적절한 AWS 계정 권한이 있는 관리자는 사용자의 이메일 주소를 변경하고 확인된 것으로 표시할 수도 있습니다. [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API 또는 [admin-update-user-attributes](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-update-user-attributes.html) AWS Command Line Interface (AWS CLI) 명령을 사용하여 이메일 주소를 확인된 것으로 표시합니다. 관리자는 이 명령을 사용하여 `email_verified` 속성을 `true`로 변경할 수 있습니다. Amazon Cognito 콘솔의 **사용자** 메뉴에서 사용자를 편집하여 이메일 주소를 확인됨으로 표시할 수도 있습니다.  
값은 @ 기호 및 도메인이 포함된 표준 이메일 형식을 따르는 [유효한 이메일 주소 문자열](https://datatracker.ietf.org/doc/html/rfc3696#section-3)이어야 하며 길이는 최대 2,048자여야 합니다.

**phone\$1number**  
SMS 멀티 팩터 인증(MFA)이 활성화되어 있는 경우 사용자는 전화 번호를 제공해야 합니다. 자세한 내용은 [사용자 풀에 MFA 추가](user-pool-settings-mfa.md) 섹션을 참조하세요.  
사용자 및 관리자는 전화 번호 값을 확인할 수 있습니다.  
적절한 AWS 계정 권한이 있는 관리자는 사용자의 전화번호를 변경하고 확인된 것으로 표시할 수도 있습니다. [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) API 또는 [admin-update-user-attributes](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-update-user-attributes.html) AWS CLI 명령을 사용하여 확인된 전화번호로 표시합니다. 관리자는 이 명령을 사용하여 `phone_number_verified` 속성을 `true`로 변경할 수 있습니다. Amazon Cognito 콘솔의 **사용자** 메뉴에서 사용자를 편집하여 전화번호를 확인됨으로 표시할 수도 있습니다.  
전화 번호는 다음과 같은 형식 규칙을 따라야 합니다. 전화 번호는 더하기(**\$1**) 기호로 시작하고 바로 뒤에 국가 코드가 와야 합니다. **\$1** 기호와 숫자만 전화 번호에 포함할 수 있습니다. 서비스에 값을 제출하기 전에 전화 번호에서 괄호, 공백 또는 대시(**-**)와 같은 다른 문자는 모두 제거합니다. 예를 들어 미국 기반 전화 번호는 **\$114325551212** 형식을 따라야 합니다.

**preferred\$1username**  
`preferred_username`을 필수 또는 별칭으로 선택할 수 있지만 둘 다로 선택할 수는 없습니다. `preferred_username`이 별칭인 경우 [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) API 작업을 요청하고 사용자 확인 후 속성 값을 추가할 수 있습니다.

**sub**  
`sub` 속성을 기반으로 사용자를 인덱싱하고 검색합니다. `sub` 속성은 각 사용자 풀 내의 고유한 사용자 식별자입니다. 사용자는 `phone_number` 및 `email`와 같은 속성을 변경할 수 있습니다. `sub` 속성에는 고정 값이 있습니다. 사용자 검색에 대한 자세한 내용은 [사용자 계정 관리 및 검색](how-to-manage-user-accounts.md)을 참조하십시오.

### 필수 속성 보기
<a name="how-to-edit-standard-attributes"></a>

지정된 사용자 풀의 필수 속성을 보려면 다음 절차를 따르세요.

**참고**  
사용자 풀을 생성한 후에는 필수 속성을 변경할 수 없습니다.

**필수 속성을 보려면**

1. 에서 [Amazon Cognito](https://console.aws.amazon.com/cognito/home)로 이동합니다 AWS Management Console. 콘솔에 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **가입** 메뉴를 선택합니다.

1. **필수 속성(Required attributes)** 섹션에서 사용자 풀의 필수 속성을 봅니다.

## 사용자 이름 및 기본 설정 사용자 이름
<a name="user-pool-settings-usernames"></a>

`username` 값은 별도의 속성이며 `name` 속성과 동일하지 않습니다. 각 사용자는 `username` 속성이 있습니다. Amazon Cognito는 페더레이션 사용자의 사용자 이름을 자동으로 생성합니다. Amazon Cognito 디렉터리에서 로컬 사용자를 생성하려면 `username` 속성을 제공해야 합니다. 사용자를 생성한 후에는 `username` 속성의 값을 변경할 수 없습니다.

개발자는 `preferred_username` 속성을 사용하여 사용자에게 변경할 수 있는 사용자 이름을 제공할 수 있습니다. 자세한 내용은 [로그인 속성 사용자 지정](#user-pool-settings-aliases) 단원을 참조하십시오.

애플리케이션에 사용자 이름이 필요하지 않은 경우, 사용자에게 사용자 이름 제공을 요청할 필요가 없습니다. 앱이 백그라운드에서 고유한 사용자 이름을 생성할 수 있습니다. 이는 사용자가 이메일 주소와 암호를 사용하여 등록 및 로그인하게 하려는 경우 유용할 수 있습니다. 자세한 내용은 [로그인 속성 사용자 지정](#user-pool-settings-aliases) 섹션을 참조하세요.

`username`은 사용자 풀에서 고유해야 합니다. `username`은 삭제되고 더 이상 사용되지 않는 경우에만 재사용될 수 있습니다. `username` 속성에 대한 문자열 제약 조건에 대한 자세한 내용은 [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-Username) API 요청의 *사용자 이름* 속성 섹션을 참조하세요.

## 로그인 속성 사용자 지정
<a name="user-pool-settings-aliases"></a>

사용자 풀을 생성할 때 *사용자 이름 속성*을 설정하여 사용자가 이메일 주소 또는 전화번호를 사용자 이름으로 사용하여 가입하고 로그인하게 할 수 있습니다. 또는 *별칭 속성*을 설정하여 사용자에게 선택지를 제공할 수도 있습니다. 사용자는 가입할 때 여러 속성을 포함한 다음 사용자 이름, 기본 설정 사용자 이름, 이메일 주소 또는 전화번호로 로그인할 수 있습니다.

**중요**  
사용자 풀이 생성된 후에는 이 설정을 변경할 수 없습니다.

### 별칭 속성과 사용자 이름 속성 중에서 선택하는 방법
<a name="user-pool-settings-aliases-settings"></a>


| 사용자의 요구 사항 | 별칭 속성 | 사용자 이름 속성 | 
| --- |--- |--- |
| Users have multiple sign-in attributes | Yes¹ | No² | 
| Users must verify email address or phone number before they can sign in with it | Yes | No | 
| Sign up users with duplicate email addresses or phone numbers and prevent UsernameExistsException errors³ | Yes | No | 
| Can assign the same email address or phone number attribute value to more than one user | Yes⁴ | No | 

¹ 사용 가능한 로그인 속성은 사용자 이름, 이메일 주소, 전화번호 및 기본 설정 사용자 이름입니다.

² 이메일 주소나 전화번호로 로그인할 수 있습니다.

³ 사용자가 중복될 가능성이 있는 이메일 주소 또는 전화번호로 등록하지만 사용자 이름은 등록하지 않는 경우 사용자 풀에서 `UsernameExistsException` 오류가 생성되지 않습니다. 이 동작은 **사용자 이름 존재 오류 방지**와는 별개로, 로그인 작업에는 적용되지만 가입 작업에는 적용되지 않습니다.

³ 속성을 검증한 마지막 사용자만 해당 속성을 사용하여 로그인할 수 있습니다.

#### 옵션 1: 다중 로그인 속성(별칭 속성)
<a name="user-pool-settings-aliases-settings-option-1"></a>

속성은 사용자에게 사용자 이름이 있지만 해당 속성으로 로그인할 수도 있는 경우 *별칭*입니다. 사용자가 로그인 양식의 사용자 이름 필드에서 사용자 이름과 다른 속성 값 중에서 선택할 수 있도록 허용하려면 별칭을 설정합니다. `username` 속성은 사용자가 변경할 수 없는 고정 값입니다. 속성을 별칭으로 표시하면 사용자가 사용자 이름 대신 해당 속성을 사용하여 로그인할 수 있습니다. 이메일 주소, 전화 번호 및 기본 설정 사용자 이름 속성을 별칭으로 표시할 수 있습니다. 예를 들어 이메일 주소 및 전화번호를 사용자 풀 별칭으로 선택하는 경우 해당 사용자 풀의 사용자는 자신의 사용자 이름, 이메일 주소 또는 전화번호를 암호와 함께 사용하여 로그인할 수 있습니다.

별칭 특성을 선택하려면 사용자 풀을 만들 때 **User name**(사용자 이름)을 선택하고 하나 이상의 추가 로그인 옵션을 선택합니다.

**참고**  
사용자 풀을 대/소문자를 구분하지 않도록 구성하면 사용자가 소문자 또는 대문자를 사용하여 자신의 별칭으로 가입하거나 로그인할 수 있습니다. 자세한 내용은 *Amazon Cognito 사용자 풀 API 참조*에서 [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)을 참조하세요.

이메일 주소를 별칭으로 선택하는 경우 Amazon Cognito는 유효한 이메일 주소 형식과 일치하는 사용자 이름을 수락하지 않습니다. 마찬가지로 전화번호를 별칭으로 선택하는 경우 Amazon Cognito는 유효한 전화번호 형식과 일치하는 해당 사용자 풀에 대한 사용자 이름을 수락하지 않습니다.

**참고**  
별칭 값은 사용자 풀에서 고유해야 합니다. 별칭을 이메일 주소 또는 전화 번호용으로 구성하는 경우 제공하는 값은 하나의 계정에서만 확인됨 상태가 될 수 있습니다. 가입하는 동안 사용자가 이메일 주소 또는 전화 번호를 별칭 값으로 제공하고 다른 사용자가 이미 해당 별칭 값을 사용한 경우 등록이 성공합니다. 그러나 사용자가 이 이메일(또는 전화 번호)로 계정 확인을 시도하고 유효한 코드를 입력하면 Amazon Cognito에서 `AliasExistsException` 오류를 반환합니다. 이 오류는 이 이메일 주소(또는 전화 번호)의 계정이 이미 있음을 사용자에게 나타냅니다. 이때 사용자는 새 계정 생성 시도를 중단하고 대신 이전 계정의 암호 재설정을 시도할 수 있습니다. 사용자가 계속해서 새 계정을 생성하는 경우 앱은 `forceAliasCreation` 옵션을 사용하여 `ConfirmSignUp` API를 호출해야 합니다. `ConfirmSignUp`과 `forceAliasCreation`은 함께 사용하여 이전 계정의 별칭을 새로 생성된 계정으로 이동하고 속성을 이전 계정에서 확인되지 않음으로 표시합니다.

전화 번호 및 이메일 주소는 사용자가 전화 번호 및 이메일 주소를 확인한 후에만 사용자에 대한 활성 별칭이 됩니다. 이메일 주소 및 전화 번호를 별칭으로 사용하는 경우 해당 이메일 주소 및 전화 번호의 자동 확인을 선택하는 것이 좋습니다.

사용자가 가입할 때 이메일 주소 및 전화번호 속성에 `UsernameExistsException` 오류가 발생하지 않도록, 별칭 속성을 선택하세요.

사용자의 `username` 속성 값이 변경되지 않는 동안 사용자가 로그인할 때 사용하는 사용자 이름을 사용자가 변경할 수 있도록 `preferred_username` 속성을 활성화합니다. 이 사용자 경험을 설정하려는 경우 새 `username` 값을 `preferred_username`으로 제출하고 `preferred_username`을 별칭으로 선택합니다. 그러면 사용자가 자신이 입력한 새 값으로 로그인할 수 있습니다. `preferred_username`을 별칭으로 선택하는 경우 사용자는 계정을 확인할 때에만 값을 제공할 수 있습니다. 등록 중에는 값을 제공할 수 없습니다.

사용자가 사용자 이름을 사용하여 가입할 때, 다음 별칭 중 하나 이상을 사용하여 로그인할 수 있는지 여부를 선택할 수 있습니다.
+ 확인된 이메일 주소
+ 확인된 전화 번호
+ 기본 설정 사용자 이름

사용자가 가입한 후에 이러한 별칭을 변경할 수 있습니다.

**중요**  
사용자 풀에서 별칭을 사용한 로그인을 지원하고 사용자를 인증하거나 검색하려는 경우 로그인 속성으로 사용자를 식별하지 마십시오. 고정 값 사용자 식별자 `sub`은 사용자 ID를 나타내는 유일한 일관된 지표입니다.

사용자가 별칭을 사용하여 로그인할 수 있도록 사용자 풀을 생성할 때 다음 단계를 포함합니다.

------
#### [ Phone number or email address (console) ]

사용자 풀을 생성할 때 이메일 주소와 전화번호를 별칭 속성으로 설정해야 합니다.

**Amazon Cognito 콘솔에서 사용자 이름 별칭이 있는 사용자 풀을 생성하려면**

1.  AWS Management Console의 [Amazon Cognito](https://console.aws.amazon.com/cognito/home)로 이동합니다. 콘솔에 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **시작하기** 또는 **사용자 풀 생성** 버튼을 사용하여 새 사용자 풀을 생성합니다.

1. **애플리케이션 정의**에서 애플리케이션 설정을 선택합니다.

1. **로그인 식별자 옵션**의 **옵션 구성**에서 **사용자 이름** 옆의 확인란과 **이메일** 및 **전화번호** 중 하나 이상을 선택합니다.

1. 별칭 속성을 **가입에 필요한 속성**으로 선택합니다. 관리형 로그인 가입 양식에서 Amazon Cognito는 새 사용자에게 필수 속성 값을 제공하라는 메시지를 표시합니다.

1. **반환 URL 추가**에서 관리형 로그인 후 리디렉션할 애플리케이션 콜백 URL을 설정합니다.

1. **생성(Create)**을 선택합니다.

------
#### [ Phone number or email address (API/SDK) ]

[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) API 작업을 사용하여 새 사용자 풀을 생성합니다. 표시된 대로 `AliasAttributes` 파라미터를 구성합니다. 전화번호 별칭만 원하는 경우 `email` 항목을 제거하거나 이메일 주소 별칭만 원하는 경우 `phone_number` 항목을 제거할 수 있습니다.

```
"AliasAttributes": [
   "email",
   "phone_number"
],
```

------
#### [ Preferred username (API/SDK) ]

Amazon Cognito 콘솔은 `preferred_username`을 별칭으로 사용하지 않고 사용자 풀을 생성합니다. `preferred_username` 별칭이 있는 사용자 풀을 생성하려면 AWS SDK에서 [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) API 요청을 사용하여 사용자 풀을 설정합니다. 가입 시 기본 사용자 이름 속성 생성을 지원하려면 `preferred_username`을 필수 속성으로 설정합니다. 관리형 로그인 가입 양식에서 Amazon Cognito는 새 사용자에게 필수 속성 값을 제공하라는 메시지를 표시합니다. Amazon Cognito 콘솔에서 `preferred_username`을 필수 속성으로 설정*할 수* 있지만 별칭으로 사용할 수는 없습니다.

**별칭으로 구성**  
그림과 같이 `CreateUserPool` 요청의 `AliasAttributes` 파라미터에서 별칭으로 `preferred_username`을 구성합니다. 목록에서 별칭 속성으로 사용하지 않으려는 값을 제거합니다.

```
"AliasAttributes": [
   "email",
   "phone_number",
   "preferred_username"
],
```

**필요에 따라 구성**  
관리형 로그인 가입 양식에서 Amazon Cognito는 새 사용자에게 필수 속성 값을 제공하라는 메시지를 표시합니다. [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) 요청의 `SchemaAttributes` 파라미터에서 필요에 따라 `preferred_username`을 구성합니다.

기본 사용자 이름을 필수 속성으로 설정하려면 다음과 같이 구성합니다. 다음 예시에서는 `preferred_username`의 기본 스키마를 수정하여 필요에 따라 설정합니다. `AttributeDataType`(기본값은 `string`) 및 `StringAttributeConstraints`(기본값은 1\$199자)와 같은 다른 스키마 파라미터는 기본값을 가정합니다.

```
"Schema": [
   {
      "Name": "preferred_username",
      "Required": true
   }
]
```

------

#### 옵션 2: 로그인 속성으로 사용하는 이메일 주소 또는 전화번호(사용자 이름 속성)
<a name="user-pool-settings-aliases-settings-option-2"></a>

사용자가 이메일 주소 또는 전화번호를 사용자 이름으로 사용하여 가입할 때 사용자가 이메일 주소와 전화번호 중 하나만 사용하여 가입할 수 있는지 여부를 선택할 수 있습니다.

사용자 이름 특성을 선택하려면 사용자 풀을 만들 때 **사용자 이름**을 로그인 옵션으로 선택하지 마세요.

이메일 주소 또는 전화 번호는 고유해야 하며 다른 사용자가 이미 사용하고 있어서는 안 됩니다. 확인을 받을 필요는 없습니다. 사용자가 이메일 주소 또는 전화 번호를 사용하여 가입한 후에는 동일한 이메일 주소 또는 전화 번호로 새 계정을 생성할 수 없습니다. 사용자는 기존 계정을 재사용하고 필요한 경우 계정 암호를 재설정할 수만 있습니다. 그러나 사용자는 이메일 주소 또는 전화 번호를 새 이메일 주소 또는 전화 번호로 변경할 수 있습니다. 이메일 주소 또는 전화번호가 아직 사용 중이 아닌 경우 새 사용자 이름이 됩니다.

이메일 주소와 전화번호를 모두 사용자 이름 속성으로 선택하면 두 속성에 대한 값을 제공하더라도 사용자가 둘 중 하나로 로그인할 수 있습니다. 로그인 사용자 이름은 [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-Username)의 `Username` 파라미터에서 전달하는 값을 기반으로 합니다.

**참고**  
사용자가 이메일 주소를 사용자 이름으로 사용하여 가입하는 경우 사용자 이름을 다른 이메일 주소로 변경할 수 있으나 전화번호로 변경할 수는 없습니다. 사용자가 전화번호를 사용하여 가입하는 경우 사용자 이름을 다른 전화번호로 변경할 수 있지만 이메일 주소로 변경할 수는 없습니다.

이메일 주소 또는 전화 번호를 사용하는 가입 및 로그인을 설정하려면 사용자 풀 생성 프로세스 동안 다음 단계를 사용합니다.

------
#### [ Username attributes (console) ]

다음 절차에서는 이메일 주소 또는 전화번호 사용자 이름 속성을 사용하여 사용자 풀을 생성합니다. Amazon Cognito 콘솔에서 사용자 이름 속성 프로세스의 차이점은 **사용자 이름**을 로그인 속성으로 설정하지 않는다는 것입니다.

**Amazon Cognito 콘솔에서 사용자 이름 속성을 사용하여 사용자 풀을 생성하려면**

1.  AWS Management Console의 [Amazon Cognito](https://console.aws.amazon.com/cognito/home)로 이동합니다. 콘솔에 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **시작하기** 또는 **사용자 풀 생성** 버튼을 사용하여 새 사용자 풀을 생성합니다.

1. **애플리케이션 정의**에서 애플리케이션 설정을 선택합니다.

1. **로그인 식별자 옵션**의 **옵션 구성**에서 **이메일**, **전화번호** 또는 둘 다와 같은 사용자 이름 속성을 선택합니다. **사용자 이름**을 선택하지 않은 상태로 둡니다.

1. 가장 좋은 방법은 사용자 이름 속성을 **가입에 필요한 속성**으로 선택하는 것입니다. 관리형 로그인 가입 양식에서 Amazon Cognito는 새 사용자에게 필수 속성 값을 제공하라는 메시지를 표시합니다. 필요에 따라 사용자 이름 속성을 설정하지 않으면 Amazon Cognito는 새 사용자에게 해당 속성을 입력하라는 메시지를 표시하지 않습니다. 이 시나리오에서는 사용자가 로그인하기 전에 각 사용자의 이메일 주소 또는 전화번호를 수집하고 제출하도록 애플리케이션을 구성해야 합니다.

1. **반환 URL 추가**에서 관리형 로그인 후 리디렉션할 애플리케이션 콜백 URL을 설정합니다.

1. **생성(Create)**을 선택합니다.

------
#### [ Username attributes (API/SDK) ]

[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) 요청에서 표시된 대로 `UsernameAttributes` 파라미터를 구성합니다. 이메일 주소 사용자 이름으로만 로그인을 허용하려면 이 목록에 `email`만 지정합니다. 전화번호 사용자 이름으로만 로그인을 허용하려면 `phone_number`만 지정합니다. 이 파라미터는 로그인 옵션으로 사용자 이름을 재정의합니다.

```
"UsernameAttributes": [ 
   "email",
   "phone_number"
],
```

------

사용자 이름 속성을 구성할 때는 `username` 파라미터의 이메일 주소 또는 전화번호를 전달하는 [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) API 요청을 할 수 있습니다. 다음은 사용자 이름 속성을 사용하는 코드`SignUp` API 작업의 동작입니다.
+ `username` 문자열이 유효한 이메일 주소 형식(예: `user@example.com`)인 경우 사용자 풀은 자동으로 사용자 `email` 속성을 `username` 값으로 채웁니다.
+ `username` 문자열이 유효한 전화 번호 형식(예: `+12065551212`)인 경우 사용자 풀은 자동으로 사용자 `phone_number` 속성을 `username` 값으로 채웁니다.
+ `username` 문자열 형식이 이메일 주소 또는 전화 번호 형식이 아닌 경우 `SignUp` API에서 예외를 반환합니다.
+ `username` 문자열에 이미 사용 중인 이메일 주소 또는 전화 번호가 포함되어 있는 경우 `SignUp` API에서 예외가 발생합니다.
+ `SignUp` API는 사용자에 대한 [UUID](cognito-terms.md#terms-uuid)로 `username` 속성을 채웁니다. 이 UUID는 사용자 ID 토큰의 `sub` 클레임과 동일한 값을 갖습니다.

[ListUsers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) 작업을 제외한 모든 API에서 사용자 이름 대신 이메일 주소나 전화번호를 사용할 수 있습니다. `ListUsers` API 요청에서 `email` 또는 `phone_number`의 `Filter`를 지정할 수 있습니다. `username`를 기준으로 필터링하는 경우 이메일 주소 또는 전화번호가 아닌 UUID 사용자 이름을 제공해야 합니다.

## 사용자 지정 속성
<a name="user-pool-settings-custom-attributes"></a>

사용자 풀에 사용자 정의 속성을 최대 50개까지 추가할 수 있습니다. 사용자 지정 속성의 최소 및/또는 최대 길이를 지정할 수 있습니다. 단, 사용자 지정 속성의 최대 길이는 2,048자를 넘을 수 없습니다. 사용자 지정 속성의 이름은 [SchemaAttributeType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SchemaAttributeType.html)의 `Name` 파라미터에 설명된 정규식 패턴과 일치해야 합니다.

**각 사용자 지정 속성의 특성은 다음과 같습니다.**
+ 문자열, 숫자, 부울 또는 `DateTime` 객체로 정의할 수 있습니다. Amazon Cognito는 사용자 지정 속성 값을 ID 토큰에 문자열로만 씁니다.
**참고**  
Amazon Cognito 콘솔에서는 문자열 및 숫자 데이터 유형의 사용자 지정 속성만 추가할 수 있습니다. 부울 및 `DateTime` 속성 데이터 유형과 같은 추가 옵션은 [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) 및 [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API 요청의 `SchemaAttributes` 속성에서만 사용할 수 있습니다.
+ 사용자에게 이 속성의 값을 제공하도록 요구할 수 없습니다.
+ 이 속성을 사용자 풀에 추가한 후에는 제거하거나 변경할 수 없습니다.
+ 이 속성 이름의 문자 길이는 Amazon Cognito가 허용하는 한도 내에 있습니다. 자세한 내용은 [Amazon Cognito의 할당량](quotas.md) 단원을 참조하십시오.
+ 이 속성은 *변경 가능* 또는 *변경 불가능*일 수 있습니다. 사용자를 생성할 때만 변경 불가능한 사용자 지정 속성에 값을 쓸 수 있습니다. 앱 클라이언트에 속성에 대한 쓰기 권한이 있는 경우 변경 가능한 속성의 값을 변경할 수 있습니다. 자세한 내용은 [속성 권한 및 범위](#user-pool-settings-attribute-permissions-and-scopes) 섹션을 참조하세요.

**참고**  
코드에서 그리고 [역할 기반 액세스 제어 사용](role-based-access-control.md)에 대한 규칙 설정에서는 사용자 지정 속성을 표준 속성과 구별하기 위해 사용자 지정 속성에 `custom:` 접두사가 필요합니다.

사용자 풀을 생성할 때 [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)의 `SchemaAttributes` 속성에 *개발자 속성*을 추가할 수도 있습니다. 개발자 속성에는 `dev:` 접두사가 있습니다. 자격 AWS 증명으로만 사용자의 개발자 속성을 수정할 수 있습니다. 개발자 속성은 Amazon Cognito가 앱 클라이언트 읽기-쓰기 권한으로 대체한 레거시 특성입니다.

새 사용자 정의 속성을 생성하려면 다음 절차를 따르세요.

**콘솔을 사용하여 사용자 지정 속성을 추가하려면**

1. 에서 [Amazon Cognito](https://console.aws.amazon.com/cognito/home)로 이동합니다 AWS Management Console. 콘솔에 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **가입** 탭을 선택하고 **사용자 지정 속성** 섹션에서 **사용자 지정 속성 추가**를 선택합니다.

1. [**사용자 정의 속성 추가(Add custom attributes)**] 페이지에서 새 속성에 대한 다음 세부 정보를 제공합니다.
   + **이름**을 입력합니다.
   + **문자열** 또는 **숫자**의 **형식**을 선택합니다.
   + **최소** 문자열 길이 또는 숫자 값을 입력합니다.
   + **최대** 문자열 길이 또는 숫자 값을 입력합니다.
   + 사용자에게 사용자 지정 속성의 초기 값을 설정한 후 해당 값을 변경할 수 있는 권한을 제공하려는 경우 **변경 가능(Mutable)**을 선택합니다.

1. **변경 사항 저장(Save changes)**을 선택합니다.

## 속성 권한 및 범위
<a name="user-pool-settings-attribute-permissions-and-scopes"></a>

각 앱 클라이언트에 대해 각 사용자 속성의 읽기 및 쓰기 권한을 설정할 수 있습니다. 이렇게 하면 모든 앱이 사용자를 위해 저장되는 각 속성을 읽고 수정하기 위해 갖고 있어야 할 액세스 권한을 제어할 수 있습니다. 예를 들어, 사용자가 유료 고객인지 여부를 나타내는 사용자 지정 속성이 있을 수 있습니다. 앱에서 이 속성을 볼 수 있지만 직접 변경할 수는 없습니다. 대신 관리 도구 또는 백그라운드 프로세스를 사용하여 이 속성을 업데이트합니다. Amazon Cognito 콘솔, API 또는 AWS CLI에서 사용자 속성에 대한 권한을 설정할 수 있습니다. 기본적으로 새 사용자 지정 속성은 해당 속성에 대한 읽기 및 쓰기 권한이 설정된 후에만 사용할 수 있습니다. 기본적으로 새 앱 클라이언트를 만들 때 모든 표준 및 사용자 지정 특성에 대한 읽기 및 쓰기 권한을 앱에 부여합니다. 앱이 필요한 양의 정보만 사용하도록 제한하려면 앱 클라이언트 구성의 속성에 특정 권한을 할당합니다.

앱 클라이언트를 생성할 때 속성 읽기 및 쓰기 권한을 지정하는 것이 가장 좋습니다. 앱 클라이언트에 애플리케이션 작업에 필요한 최소 사용자 속성 집합에 대한 액세스 권한을 부여합니다.

**참고**  
[DescriptionUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html)는 기본값이 아닌 앱 클라이언트 권한을 구성하는 경우에만 `ReadAttributes` 및 `WriteAttributes` 값을 반환합니다.

**속성 권한을 업데이트하려면(AWS Management Console)**

1. 에서 [Amazon Cognito](https://console.aws.amazon.com/cognito/home)로 이동합니다 AWS Management Console. 콘솔에 메시지가 표시되면 자격 AWS 증명을 입력합니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. 목록에서 기존 사용자 풀을 선택합니다.

1. **앱 클라이언트** 메뉴를 선택하고 목록에서 앱 클라이언트를 선택합니다.

1. **속성 권한** 탭에서 **편집**을 선택합니다.

1. **속성 읽기 및 쓰기 권한 편집(Edit attribute read and write permissions)** 페이지에서 읽기 및 쓰기 권한을 구성한 다음 **변경 사항 저장(Save changes)**을 선택합니다.

사용자 지정 속성을 사용하는 각 앱 클라이언트에 대해 이러한 단계를 반복합니다.

각 앱 클라이언트에 대해 속성을 읽기 가능 또는 쓰기 가능으로 표시할 수 있습니다. 표준 속성과 사용자 정의 속성에 모두 적용됩니다. 앱에서 읽기 가능으로 표시한 속성 값을 검색하고 쓰기 가능으로 표시한 속성 값을 설정하거나 수정할 수 있습니다. 앱이 쓰기 권한이 없는 속성에 값을 설정하려고 하면 Amazon Cognito가 `NotAuthorizedException`을 반환합니다. [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html)요청에는 앱 클라이언트 클레임이 있는 액세스 토큰이 포함됩니다. Amazon Cognito는 앱 클라이언트가 읽을 수 있는 속성 값만 반환합니다. 앱의 사용자 ID 토큰에는 읽기 가능한 속성에 해당하는 클레임만 포함됩니다. 모든 앱 클라이언트는 사용자 풀에 필요한 속성을 작성할 수 있습니다. 아직 값이 없는 필수 속성에도 값을 제공하는 경우에만 Amazon Cognito 사용자 풀 API 요청에서 속성 값을 설정할 수 있습니다.

사용자 지정 속성에는 읽기 및 쓰기 권한에 대한 고유한 기능이 있습니다. 사용자 풀에 대해 변경 가능 또는 변경 불가능으로 만들 수 있으며 모든 앱 클라이언트에 대해 읽기 또는 쓰기 속성으로 설정할 수 있습니다.

변경 불가능한 사용자 지정 속성은 사용자 생성 중에 한 번 업데이트할 수 있습니다. 다음 방법으로 변경 불가능한 속성을 채울 수 있습니다.
+ `SignUp`: 사용자가 변경 불가능한 사용자 지정 속성에 대한 쓰기 권한이 있는 앱 클라이언트에 가입합니다. 해당 속성에 대한 값을 제공합니다.
+ 서드 파티 IdP로 로그인: 사용자가 변경 불가능한 사용자 지정 속성에 대한 쓰기 권한이 있는 앱 클라이언트에 로그인합니다. 해당 IdP의 사용자 풀 구성에는 제공된 클레임을 변경 불가능한 속성에 매핑하는 규칙이 있습니다. 사용자가 한 번만 로그인할 수 있기 때문에 가능하지만 실용적이지는 않습니다. 처음 로그인한 후 로그인을 시도하면 Amazon Cognito는 현재 쓰기 불가능한 속성에 대한 매핑 규칙으로 인해 시도를 거부합니다.
+ `AdminCreateUser`: 변경 불가능한 속성에 값을 입력합니다.

### 범위가 있는 속성 권한
<a name="user-pool-settings-attribute-scope-based-permissions"></a>

 AWS SDK 또는 CDK, REST API 또는 로 구성하는 사용자 풀에서 OIDC 범위를 사용하여 앱 클라이언트 읽기 또는 쓰기 액세스를 구성할 AWS CLI수 있습니다`oidc:profile`. `oidc:profile`은 다음 표준 속성에 대한 읽기 또는 쓰기 액세스 권한을 부여합니다.
+ `name`
+ `family_name`
+ `given_name`
+ `middle_name`
+ `nickname`
+ `preferred_username`
+ `profile`
+ `picture`
+ `website`
+ `gender`
+ `birthdate`
+ `zoneinfo`
+ `locale`

이 목록은 [OIDC 사양의 2.4 섹션](https://openid.net/specs/openid-connect-basic-1_0.html#Scopes)에 정의된 대로 `email`, `phone_number`, `sub` 및 `address`를 뺀 OIDC 표준 속성입니다. 앱 클라이언트에 할당할 수 있는 범위에 대한 자세한 내용은 [범위, M2M 및 리소스 서버](cognito-user-pools-define-resource-servers.md) 섹션을 참조하세요.

`oidc:profile` 범위 아래의 속성에 쓰도록 앱 클라이언트를 구성하려면 [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html) 또는 [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html) API 요청에서 [WriteAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-WriteAttributes) 값을 `oidc:profile`로 설정하고 애플리케이션이 수정하도록 허용할 다른 속성을 설정합니다. 마찬가지로 이러한 속성에 대한 읽기 액세스 권한을 부여하려면 [ReadAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-ReadAttributes) 값에 `oidc:profile`을 추가합니다.

사용자 풀을 생성한 후 속성 권한과 범위를 변경할 수 있습니다.