

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

# 사용자 풀 기능 구성
<a name="user-pools-configure-features"></a>

이전 장에서는 Amazon Cognito 콘솔의 지침에 따라 일부 기능을 구성했을 가능성이 높습니다. 이 섹션의 페이지에서는 사용자 풀의 일부 핵심 기능에 대한 자세한 구성 요구 사항을 자세히 살펴봅니다. 앱 클라이언트, 이메일 및 SMS 구성, 사용자 디바이스 기억 등의 옵션에 대한 중요한 참조 정보가 있습니다.

**Topics**
+ [

# 사용자 풀 및 앱 클라이언트 구성 업데이트
](cognito-user-pool-updating.md)
+ [

# 앱 클라이언트를 사용한 애플리케이션별 설정
](user-pool-settings-client-apps.md)
+ [

# 사용자 풀의 사용자 디바이스 작업
](amazon-cognito-user-pools-device-tracking.md)
+ [

# 사용자 풀 분석에 Amazon Pinpoint 사용
](cognito-user-pools-pinpoint-integration.md)
+ [

# Amazon Cognito 사용자 풀에 대한 이메일 설정
](user-pool-email.md)
+ [

# Amazon Cognito 사용자 풀의 SMS 메시지 설정
](user-pool-sms-settings.md)

# 사용자 풀 및 앱 클라이언트 구성 업데이트
<a name="cognito-user-pool-updating"></a>

사용자 풀 또는 앱 클라이언트에서 설정을 변경하려는 경우 몇 번의 클릭만으로 Amazon Cognito 콘솔에서 업데이트를 적용할 수 있습니다. 사용자 풀 설정에서 기능 기반 탭을 탐색하고 이 안내서의 다른 부분에 설명된 대로 필드를 업데이트합니다.

많은 조직이에서 프로그래밍 방식으로 리소스 AWS CloudFormation, AWS SDKs 또는 CDK 기반 애플리케이션 및 기타 자동화 소프트웨어를 관리합니다. 이것이 리소스 관리 모델인 경우 리소스에 대한 변경을 단계적으로 수행할 때 각별히 주의해야 합니다.

API 작업 [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) 및 [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)는 기존 사용자 풀 또는 앱 클라이언트를 업데이트합니다. API 참조에 *속성에 값을 제공하지 않으면 Amazon Cognito가 기본값으로 설정합니다*라는 경고가 함께 제공됩니다. 파라미터가 하나뿐인 업데이트 요청을 제출하면 Amazon Cognito는 해당 파라미터를 선택한 값으로 설정하고 다른 모든 파라미터를 기본값으로 설정합니다. 이렇게 하면 속성 스키마, Lambda 트리거, 이메일 및 SMS 메시지 구성을 포함한 구성을 재설정할 수 있습니다.

또한 일부 설정은 사용자 풀 또는 앱 클라이언트를 생성한 후 잠기며 새 리소스를 생성하지 않는 한 변경할 수 없습니다.

**Topics**
+ [

## 변경할 수 없는 설정
](#cognito-user-pool-updating-fixed-settings)
+ [

## SMS 구성
](#cognito-user-pool-updating-sms)
+ [

## AWS SDK AWS CDK또는 REST API를 사용하여 사용자 풀 업데이트
](#cognito-user-pool-updating-api-cli)

## 변경할 수 없는 설정
<a name="cognito-user-pool-updating-fixed-settings"></a>

사용자 풀이 생성된 후에는 일부 설정을 변경할 수 없습니다. 다음 설정을 변경하려면 새 사용자 풀 또는 앱 클라이언트를 생성해야 합니다.

**참고**  
이전에는 사용자 풀의 이름을 변경할 수 없었습니다. 이 기능이 변경되었습니다. 이제 사용자 풀에 새 표시 이름을 할당할 수 있습니다.

**사용자 풀 ID**  
API 파라미터 이름: [Id/UserPoolId](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserPoolType.html#CognitoUserPools-Type-UserPoolType-ID)  
예를 들어 `us-east-1_EXAMPLE`과 같은 사용자 풀 ID는 Amazon Cognito에서 자동으로 생성되며 변경할 수 없습니다.

**Amazon Cognito 사용자 풀 로그인 옵션**  
API 파라미터 이름: [AliasAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AliasAttributes) 및 [UsernameAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-UsernameAttributes)  
사용자가 로그인할 때 사용자 이름으로 전달할 수 있는 속성입니다. 사용자 풀을 생성할 때 사용자 이름, 이메일 주소, 전화번호 또는 기본 사용자 이름으로 로그인을 허용하도록 선택할 수 있습니다. 사용자 풀 로그인 옵션을 변경하려면 새 사용자 풀을 생성합니다.

**사용자 이름의 대/소문자 구분(Make user name case sensitive)**  
API 파라미터 이름: [UsernameConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-UsernameConfiguration)  
대소문자를 제외하고 다른 사용자 이름과 일치하는 사용자 이름을 생성하면 Amazon Cognito가 동일한 사용자로도, 고유한 사용자로도 취급할 수 있습니다. 자세한 내용은 [사용자 풀 대/소문자 구분](user-pool-case-sensitivity.md) 단원을 참조하십시오. 대소문자 구분을 변경하려면 새 사용자 풀을 생성합니다.

**클라이언트 보안 암호**  
API 파라미터 이름: [GenerateSecret](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-GenerateSecret)  
앱 클라이언트를 만들 때 신뢰할 수 있는 소스만 사용자 풀에 요청하도록 클라이언트 보안 암호를 생성할 수 있습니다. 자세한 내용은 [앱 클라이언트를 사용한 애플리케이션별 설정](user-pool-settings-client-apps.md) 단원을 참조하십시오. 클라이언트 보안 암호를 변경하려면 동일한 사용자 풀에 새 앱 클라이언트를 생성합니다.

**필수 속성**  
API 파라미터 이름: [스키마](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)  
사용자가 가입할 때 또는 사용자를 생성할 때 값을 제공해야 하는 속성입니다. 자세한 내용은 [사용자 속성 작업](user-pool-settings-attributes.md) 단원을 참조하십시오. 필수 속성을 변경하려면 새 사용자 풀을 생성합니다.

**사용자 지정 속성(삭제)**  
API 파라미터 이름: [스키마](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)  
사용자 지정 이름이 있는 속성입니다. 사용자의 사용자 지정 속성 값은 변경할 수 있지만, 사용자 풀에서 사용자 지정 속성을 삭제할 수는 없습니다. 자세한 내용은 [사용자 속성 작업](user-pool-settings-attributes.md) 단원을 참조하십시오. 최대 사용자 지정 속성 수에 도달하고 목록을 수정하려면 새 사용자 풀을 생성합니다.

## SMS 구성
<a name="cognito-user-pool-updating-sms"></a>

사용자 풀에서 SMS 메시지를 활성화한 후에는 비활성화할 수 없습니다.
+ 사용자 풀을 생성할 때 SMS 메시지를 구성하도록 선택한 경우 설정을 완료한 후에는 SMS를 비활성화할 수 없습니다.
+ 생성한 사용자 풀에서 SMS 메시지를 활성화할 수 있지만, 이후에는 SMS를 비활성화할 수 없습니다.
+ Amazon Cognito는 사용자 계정 초대 및 복구, 속성 확인 및 다중 인증(MFA)에 SMS 메시지를 사용할 수 있습니다. SMS 메시지를 활성화한 후에는 언제든지 이러한 함수에 대해 SMS 메시지를 켜거나 끌 수 있습니다.
+ SMS 메시지 구성에는 Amazon SNS를 통해 메시지를 전송하기 위해 Amazon Cognito에 위임하는 IAM 역할이 포함되어 있습니다. 언제든지 할당된 역할을 변경할 수 있습니다.

## AWS SDK AWS CDK또는 REST API를 사용하여 사용자 풀 업데이트
<a name="cognito-user-pool-updating-api-cli"></a>

Amazon Cognito 콘솔에서 사용자 풀 설정을 한 번에 하나의 파라미터로 변경할 수 있습니다. 예를 들어 Lambda 트리거를 추가하려면 **Lambda 트리거 추가**를 선택하고 함수와 트리거 유형을 선택합니다. Amazon Cognito 사용자 풀 API는 사용자 풀 및 앱 클라이언트에 대한 업데이트 작업에 사용자 풀에 대한 전체 파라미터 세트가 필요한 방식으로 구성됩니다. 하지만 콘솔은 다른 사용자 풀 설정으로 이 업데이트 작업을 투명하게 자동화합니다.

의 다른 위치에서 변경하면 변경하려는 설정과 관련이 없을 때 업데이트에 오류가 발생할 AWS 계정 수 있습니다. AWS WAF예를 들어 삭제된 Amazon SES 자격 증명 또는에 대한 IAM 권한 변경. 현재 파라미터 중 하나가 더 이상 유효하지 않으면 설정을 수정할 때까지 설정을 업데이트할 수 없습니다. 이러한 오류가 발생하면 오류 응답을 검사하고 언급된 설정을 검증합니다.

[AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk), [Amazon Cognito 사용자 풀 REST API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html) 및 [AWS SDK](https://aws.amazon.com/developer/tools/)는 Amazon Cognito 리소스의 자동화 및 프로그래밍 구성 도구입니다. Amazon Cognito 콘솔과 같이 이러한 도구를 사용하는 요청도 요청 본문의 전체 리소스 구성으로 설정을 업데이트해야 합니다. 높은 수준에서 다음 프로세스를 수행해야 합니다.

1. 기존 리소스의 구성을 설명하는 작업에서 출력을 캡처합니다.

1. 설정이 변경되면 출력을 수정합니다.

1. 리소스를 업데이트하는 작업에서 수정된 구성을 전송합니다.

다음 절차에서는 [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API 작업을 사용하여 구성을 업데이트합니다. 다른 입력 필드를 사용하는 동일한 접근 방식이 [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)에 적용됩니다.

**중요**  
기존 파라미터에 대한 값을 입력하지 않으면 Amazon Cognito에 이 값이 기본값으로 설정됩니다. 예를 들어 기존 `LambdaConfig`가 있고 `LambdaConfig`를 비어 있는 상태로 `UpdateUserPool`을 제출하면 사용자 풀 트리거에 대한 모든 Lambda 함수 할당이 삭제됩니다. 사용자 풀 구성 변경을 자동화하려는 경우 적절하게 계획합니다.

1. 사용자 풀의 기존 상태를 [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html)로 캡처합니다.

1. `DescribeUserPool`의 출력 형식을 `UpdateUserPool`의 [요청 파라미터](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#API_UpdateUserPool_RequestSyntax)와 일치하도록 지정합니다. 출력 JSON에서 다음 최상위 필드 및 해당 하위 객체를 제거합니다.
   + `Arn`
   + `CreationDate`
   + `CustomDomain`
     + 이 필드를 [UpdateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolDomain.html) API 작업으로 업데이트합니다.
   + `Domain`
     + 이 필드를 [UpdateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolDomain.html) API 작업으로 업데이트합니다.
   + `EmailConfigurationFailure`
   + `EstimatedNumberOfUsers`
   + `Id`
   + `LastModifiedDate`
   + `Name`
   + `SchemaAttributes`
   + `SmsConfigurationFailure`
   + `Status`

1. 결과로 나타나는 JSON이 `UpdateUserPool`의 [요청 파라미터](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#API_UpdateUserPool_RequestSyntax)와 일치하는지 확인합니다.

1. 결과로 나타나는 JSON에서 변경하려는 파라미터를 수정합니다.

1. 수정된 JSON을 요청 입력으로 하여 `UpdateUserPool` API 요청을 제출합니다.

수정된 출력은 AWS CLI에서 `update-user-pool`의 `--cli-input-json` 파라미터에도 사용할 수 있습니다.

또는 다음 AWS CLI 명령을 실행하여에 허용되는 입력 필드에 빈 값이 있는 JSON을 생성합니다`update-user-pool`. 그런 다음 이 필드를 사용자 풀의 기존 값으로 채울 수 있습니다.

```
aws cognito-idp update-user-pool --generate-cli-skeleton --output json
```

다음 명령을 실행하여 앱 클라이언트에 동일한 JSON 객체를 생성합니다.

```
aws cognito-idp update-user-pool-client --generate-cli-skeleton --output json
```

# 앱 클라이언트를 사용한 애플리케이션별 설정
<a name="user-pool-settings-client-apps"></a>

사용자 풀 앱 클라이언트는 Amazon Cognito로 인증되는 모바일 또는 웹 애플리케이션과 상호 작용하는 사용자 풀 내의 구성입니다. 앱 클라이언트는 인증된 API 작업과 인증되지 않은 API 작업을 호출하고 사용자 속성 전체 또는 일부를 읽거나 수정할 수 있습니다. 등록, 로그인 및 암호 찾기 작업을 처리하려면 앱 클라이언트에 대해 앱이 자체 식별을 수행해야 합니다. 이러한 API 요청에는 앱 클라이언트 ID를 사용한 자체 식별 및 선택적 클라이언트 보안 암호를 사용한 권한 부여가 포함되어야 합니다. 개발자는 권한이 있는 클라이언트 앱만 이러한 미인증 작업을 호출할 수 있도록 앱 클라이언트 ID 또는 보안 암호를 보호할 책임이 있습니다. 또한 자격 AWS 증명으로 인증된 API 요청에 서명하도록 앱을 구성하는 경우 사용자 검사로부터 자격 증명을 보호해야 합니다.

사용자 풀에 여러 앱 클라이언트를 생성할 수 있습니다. 앱 클라이언트는 앱의 코드 플랫폼 또는 사용자 풀의 별도 테넌트에 연결할 수 있습니다. 예를 들어 서버 측 애플리케이션에 대한 앱과 다른 Android 앱을 생성할 수 있습니다. 각 앱에는 고유한 앱 클라이언트 ID가 있습니다.

앱 클라이언트 수준에서 다음 사용자 풀 기능에 대한 설정을 적용할 수 있습니다.

1. [분석](cognito-user-pools-pinpoint-integration.md)

1. [관리형 로그인](cognito-user-pools-managed-login.md) IdP, 권한 부여 유형, 콜백 URL 및 사용자 지정

1. [리소스 서버 및 사용자 지정 범위](cognito-user-pools-define-resource-servers.md)

1. [위협 방지](cognito-user-pool-settings-threat-protection.md)

1. [속성 읽기 및 쓰기 권한](user-pool-settings-attributes.md#user-pool-settings-attribute-permissions-and-scopes)

1. [토큰 만료 및 취소](amazon-cognito-user-pools-using-tokens-with-identity-providers.md)

1. [인증 흐름](authentication.md#amazon-cognito-user-pools-authentication-flow)

## 앱 클라이언트 유형
<a name="user-pool-settings-client-app-client-types"></a>

Amazon Cognito에서 앱 클라이언트를 생성할 때 표준 OAuth 클라이언트 유형 **퍼블릭 클라이언트(public client)** 및 **기밀 클라이언트(confidential client)**에 따라 옵션을 미리 채울 수 있습니다. **기밀 클라이언트(confidential client)**를 **클라이언트 보안 암호(client secret)**와 함께 구성합니다. 클라이언트 유형에 대한 자세한 내용은 [IETF RFC 6749 \$12.1](https://datatracker.ietf.org/doc/html/rfc6749#section-2.1)을 참조하세요.

**퍼블릭 클라이언트(Public client)**  
퍼블릭 클라이언트는 브라우저 또는 모바일 디바이스에서 실행됩니다. 퍼블릭 클라이언트에는 신뢰할 수 있는 서버 측 리소스가 없으므로 클라이언트 보안 암호가 없습니다.

**기밀 클라이언트(Confidential client)**  
기밀 클라이언트에는 인증되지 않은 API 작업에 대해 **클라이언트 보안 암호(client secret)**로 신뢰할 수 있는 서버 측 리소스가 있습니다. 앱은 백엔드 서버에서 데몬 또는 셸 스크립트로 실행될 수 있습니다.

**클라이언트 보안 암호(client secret)**  
클라이언트 보안 암호는 앱이 앱 클라이언트에 대한 모든 API 요청에서 사용해야 하는 고정 문자열입니다. 앱 클라이언트에는 `client_credentials`를 부여할 클라이언트 보안 암호가 있어야 합니다. 자세한 내용은 [IETF RFC 6749 \$12.3.1](https://datatracker.ietf.org/doc/html/rfc6749#section-2.3.1)을 참조하세요.  
각 앱 클라이언트는 한 번에 최대 2개의 보안 암호를 가질 수 있으므로 가동 중지 시간 없이 보안 암호를 교체할 수 있습니다. 앱 클라이언트를 생성할 때 Amazon Cognito가 보안 암호 값을 생성하도록 하거나 사용자 지정 보안 암호 값을 제공할 수 있습니다. 앱을 생성한 후에는 보안 암호를 변경할 수 없습니다. [AddUserPoolClientSecret](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AddUserPoolClientSecret.html) API 작업을 사용하여 두 번째 보안 암호를 추가하여 보안 암호를 교체할 수 있습니다. 보안 암호를 추가할 때 Amazon Cognito가 보안 암호 값을 생성하도록 하거나 사용자 지정 보안 암호 값을 제공할 수 있습니다. 보안 암호를 삭제하려면 [DeleteUserPoolClientSecret](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPoolClientSecret.html) API 작업을 사용합니다. 앱 클라이언트와 연결된 유일한 보안 암호는 삭제할 수 없습니다. 앱을 삭제하여 해당 앱 클라이언트 ID를 사용하는 앱의 액세스를 차단할 수도 있습니다.  
Amazon Cognito 콘솔은 애플리케이션 유형에 대해 **기존 웹 애플리케이션** 및 **머신 간 애플리케이션** 옵션을 선택할 때 클라이언트 보안 암호가 있는 앱 클라이언트를 생성합니다. 다음 옵션 중 하나를 선택하여 클라이언트 암호를 생성하거나 [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)를 사용하여 프로그래밍 방식으로 클라이언트를 생성하고 `GenerateSecret`를 `true`로 설정합니다.

기밀 클라이언트와 클라이언트 보안 암호를 공개 앱과 함께 사용할 수 있습니다. Amazon CloudFront 프록시를 사용하여 전송 중 `SECRET_HASH`를 추가합니다. 자세한 내용은 AWS 블로그에서 [Protect public clients for Amazon Cognito by using an Amazon CloudFront proxy(Amazon CloudFront 프록시를 사용하여 Amazon Cognito에 대한 퍼블릭 클라이언트 보호)](https://aws.amazon.com/blogs/security/protect-public-clients-for-amazon-cognito-by-using-an-amazon-cloudfront-proxy/)를 참조하세요.

## JSON 웹 토큰
<a name="user-pool-settings-client-app-token-types"></a>

Amazon Cognito 앱 클라이언트는 다음 유형의 JSON 웹 토큰(JWT)을 발급할 수 있습니다.

**자격 증명(ID) 토큰**  
사용자가 사용자 풀에서 인증되었음을 검증할 수 있는 명령문입니다. OpenID Connect(OIDC)는 OAuth 2.0에서 정의한 액세스 및 새로 고침 토큰 표준에 [ID 토큰 사양](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)을 추가했습니다. ID 토큰에는 앱이 사용자 프로필을 생성하고 리소스를 프로비저닝하는 데 사용할 수 있는 사용자 속성과 같은 자격 증명 정보가 들어 있습니다. 자세한 정보는 [자격 증명(ID) 토큰 이해](amazon-cognito-user-pools-using-the-id-token.md)을 참조하세요.

**액세스 토큰**  
사용자 액세스 권한에 대한 검증 가능한 문입니다. 액세스 토큰에는 OIDC 및 OAuth 2.0의 기능인 [범위](https://datatracker.ietf.org/doc/html/rfc6749#section-3.3)가 포함됩니다. 앱은 백엔드 리소스에 대한 범위를 제공하고 사용자 풀이 사용자 또는 시스템에 API의 데이터 또는 자체 사용자 데이터에 액세스할 수 있는 권한을 부여했음을 입증할 수 있습니다. *사용자 지정 범위*가 있는 액세스 토큰(주로 M2M client-credentials 권한 부여)은 리소스 서버에 대한 액세스를 승인합니다. 자세한 정보는 [액세스 토큰 이해](amazon-cognito-user-pools-using-the-access-token.md)을 참조하세요.

**새로 고침 토큰**  
사용자 토큰이 만료될 때 앱이 사용자 풀에 제공할 수 있는 암호화된 초기 인증 문입니다. refresh-token 요청은 만료되지 않은 새 액세스 및 ID 토큰을 반환합니다. 자세한 정보는 [새로 고침 토큰](amazon-cognito-user-pools-using-the-refresh-token.md)을 참조하세요.

[Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/v2/idp/user-pools)에 있는 사용자 풀의 **앱 클라이언트** 메뉴에서 각 앱 클라이언트에 대해 이러한 토큰의 만료를 설정할 수 있습니다.

## 앱 클라이언트 용어
<a name="cognito-user-pools-app-idp-settings-about"></a>

다음 용어는 Amazon Cognito 콘솔에서 사용할 수 있는 앱 클라이언트 속성입니다.

**허용된 콜백 URLs**  
콜백 URL은 로그인 성공 후 사용자가 리디렉션되는 위치를 나타냅니다. 하나 이상의 콜백 URL을 선택합니다. 콜백 URL은 다음을 수행해야 합니다.  
+ 절대 URI이어야 합니다.
+ 클라이언트로 미리 등록되어야 합니다.
+ 조각 구성요소가 없어야 합니다.
[OAuth 2.0 - 리디렉션 엔드포인트](https://tools.ietf.org/html/rfc6749#section-3.1.2)를 참조하세요.  
테스트 목적으로만 `http://localhost`를 사용하는 경우를 제외하고 Amazon Cognito에서는 `HTTP`가 아니라 `HTTPS`가 필요합니다.  
`myapp://example` 같은 앱 콜백 URL도 지원됩니다.

**허용된 로그아웃 URL**  
로그아웃 URL은 로그아웃 후 사용자가 리디렉션되는 위치를 나타냅니다.

**속성 읽기 및 쓰기 권한**  
사용자 풀에는 각각 고유한 앱 클라이언트와 IdP를 가진 많은 고객이 있을 수 있습니다. 앱과 관련된 사용자 속성에 대해서만 읽기 및 쓰기 액세스 권한을 갖도록 앱 클라이언트를 구성할 수 있습니다. M2M(Machine-to-Machine) 인증과 같은 경우에는 사용자 속성에 대한 액세스 권한을 부여할 수 없습니다.  

**속성 읽기 및 쓰기 권한 구성 시 고려 사항**
+ 앱 클라이언트를 생성하고 속성 읽기 및 쓰기 권한을 사용자 지정하지 않으면 Amazon Cognito는 모든 사용자 풀 속성에 읽기 및 쓰기 권한을 부여합니다.
+ 변경할 수 없는 [사용자 지정 속성](user-pool-settings-attributes.md#user-pool-settings-custom-attributes.title)에 쓰기 액세스 권한을 부여할 수 있습니다. 사용자의 앱 클라이언트는 사용자를 생성 또는 가입시킬 때만 변경 불가능한 사용자 지정 속성에 값을 쓸 수 있습니다. 이후에는 사용자의 변경 불가능한 사용자 지정 속성에 값을 쓸 수 없습니다.
+ 앱 클라이언트는 사용자 풀의 필수 속성에 대한 쓰기 권한을 가져야 합니다. Amazon Cognito 콘솔은 필수 속성을 쓰기 가능으로 자동 설정합니다.
+ 앱 클라이언트가 `email_verified` 또는 `phone_number_verified`에 대한 쓰기 액세스 권한을 갖도록 허용할 수 없습니다. 사용자 풀 관리자는 이러한 값을 수정할 수 있습니다. 사용자는 [속성 확인](signing-up-users-in-your-app.md#allowing-users-to-sign-up-and-confirm-themselves.title)을 통해서만 이러한 속성의 값을 변경할 수 있습니다.

**인증 흐름**  
앱 클라이언트에서 로그인을 허용하는 방법입니다. 앱은 사용자 이름 및 암호, 이메일 및 SMS 메시지 OTP, 패스키 인증자, Lambda 트리거를 통한 사용자 지정 인증, 토큰 새로 고침을 지원할 수 있습니다. 사용자 지정 빌드 애플리케이션에서 사용자 이름 및 암호 인증에 SRP 인증을 사용하는 것이 가장 좋습니다.

**사용자 지정 범위**  
사용자 지정 범위는 **리소스 서버**에서 자체 리소스 서버에 대해 정의할 수 있습니다. 형식은 *resource-server-identifier*/*scope*입니다. [범위, M2M 및 리소스 서버](cognito-user-pools-define-resource-servers.md)을(를) 참조하세요.

**기본 리디렉션 URI**  
타사 IdP를 사용하는 사용자에 대한 인증 요청의 `redirect_uri` 파라미터를 대체합니다. [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 요청의 `DefaultRedirectURI` 파라미터를 사용하여 이 앱 클라이언트 설정을 구성합니다. 이 URL은 앱 클라이언트에 대한 `CallbackURLs`의 멤버여야 합니다. Amazon Cognito는 다음과 같은 경우 인증된 세션을 이 URL로 리디렉션합니다.  

1. 앱 클라이언트에 하나의 [ID 제공업체](#app-client-terms-identity-provider)가 할당되고 여러 [콜백 URL](#app-client-terms-callback-urls)이 정의되어 있습니다. 사용자 풀은 `redirect_uri` 파라미터를 포함하지 않는 경우 [권한 부여 서버](authorization-endpoint.md)에 대한 인증 요청을 기본 리디렉션 URI로 리디렉션합니다.

1. 앱 클라이언트에 하나의 [ID 제공업체](#app-client-terms-identity-provider)가 할당되고 하나의 [콜백 URL](#app-client-terms-callback-urls)이 정의되어 있습니다. 이 시나리오에서는 기본 콜백 URL을 정의할 필요가 없습니다. `redirect_uri` 파라미터를 포함하지 않는 요청은 사용 가능한 하나의 콜백 URL로 리디렉션됩니다.

**자격 증명 공급자**  
사용자 풀 외부 ID 제공업체(IdP) 중 일부 또는 전체를 선택하여 사용자를 인증할 수 있습니다. 앱 클라이언트는 사용자 풀의 로컬 사용자만 인증할 수도 있습니다. 앱 클라이언트에 IdP 추가 시 IdP에 대한 권한 부여 링크를 생성하여 관리형 로그인 페이지에 표시할 수 있습니다. 다중 IdP를 할당할 수도 있지만 최소한 한 개는 할당해야 합니다. 외부 IdP 사용에 대한 자세한 내용은 [타사 ID 제공업체를 통한 사용자 풀 로그인](cognito-user-pools-identity-federation.md) 섹션을 참조하세요.

**OpenID Connect 범위**  
다음 `OAuth` 범위에서 하나 이상을 선택하여 액세스 토큰에 대해 요청될 수 있는 액세스 권한을 지정합니다.  
+ `openid` 범위는 사용자가 ID 토큰과 사용자의 고유 ID를 검색하고 싶어 한다고 선언합니다. 또한 요청의 추가 범위에 따라 전체 또는 일부 사용자 속성을 요청합니다. Amazon Cognito는 사용자가 `openid` 범위를 요청할 때만 ID 토큰을 반환합니다. `openid` 범위는 만료 및 키 ID와 같은 구조적 ID 토큰 클레임을 승인하고 [userInfo 엔드포인트](userinfo-endpoint.md)의 응답으로 받는 사용자 속성을 결정합니다.
  + 요청한 유일한 범위가 `openid`가 되는 경우 Amazon Cognito는 현재 앱 클라이언트가 읽을 수 있는 모든 사용자 속성으로 ID 토큰을 채웁니다. 이 범위의 액세스 토큰에 대한 `userInfo` 응답만으로도 모든 사용자 속성이 반환됩니다.
  + `phone`, `email`, `profile` 또는 ID 토큰과 같은 다른 범위로 `openid`를 요청하고 사용자의 고유 ID와 추가 범위에 의해 정의된 속성을 `userInfo`가 반환하는 경우입니다.
+ `phone` 범위는 `phone_number` 및 `phone_number_verified` 클레임에 대한 액세스 권한을 부여합니다. 이 범위는 `openid` 범위를 통해서만 요청할 수 있습니다.
+ `email` 범위는 `email` 및 `email_verified` 클레임에 대한 액세스 권한을 부여합니다. 이 범위는 `openid` 범위를 통해서만 요청할 수 있습니다.
+ `aws.cognito.signin.user.admin` 범위는 액세스 토큰이 필요한 [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) 및 [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html)와 같은 [Amazon Cognito 사용자 풀 API 작업](authentication-flows-public-server-side.md#user-pools-API-operations)에 대한 액세스 권한을 부여합니다.
+ `profile` 범위는 클라이언트가 읽을 수 있는 모든 사용자 속성에 대한 액세스 권한을 부여합니다. 이 범위는 `openid` 범위를 통해서만 요청할 수 있습니다.
범위에 대한 자세한 내용은 [표준 OIDC 범위](http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims) 목록을 참조하세요.

**OAuth 권한 부여 유형**  
OAuth 권한 부여는 사용자 풀 토큰을 검색하는 인증 방법입니다. Amazon Cognito는 다음 유형의 권한 부여를 지원합니다. 이러한 OAuth 권한 부여를 앱에 통합하려면 도메인을 사용자 풀에 추가해야 합니다.  
**인증 코드 권한 부여**  
인증 코드 권한 부여는 앱이 [Token 엔드포인트](token-endpoint.md)를 사용하여 사용자 풀 토큰과 교환할 수 있는 코드를 생성합니다 인증 코드를 교환하면 앱이 ID, 액세스 및 새로 고침 토큰을 받습니다. 이 OAuth 흐름은 암시적 권한 부여와 마찬가지로 사용자의 브라우저에서 발생합니다. 인증 코드 권한 부여는 Amazon Cognito에서 제공하는 가장 안전한 권한 부여입니다. 토큰이 사용자 세션에 표시되지 않기 때문입니다. 대신 앱은 요청을 생성하여 토큰을 반환하고 이를 보호된 스토리지에 캐시합니다. 자세한 내용은 [IETF 6749 \$11.3.1](https://datatracker.ietf.org/doc/html/rfc6749#section-1.3.1)의 *인증 코드*를 참조하세요.
퍼블릭 클라이언트 앱의 보안 모범 사례는 인증 코드 권한 부여 OAuth 흐름만 활성화하고 코드 교환용 증명 키(PKCE)를 구현하여 토큰 교환을 제한하는 것입니다. PKCE를 사용하는 경우 클라이언트가 토큰 엔드포인트에 원래 인증 요청에서 제시한 것과 동일한 보안 암호를 제공한 경우에만 인증 코드를 교환할 수 있습니다. PKCE에 대한 자세한 내용은 [IETF RFC 7636](https://datatracker.ietf.org/doc/html/rfc7636)을 참조하세요.
**암시적 허용**  
암시적 권한 부여는 [권한 부여 엔드포인트](authorization-endpoint.md)에서 직접 사용자의 브라우저 세션에 액세스 및 ID 토큰을 전달하지만 새로 고침 토큰은 전달하지 않습니다. 암시적 권한 부여를 사용하면 토큰 엔드포인트를 별도로 요청할 필요가 없지만, 암시적 권한 부여는 PKCE와 호환되지 않으며 새로 고침 토큰을 반환하지 않습니다. 이 권한 부여는 인증 코드 권한 부여를 완료할 수 없는 테스트 시나리오와 앱 아키텍처에도 적용할 수 있습니다. 자세한 내용은 [IETF RFC 6749 \$11.3.2](https://datatracker.ietf.org/doc/html/rfc6749#section-1.3.2)의 *암시적 권한 부여*를 참조하세요. 인증 코드 권한 부여 및 암시적 권한 부여를 모두 활성화하고 각 권한 부여를 필요한 경우 사용할 수 있습니다.
**클라이언트 보안 인증 권한 부여**  
클라이언트 보안 인증 권한 부여는 M2M(Machine-to-Machine) 통신에 사용됩니다. 인증 코드 및 암시적 권한 부여는 인증된 인간 사용자에게 토큰을 발급합니다. 클라이언트 보안 인증은 비대화형 시스템에서 API에 범위 기반 권한을 부여합니다. 앱은 토큰 엔드포인트에서 직접 클라이언트 보안 인증 정보를 요청하고 액세스 토큰을 받을 수 있습니다. 자세한 내용은 [IETF RFC 6749 \$11.3.4](https://datatracker.ietf.org/doc/html/rfc6749#section-1.3.4)의 *클라이언트 보안 인증*을 참조하세요. 클라이언트 보안 암호가 있고 인증 코드 또는 암시적 권한 부여를 지원하지 않는 앱 클라이언트에서만 클라이언트 자격 증명 권한 부여를 활성화할 수 있습니다.
사용자 자격으로 클라이언트 보안 인증 정보 흐름을 호출하지 않으므로, 이 권한 부여는 액세스 토큰에 *사용자 지정* 범위만 추가할 수 있습니다. 사용자 지정 범위는 자체 리소스 서버에 대해 정의할 수 있습니다. `openid` 및 `profile` 같은 기본 범위는 비 인간 사용자에게 적용되지 않습니다.  
ID 토큰은 사용자 속성의 검증이기 때문에 M2M 커뮤니케이션과는 관련이 없으며 클라이언트 보안 인증 권한 부여를 통해서도 발급되지 않습니다. [범위, M2M 및 리소스 서버](cognito-user-pools-define-resource-servers.md)을(를) 참조하세요.
클라이언트 자격 증명 부여는 AWS 청구서에 비용을 추가합니다. 자세한 내용은 [Amazon Cognito 요금](https://aws.amazon.com/cognito/pricing)을 참조하세요.

## 앱 클라이언트 생성
<a name="cognito-user-pools-app-idp-settings-console-create"></a>

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

**앱 클라이언트를 생성하려면(콘솔)**

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

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

1. 목록에서 기존 사용자 풀을 선택하거나 사용자 풀을 생성합니다. 두 옵션 모두 애플리케이션별 설정으로 앱 클라이언트를 구성하라는 메시지를 표시합니다.

1. 애플리케이션 아키텍처를 반영하는 **애플리케이션 유형**을 선택합니다.

1. 표시 식별자를 사용하여 **애플리케이션의 이름을 지정합니다**.

1. **반환 URL**을 입력합니다.

1. **앱 클라이언트 생성**을 선택합니다. 앱 클라이언트를 생성한 후 고급 옵션을 변경할 수 있습니다.

1. Amazon Cognito에서 앱 클라이언트 세부 정보로 돌아갑니다. 애플리케이션의 예제 코드에 액세스하려면 **빠른 설정 가이드** 탭에서 플랫폼을 선택합니다.

------
#### [ AWS CLI ]

```
aws cognito-idp create-user-pool-client --user-pool-id MyUserPoolID --client-name myApp
```

**참고**  
CLI가 원격 파라미터 파일로 처리하지 않도록 콜백 및 로그아웃 URL에 JSON 형식을 사용합니다.  

```
--callback-urls "["https://example.com"]"
--logout-urls "["https://example.com"]"
```

자세한 내용은 AWS CLI 명령 참조를 참조하세요. [create-user-pool-client](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html)

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

[CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html) API 요청을 생성합니다. 기본값으로 설정하지 않으려는 모든 파라미터의 값을 지정해야 합니다.

------

## 사용자 풀 앱 클라이언트(AWS CLI 및 AWS API) 업데이트
<a name="cognito-user-pools-app-idp-settings-cli-api-update-user-pool-client"></a>

에 다음 명령을 AWS CLI입력합니다.

```
aws cognito-idp update-user-pool-client --user-pool-id  "MyUserPoolID" --client-id "MyAppClientID" --allowed-o-auth-flows-user-pool-client --allowed-o-auth-flows "code" "implicit" --allowed-o-auth-scopes "openid" --callback-urls "["https://example.com"]" --supported-identity-providers "["MySAMLIdP", "LoginWithAmazon"]"
```

명령이 성공하면가 확인을 AWS CLI 반환합니다.

```
{
    "UserPoolClient": {
        "ClientId": "MyClientID",
        "SupportedIdentityProviders": [
            "LoginWithAmazon",
            "MySAMLIdP"
        ],
        "CallbackURLs": [
            "https://example.com"
        ],
        "AllowedOAuthScopes": [
            "openid"
        ],
        "ClientName": "Example",
        "AllowedOAuthFlows": [
            "implicit",
            "code"
        ],
        "RefreshTokenValidity": 30,
        "AuthSessionValidity": 3,
        "CreationDate": 1524628110.29,
        "AllowedOAuthFlowsUserPoolClient": true,
        "UserPoolId": "MyUserPoolID",
        "LastModifiedDate": 1530055177.553
    }
}
```

자세한 내용은 [update-user-pool-client](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html) AWS CLI 명령 참조를 참조하세요.

AWS API: [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)

## 사용자 풀 앱 클라이언트(AWS CLI 및 AWS API)에 대한 정보 가져오기
<a name="cognito-user-pools-app-idp-settings-cli-api-describe-user-pool-client"></a>

```
aws cognito-idp describe-user-pool-client --user-pool-id MyUserPoolID --client-id MyClientID
```

자세한 내용은 AWS CLI 명령 참조를 참조하세요. [describe-user-pool-client](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/describe-user-pool-client.html).

AWS API: [DescribeUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html)

## 사용자 풀(AWS CLI 및 AWS API)의 모든 앱 클라이언트 정보 나열
<a name="cognito-user-pools-app-idp-settings-cli-api-list-user-pool-clients"></a>

```
aws cognito-idp list-user-pool-clients --user-pool-id "MyUserPoolID" --max-results 3
```

자세한 내용은 list-user-pool-clients AWS CLI 명령 참조를 참조하세요. [list-user-pool-clients](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/list-user-pool-clients.html)

AWS API: [ListUserPoolClients](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUserPoolClients.html)

## 사용자 풀 앱 클라이언트(AWS CLI 및 AWS API) 삭제
<a name="cognito-user-pools-app-idp-settings-cli-api-delete-user-pool-client"></a>

```
aws cognito-idp delete-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID"
```

자세한 내용은 AWS CLI 명령 참조를 참조하세요. [delete-user-pool-client](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/delete-user-pool-client.html)

AWS API: [DeleteUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPoolClient.html)

# 사용자 풀의 사용자 디바이스 작업
<a name="amazon-cognito-user-pools-device-tracking"></a>

Amazon Cognito 사용자 풀 API로 로컬 사용자 풀 사용자를 로그인하면 [위협 방지](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-threat-protection.html)의 사용자 활동 로그를 각 디바이스와 연결할 수 있으며, 선택적으로 사용자가 신뢰할 수 있는 디바이스를 사용하는 경우 다중 인증(MFA)을 건너뛰도록 허용할 수 있습니다. Amazon Cognito는 디바이스 정보가 아직 포함되어 있지 않은 모든 로그인에 대한 응답에 디바이스 키를 포함시킵니다. 디바이스 키의 형식은 `Region_UUID`입니다. 디바이스 키, SRP(Secure Remote Password) 라이브러리, 디바이스 인증을 허용하는 사용자 풀을 사용하면, 앱 사용자에게 현재 디바이스를 신뢰하라는 메시지를 표시하고 로그인 시 MFA 코드를 묻는 메시지를 더 이상 표시하지 않을 수 있습니다.

**Topics**
+ [

## 기억된 디바이스 설정
](#amazon-cognito-user-pools-setting-up-remembered-devices)
+ [

## 디바이스 키 가져오기
](#user-pools-remembered-devices-getting-a-device-key)
+ [

## 디바이스로 로그인
](#user-pools-remembered-devices-signing-in-with-a-device)
+ [

## 디바이스 보기, 업데이트 및 지우기
](#user-pools-remembered-devices-viewing-updating-forgetting)

## 기억된 디바이스 설정
<a name="amazon-cognito-user-pools-setting-up-remembered-devices"></a>

Amazon Cognito 사용자 풀을 사용하면 각 사용자의 디바이스를 고유한 디바이스 식별자인 디바이스 키와 연결할 수 있습니다. 로그인 시 디바이스 키를 제시하고 디바이스 인증을 수행할 때 *신뢰할 수 있는 디바이스* 인증 흐름으로 애플리케이션을 구성할 수 있습니다. 이 흐름에서 애플리케이션은 앱의 보안 요구 사항 또는 사용자의 기본 설정에 따라 나중에 MFA 없이 로그인할 수 있는 선택 사항을 사용자에게 제공할 수 있습니다. 해당 기간이 끝나면 애플리케이션은 디바이스 상태를 *기억하지 않음*으로 변경하고 사용자는 디바이스 기억을 확인할 때까지 MFA로 로그인해야 합니다. 예를 들어, 애플리케이션은 사용자에게 30일, 60일 또는 90일 동안 디바이스를 신뢰하라는 메시지를 표시할 수 있습니다. 이 날짜를 사용자 지정 속성에 저장할 수 있으며 해당 날짜에 디바이스의 기억 상태를 변경할 수 있습니다. 그런 다음 사용자에게 MFA 코드를 제출하도록 다시 프롬프트하고 인증에 성공한 후 디바이스를 다시 기억하도록 설정해야 합니다.

1. 기억된 디바이스는 MFA가 활성화된 사용자 풀에서만 MFA를 재정의할 수 있습니다.

사용자가 기억된 디바이스로 로그인하면 인증 흐름에서 추가 디바이스 인증을 수행해야 합니다. 자세한 내용은 [디바이스로 로그인](#user-pools-remembered-devices-signing-in-with-a-device) 단원을 참조하십시오.

**디바이스 추적** 내 사용자 풀의 **로그인** 메뉴에서 사용자 풀이 디바이스를 기억하도록 구성합니다. Amazon Cognito 콘솔을 통해 기억된 디바이스 기능을 설정할 때, [**항상(Always)**], [**사용자 옵트인(User Opt-In)**] 및 [**아니요(No)**]라는 세 가지 옵션이 제공됩니다.

**기억하지 않음**  
사용자 풀이 사용자가 로그인할 때 디바이스를 기억하라는 메시지를 표시하지 않습니다.

**항상 기억**  
앱이 사용자의 디바이스를 확인하면 사용자 풀이 항상 디바이스를 기억하고 향후 디바이스 로그인에 성공할 때 MFA 챌린지를 반환하지 않습니다.

**사용자 옵트인**  
앱이 사용자의 디바이스를 확인하더라도 사용자 풀이 MFA 챌린지를 자동으로 억제하지 않습니다. 사용자에게 디바이스를 기억할지 여부를 선택하라는 메시지를 표시해야 합니다.

**항상 기억** 또는 **사용자 옵트인**을 선택하는 경우, Amazon Cognito는 사용자가 미확인 디바이스에서 로그인할 때마다 디바이스 식별자 키와 보안 암호를 생성합니다. 디바이스 키는 사용자가 디바이스 인증을 수행할 때 앱이 사용자 풀에 보내는 초기 식별자입니다.

자동으로 기억되든 옵트인되든 관계없이 확인된 각 사용자 디바이스에서 디바이스 식별자 키와 보안 암호를 사용하여 사용자가 로그인할 때마다 디바이스를 인증할 수 있습니다.

또한 [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 요청에서 사용자 풀의 기억된 디바이스 설정을 구성할 수 있습니다. 자세한 내용은 [DeviceConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-DeviceConfiguration) 속성을 참조하세요.

Amazon Cognito 사용자 풀 API에는 기억된 디바이스에 대한 추가 작업이 있습니다.

1. [ListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListDevices.html) 및 [AdminListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListDevices.html)는 사용자에 대한 디바이스 키 및 해당 메타데이터 목록을 반환합니다.

1. [GetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetDevice.html) 및 [AdminGetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetDevice.html)는 단일 디바이스에 대한 디바이스 키와 메타데이터를 반환합니다.

1. [UpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html) 및 [AdminUpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateDeviceStatus.html)는 사용자의 디바이스를 기억됨 또는 기억되지 않음으로 설정합니다.

1. [ForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgetDevice.html) 및 [AdminForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminForgetDevice.html)는 프로필에서 사용자의 확인된 디바이스를 제거합니다.

이름이 `Admin`으로 시작하는 API 작업은 서버측 앱에서 사용하기 위한 것이며 IAM 보안 인증 정보로 승인되어야 합니다. 자세한 내용은 [API, OIDC 및 관리형 로그인 페이지 인증 이해](authentication-flows-public-server-side.md#user-pools-API-operations) 단원을 참조하십시오.

## 디바이스 키 가져오기
<a name="user-pools-remembered-devices-getting-a-device-key"></a>

사용자가 사용자 풀 API를 사용하여 로그인하고 인증 파라미터에 `DEVICE_KEY`로 디바이스 키를 포함하지 않을 때마다 Amazon Cognito는 응답으로 새 디바이스 키를 반환합니다. 퍼블릭 클라이언트측 앱에서는 향후 요청에 포함할 수 있도록 앱 스토리지에 디바이스 키를 저장합니다. 기밀 서버측 앱에서는 사용자의 디바이스 키로 브라우저 쿠키 또는 다른 클라이언트측 토큰을 설정합니다.

사용자가 신뢰할 수 있는 디바이스로 로그인하려면 먼저 앱에서 디바이스 키를 확인하고 추가 정보를 제공해야 합니다. Amazon Cognito에 [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html) 요청을 생성하여 디바이스 키, 친숙한 이름, 암호 확인 도구 및 솔트를 사용해 사용자의 디바이스를 확인합니다. 사용자 풀에 옵트인 디바이스 인증을 구성한 경우, Amazon Cognito는 `ConfirmDevice` 요청에 응답하여 사용자가 현재 디바이스를 기억할지 여부를 선택해야 한다는 메시지를 표시합니다. [UpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html) 요청에서 사용자의 선택 사항으로 응답합니다.

사용자의 디바이스를 확인하지만 기억하도록 설정하지 않은 경우 Amazon Cognito는 연결을 저장하지만 디바이스 키를 제공할 때 디바이스 이외 로그인을 진행합니다. 디바이스는 사용자 보안 및 문제 해결에 유용한 로그를 생성할 수 있습니다. 확인되었지만 기억되지 않은 디바이스는 로그인 기능을 활용하지 않지만 보안 모니터링 로그 기능은 활용합니다. 앱 클라이언트에 대한 위협 방지 기능을 활성화하고 요청에 디바이스 지문을 인코딩하면 Amazon Cognito가 사용자 이벤트를 확인된 디바이스와 연결합니다.

**새 디바이스 키를 얻으려면**

1. [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API 요청으로 사용자의 로그인 세션을 시작합니다.

1. 사용자의 로그인 세션이 완료되었음을 표시하는 JSON 웹 토큰(JWT)을 받을 때까지 [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)를 사용하여 모든 인증 챌린지에 응답합니다.

1. 앱에서 Amazon Cognito가 `RespondToAuthChallenge` 또는 `InitiateAuth` 응답의 `NewDeviceMetadata`에 반환하는 값(`DeviceGroupKey` 및 `DeviceKey`)을 기록합니다.

1. 사용자를 위한 새 SRP 보안 암호(솔트 및 암호 검증자)를 생성합니다. 이 기능은 SRP 라이브러리를 제공하는 SDK에서 사용할 수 있습니다.

1. 사용자에게 디바이스 이름을 입력하라는 메시지를 표시하거나 사용자의 디바이스 특성에서 이름을 생성합니다.

1. [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html) API 요청에서 사용자의 액세스 토큰, 디바이스 키, 디바이스 이름 및 SRP 보안 암호를 제공합니다. 사용자 풀이 디바이스를 **항상 기억**하도록 설정된 경우 사용자 등록이 완료됩니다.

1. Amazon Cognito가 `"UserConfirmationNecessary": true`로 `ConfirmDevice`에 응답한 경우, 사용자에게 디바이스를 기억할지 선택하라는 메시지를 표시합니다. 사용자가 디바이스를 기억하겠다고 확인하면 사용자의 액세스 토큰, 디바이스 키, `"DeviceRememberedStatus": "remembered"` 등을 사용하여 [UpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html) API 요청을 생성합니다.

1. Amazon Cognito에 디바이스를 기억하도록 지시한 경우, 다음에 로그인할 때 MFA 챌린지 대신 `DEVICE_SRP_AUTH` 챌린지가 표시됩니다.

## 디바이스로 로그인
<a name="user-pools-remembered-devices-signing-in-with-a-device"></a>

사용자의 디바이스를 기억하도록 구성한 후에는 사용자가 동일한 디바이스 키로 로그인할 때 Amazon Cognito에서 더 이상 MFA 코드 제출을 요구하지 않습니다. 디바이스 인증은 MFA 인증 챌린지를 디바이스 인증 챌린지로 대체할 뿐입니다. 디바이스 인증만으로는 사용자가 로그인될 수 없습니다. 사용자는 먼저 암호 또는 사용자 지정 챌린지로 인증을 완료해야 합니다. 기억된 디바이스에서 사용자를 인증하는 프로세스는 다음과 같습니다.

[사용자 지정 인증 챌린지 Lambda 트리거](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-challenge.html)를 사용하는 흐름에서 디바이스 인증을 수행하려면 [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API 요청에 `DEVICE_KEY` 파라미터를 전달합니다. 사용자가 모든 챌린지에 성공하고 `CUSTOM_CHALLENGE` 챌린지가 `true`인 `issueTokens` 값을 반환하면 Amazon Cognito는 하나의 최종 `DEVICE_SRP_AUTH` 챌린지를 반환합니다.

**디바이스로 로그인하려면**

1. 클라이언트 스토리지에서 사용자의 디바이스 키를 검색합니다.

1. [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API 요청으로 사용자의 로그인 세션을 시작합니다. `USER_SRP_AUTH`, `REFRESH_TOKEN_AUTH`, `USER_PASSWORD_AUTH` 또는 `CUSTOM_AUTH`의 `AuthFlow`를 선택합니다. `AuthParameters`에서 사용자의 디바이스 키를 `DEVICE_KEY` 파라미터에 추가하고 선택한 로그인 흐름에 필요한 기타 파라미터를 포함합니다.

   1. 인증 챌린지에 대한 `PASSWORD_VERIFIER` 응답의 파라미터에 `DEVICE_KEY`를 전달할 수도 있습니다.

1. 응답으로 `DEVICE_SRP_AUTH` 챌린지를 받을 때까지 챌린지 응답을 완료합니다.

1. [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) API 요청에서 `DEVICE_SRP_AUTH`의 `ChallengeName`과 `USERNAME`, `DEVICE_KEY` 및 `SRP_A`에 대한 파라미터를 전송합니다.

1. Amazon Cognito가 `DEVICE_PASSWORD_VERIFIER` 챌린지로 응답합니다. 이 챌린지 응답에는 `SECRET_BLOCK` 및 `SRP_B` 값이 포함됩니다.

1. SRP 라이브러리를 사용하여 `PASSWORD_CLAIM_SIGNATURE`, `PASSWORD_CLAIM_SECRET_BLOCK`, `TIMESTAMP`, `USERNAME` 및 `DEVICE_KEY` 파라미터를 생성하고 제출합니다. 추가 `RespondToAuthChallenge` 요청으로 제출해야 합니다.

1. 사용자의 JWT를 받을 때까지 추가 챌린지를 완료합니다.

다음 유사 코드는 `DEVICE_PASSWORD_VERIFIER` 챌린지 응답의 값을 계산하는 방법을 보여줍니다. 디바이스를 사용한 SRP 인증의 경우 새로운 고엔트로피 암호 `DeviceSecret`, 솔트 및 관련 암호 확인자 등 사용자를 위한 *새* SRP 암호를 생성합니다. 이러한 값은 사용자의 SRP 인증에 사용되는 암호, 솔트 및 확인자와 다릅니다. 디바이스 인증에만 사용되며 디바이스에만 저장됩니다. 사용자의 디바이스에 대한 SRP 보안 암호를 생성하는 함수는 다양한 SDK에서 사용할 수 있는 [SRP 라이브러리](https://github.com/secure-remote-password/implementations)에서 사용할 수 있습니다.

```
PASSWORD_CLAIM_SECRET_BLOCK = SECRET_BLOCK
TIMESTAMP = "Tue May 7 00:09:40 UTC 2025"
k = SHA256(N || g) as a non-negative integer in big-endian
u = SHA256(SRP_A || SRP_B) as a non-negative integer in big-endian
x = SHA256(salt || SHA256(DeviceGroupKey || DeviceKey || ":" || DeviceSecret)) as a non-negative integer in big-endian
S_USER = (SRP_B - k * g^x)^(a + u * x) % N
K_USER = HKDF_HMAC_SHA256(salt=u, ikm=S_USER, info="Caldera Derived Key", length=16 bytes)
PASSWORD_CLAIM_SIGNATURE = Base64(HMAC_SHA256(key=K_USER, message=(DeviceGroupKey || DeviceKey || PASSWORD_CLAIM_SECRET_BLOCK || TIMESTAMP)))
```

## 디바이스 보기, 업데이트 및 지우기
<a name="user-pools-remembered-devices-viewing-updating-forgetting"></a>

Amazon Cognito API를 사용하여 앱에서 다음 기능을 구현할 수 있습니다.

1. 사용자의 현재 디바이스에 대한 정보를 표시합니다.

1. 모든 사용자 디바이스 목록을 표시합니다.

1. 디바이스를 지웁니다.

1. 디바이스 기억 상태를 업데이트합니다.

다음 설명의 API 요청을 승인하는 액세스 토큰에는 `aws.cognito.signin.user.admin` 범위가 포함되어야 합니다. Amazon Cognito는 Amazon Cognito 사용자 풀 API로 생성하는 모든 액세스 토큰에 이 범위에 대한 클레임을 추가합니다. 서드 파티 IdP는 Amazon Cognito에 인증하는 사용자의 디바이스와 MFA를 별도로 관리해야 합니다. 관리형 로그인에서는 `aws.cognito.signin.user.admin` 범위를 요청할 수 있지만, 관리형 로그인은 자동으로 디바이스 정보를 고급 보안 사용자 로그에 추가하며, 디바이스를 기억하는 기능을 제공하지 않습니다.

**디바이스에 대한 정보 표시**  
사용자 디바이스에 대한 정보를 쿼리하여 디바이스가 현재 사용 중인지 확인할 수 있습니다. 예를 들어 90일 동안 로그인하지 않은 기억된 디바이스를 비활성화할 수 있습니다.
+ 퍼블릭 클라이언트 앱에 사용자의 디바이스 정보를 표시하려면 [GetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetDevice.html) API 요청에서 사용자의 액세스 키와 디바이스 키를 제출합니다.
+ 기밀 클라이언트 앱에 사용자의 디바이스 정보를 표시하려면 자격 AWS 증명으로 [AdminGetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetDevice.html) API 요청에 서명하고 사용자의 사용자 이름, 디바이스 키 및 사용자 풀을 제출합니다.

**모든 사용자 디바이스 목록 표시**  
모든 사용자 디바이스 및 속성 목록을 표시할 수 있습니다. 예를 들어 현재 디바이스가 기억된 디바이스와 일치하는지 확인할 수 있습니다.
+ 퍼블릭 클라이언트 앱에서는 [ListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListDevices.html) API 요청으로 사용자의 액세스 토큰을 제출합니다.
+ 기밀-클라이언트 앱에서 자격 AWS 증명으로 [AdminListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListDevices.html) API 요청에 서명하고 사용자의 사용자 이름과 사용자 풀을 제출합니다.

**디바이스 지우기**  
사용자의 디바이스 키를 삭제할 수 있습니다. 사용자가 더 이상 디바이스를 사용하지 않는 것으로 확인되거나 비정상적인 활동을 탐지하여 사용자에게 MFA를 다시 완료하도록 요구하려는 경우 이 방법을 사용하는 것이 좋습니다. 나중에 디바이스를 다시 등록하려면 새 디바이스 키를 생성하여 저장해야 합니다.
+ 퍼블릭 클라이언트 앱에서는 [ForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgetDevice.html) API 요청으로 사용자의 디바이스 키와 액세스 토큰을 제출합니다.
+ 기밀 클라이언트 앱에서는 [AdminForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminForgetDevice.html) API 요청으로 사용자의 디바이스 키와 액세스 토큰을 제출합니다.

# 사용자 풀 분석에 Amazon Pinpoint 사용
<a name="cognito-user-pools-pinpoint-integration"></a>

**참고**  
**지원 종료 공지:** 2026년 10월 30일에 AWS 는 Amazon Pinpoint에 대한 지원을 종료합니다. 2026년 10월 30일 이후에는 Amazon Pinpoint 콘솔 또는 Amazon Pinpoint 리소스(엔드포인트, 세그먼트, 캠페인, 여정, 분석)에 더 이상 액세스할 수 없습니다. 자세한 내용은 [Amazon Pinpoint 지원 종료](https://docs.aws.amazon.com/console/pinpoint/migration-guide)를 참조하세요. **참고:** SMS, 음성, 모바일 푸시, OTP 및 전화번호 검증과 관련된 APIs는이 변경의 영향을 받지 않으며 AWS 최종 사용자 메시징에서 지원됩니다.

Amazon Cognito 사용자 풀은 Amazon Pinpoint와 통합되어 Amazon Cognito 사용자 풀에 대한 분석을 제공하고 Amazon Pinpoint 캠페인을 위한 사용자 데이터를 보강합니다. Amazon Pinpoint는 분석 및 표적화된 캠페인을 제공하여 푸시 알림을 사용하는 모바일 앱에서 사용자 참여를 유도합니다. Amazon Cognito 사용자 풀의 Amazon Pinpoint 분석 지원을 통해 Amazon Pinpoint 콘솔에서 사용자 풀 가입, 로그인, 인증 실패, 일 실사용자(DAU) 및 월 실사용자(MAU)를 추적할 수 있습니다. 디바이스 플랫폼, 디바이스 로캘 및 앱 버전과 같은 다양한 날짜 범위 또는 속성에 대한 데이터를 자세히 확인할 수 있습니다.

앱의 사용자 지정 속성을 설정할 수도 있습니다. 그런 다음 Amazon Pinpoint에서 사용자를 세분화하고 대상 푸시 알림에 전송하는데 이를 사용할 수 있습니다. Amazon Cognito 콘솔의 **앱 클라이언트** 메뉴에서 앱 클라이언트에 대한 **분석** 구성에서 **Amazon Pinpoint와 사용자 속성 데이터 공유**를 선택하면 Amazon Pinpoint에서 사용자 이메일 주소와 전화번호에 대한 추가 엔드포인트를 생성합니다.

Amazon Cognito 콘솔을 사용하여 사용자 풀에서 Amazon Pinpoint 분석을 활성화하면 Amazon Cognito가 사용자 풀을 위해 Amazon Pinpoint에 API 요청을 보낼 때 Amazon Cognito가 맡는 [서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)도 생성됩니다. 분석 구성을 추가하는 IAM 보안 주체에게는 [CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) 권한이 있어야 합니다. 이 서비스 연결 역할은 [AWSServiceRoleForAmazonCognitoIdp](https://console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/AWSServiceRoleForAmazonCognitoIdp)입니다. 자세한 내용은 [Amazon Cognito에 서비스 연결 역할 사용](using-service-linked-roles.md) 단원을 참조하십시오.

Amazon Cognito API에서 앱 클라이언트에 `AnalyticsConfiguration`을 적용하면 Amazon Pinpoint의 사용자 지정 IAM 역할과 이 역할을 맡을 외부 ID를 할당할 수 있습니다. 역할은 `cognito-idp` 서비스 보안 주체를 신뢰해야 하며, 역할 신뢰 정책에 외부 ID가 필요한 경우, 해당 ID가 `AnalyticsConfiguration`과 일치해야 합니다. **Amazon Pinpoint 프로젝트**를 위한 역할 `cognito-idp:Describe*` 권한 및 다음 권한을 부여해야 합니다.
+ `mobiletargeting:UpdateEndpoint`
+ `mobiletargeting:PutEvents`

## Amazon Cognito 및 Amazon Pinpoint 리전 가용성
<a name="cognito-user-pools-find-region-mappings"></a>

다음 표에는 다음 조건 중 하나를 충족하는 Amazon Cognito와 Amazon Pinpoint 간의 AWS 리전 매핑이 나와 있습니다.
+ Amazon Pinpoint 프로젝트는 미국 동부(버지니아 북부)(us-east-1) 리전에서만 사용할 수 있습니다.
+ Amazon Pinpoint 프로젝트는 동일한 리전 *또는* 미국 동부(버지니아 북부)(us-east-1) 리전에서만 사용할 수 있습니다.

기본적으로 Amazon Cognito는 동일한 AWS 리전에 있는 Amazon Pinpoint 프로젝트에만 분석을 전송할 수 있습니다. 다음 표에 나오는 지역과 Amazon Pinpoint를 사용할 수 없는 지역에는 이 규칙이 적용되지 않습니다.

다음 리전에서 Amazon Pinpoint를 사용할 수 없습니다. 이러한 리전에 있는 Amazon Cognito 사용자 풀은 분석을 지원하지 않습니다.
+ 유럽(밀라노)
+ Middle East (Bahrain)
+ 아시아 태평양(오사카)
+ 이스라엘(텔아비브)
+ 아프리카(케이프타운)
+ 아시아 태평양(자카르타)
+ 아시아 태평양(말레이시아)

이 표에서는 Amazon Cognito 사용자 풀을 구축한 리전과 Amazon Pinpoint에 있는 대응하는 리전 간의 관계를 확인할 수 있습니다. Amazon Pinpoint 프로젝트를 Amazon Cognito와 통합하려면 사용 가능한 리전에서 Amazon Pinpoint 프로젝트를 구성해야 합니다.


| Amazon Cognito 사용자 풀 리전 | Amazon Pinpoint 프로젝트용 리전 | 
| --- | --- | 
|  ap-northeast-1  |  us-east-1  | 
|  ap-northeast-2  |  us-east-1  | 
|  ap-south-1  |  us-east-1, ap-south-1  | 
|  ap-southeast-1  |  us-east-1  | 
|  ap-southeast-2  |  us-east-1, ap-southeast-2  | 
|  ca-central-1  |  us-east-1  | 
|  eu-central-1  |  us-east-1, eu-central-1  | 
|  eu-west-1  |  us-east-1, eu-west-1  | 
|  eu-west-2  |  us-east-1  | 
|  us-east-1  |  us-east-1  | 
|  us-east-2  |  us-east-1  | 
|  us-west-2  |  us-east-1, us-west-2  | 

**리전 매핑 예**
+ ap-northeast-1에 사용자 풀을 생성하는 경우 us-east-1에 Amazon Pinpoint 프로젝트를 생성할 수 있습니다.
+ ap-south-1에 사용자 풀을 생성하는 경우 us-east-1 또는 ap-south-1에 Amazon Pinpoint 프로젝트를 생성할 수 있습니다.

**참고**  
이전 표의 프로젝트를 AWS 리전 제외한 모든 항목에 대해 Amazon Cognito는 사용자 풀과 동일한 리전의 Amazon Pinpoint 프로젝트만 사용할 수 있습니다. 사용자 풀을 구축한 리전에서 Amazon Pinpoint를 사용할 수 없다면, Amazon Cognito는 해당 리전에서 Amazon Pinpoint 분석을 지원하지 않습니다. 자세한 AWS 리전 정보는 [Amazon Pinpoint 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/pinpoint.html)을 참조하세요.

### Amazon Pinpoint 분석 설정 지정(AWS Management Console)
<a name="cognito-user-pools-pinpoint-integration-console"></a>

분석 데이터를 Amazon Pinpoint로 보내도록 Amazon Cognito 사용자 풀을 구성할 수 있습니다. Amazon Cognito는 로컬 사용자에 대한 분석 데이터만 Amazon Pinpoint로 전송합니다. Amazon Pinpoint 프로젝트와 연결되도록 사용자 풀을 구성한 후에는 `AnalyticsMetadata`를 API 요청에 포함해야 합니다. 자세한 내용은 [앱을 Amazon Pinpoint와 통합](#cognito-user-pools-pinpoint-integration-client) 단원을 참조하십시오.

**분석 설정을 지정하려면**

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

1. **User Pools**(사용자 풀)을 선택하고 목록에서 기존 사용자 풀을 선택합니다.

1. **앱 클라이언트** 메뉴를 선택하고 업데이트하려는 앱 클라이언트를 선택합니다.

1. **분석** 탭의 **Pinpoint 분석**에서 **활성화**를 선택합니다.

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

1. **Amazon Pinpoint project**(Amazon Pinpoint 프로젝트)를 선택하거나 **Create Amazon Pinpoint project**(Amazon Pinpoint 프로젝트 생성)를 선택합니다.
**참고**  
Amazon Pinpoint 프로젝트 ID는 Amazon Pinpoint 프로젝트에 대해 고유한 32자 문자열입니다. 이 ID는 Amazon Pinpoint 콘솔에 나열됩니다.  
Amazon Pinpoint 프로젝트에 여러 Amazon Cognito 앱을 매핑할 수 있습니다. 그러나 각 Amazon Cognito 앱은 하나의 Amazon Pinpoint 프로젝트에만 매핑될 수 있습니다.  
Amazon Pinpoint에서 각 프로젝트는 단일 앱이어야 합니다. 예를 들어, 게임 개발자에게 두 개의 게임이 있고 두 게임 모두 동일한 Amazon Cognito 사용자 풀을 사용한다 하더라도 각 게임은 개별 Amazon Pinpoint 프로젝트입니다. Amazon Pinpoint 프로젝트에 대한 자세한 내용은 [Amazon Pinpoint에서 프로젝트 생성](https://docs.aws.amazon.com/push-notifications/latest/userguide/mobile-push.html#mobile-push-create-project)을 참조하세요.

1. Amazon Cognito에서 이메일 주소와 전화 번호를 Amazon Pinpoint로 보내 사용자를 위한 추가 엔드포인트를 생성하게 하고 싶다면, **User data sharing**(사용자 데이터 공유)에서 **Share user data with Amazon Pinpoint**(Amazon Pinpoint와 사용자 데이터 공유)를 선택합니다. 사용자가 자신의 이메일 주소와 전화 번호를 확인하면, Amazon Cognito는 사용자 계정에 사용할 수 있는 경우에만 이를 Amazon Pinpoint와 공유합니다.
**참고**  
*엔드포인트*는 Amazon Pinpoint를 사용하여 푸시 알림이 전송될 수 있는 사용자 디바이스를 고유하게 식별합니다. 엔드포인트에 대한 자세한 내용은 *Amazon Pinpoint 개발자 가이드*에서 [엔드포인트 추가](https://docs.aws.amazon.com/pinpoint/latest/developerguide/endpoints.html)를 참조하세요.

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

### Amazon Pinpoint 분석 설정(AWS CLI 및 AWS API) 지정
<a name="cognito-user-pools-pinpoint-integration-cli-api"></a>

다음 명령을 사용하여 사용자 풀에 대한 Amazon Pinpoint 분석 설정을 지정합니다.

**앱 생성 시간에 사용자 풀의 기존 클라이언트 앱에 대한 분석 설정을 지정하는 방법**
+ AWS CLI: `aws cognito-idp create-user-pool-client`
+ AWS API: [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)

**사용자 풀의 기존 클라이언트 앱에 대한 분석 설정을 업데이트하는 방법**
+ AWS CLI: `aws cognito-idp update-user-pool-client`
+ AWS API: [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)

**참고**  
Amazon Cognito는 `ApplicationArn`을 사용하는 경우 리전 내 통합을 지원합니다.

## 앱을 Amazon Pinpoint와 통합
<a name="cognito-user-pools-pinpoint-integration-client"></a>

*사용자 풀 API*에서 Amazon Cognito *로컬 사용자*를 위한 분석 메타데이터를 Amazon Pinpoint에 게시할 수 있습니다.

**로컬 사용자**  
계정에 가입했거나 서드 파티 ID 제공업체(idP)를 통해 로그인하는 대신 사용자 풀에서 생성된 사용자입니다.

**사용자 풀 API**  
사용자 지정 사용자 인터페이스(UI)가 있는 앱을 사용하여 AWS SDK와 통합할 수 있는 작업입니다. 관리형 로그인을 통해 로그인하는 페더레이션 또는 로컬 사용자에 대한 분석 메타데이터를 전달할 수 없습니다. 사용자 풀 API 작업 목록은 [Amazon Cognito API 참조](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html)에서 확인하세요.

캠페인에 게시하도록 사용자 풀을 구성한 후 Amazon Cognito는 다음 API 작업을 위해 메타데이터를 Amazon Pinpoint에 전달합니다.
+ `AdminInitiateAuth`
+ `AdminRespondToAuthChallenge`
+ `ConfirmForgotPassword`
+ `ConfirmSignUp`
+ `ForgotPassword`
+ `InitiateAuth`
+ `ResendConfirmationCode`
+ `RespondToAuthChallenge`
+ `SignUp`

사용자 세션에 대한 메타데이터를 Amazon Pinpoint 캠페인에 전달하려면 API 요청의 `AnalyticsMetadata` 파라미터에 `AnalyticsEndpointId` 값을 포함합니다. JavaScript 예제는 *AWS 지식 센터*에서 [Amazon Cognito 사용자 풀 분석이 Amazon Pinpoint 대시보드에 나타나지 않는 이유는 무엇입니까?](https://aws.amazon.com/premiumsupport/knowledge-center/pinpoint-cognito-user-pool-analytics/)를 참조하세요.

# Amazon Cognito 사용자 풀에 대한 이메일 설정
<a name="user-pool-email"></a>

애플리케이션의 특정 이벤트로 인해 Amazon Cognito가 사용자에게 이메일을 보낼 수 있습니다. 예를 들어 이메일 확인을 요구하도록 사용자 풀을 구성한 경우 사용자가 앱에서 새 계정을 등록하거나 암호를 다시 설정하면 Amazon Cognito에서 이메일을 보냅니다. 이메일을 시작한 작업이 무엇인지에 따라 이메일에는 확인 코드가 들어가거나 임시 암호가 들어갑니다.

이메일 전송을 처리하려면 다음 옵션 중 하나를 사용할 수 있습니다.
+ Amazon Cognito 서비스에 내장된 [기본 이메일 구성](#user-pool-email-default).
+ [Amazon Simple Email Service(Amazon SES) 구성](#user-pool-email-developer)

사용자 풀을 생성한 후 전송 옵션을 변경할 수 있습니다.

Amazon Cognito는 사용자가 입력할 수 있는 코드나 선택할 수 있는 URL 링크가 포함된 이메일 메시지를 사용자에게 보냅니다. 다음 표에서는 이메일 메시지를 생성할 수 있는 이벤트를 보여줍니다.

**메시지 옵션**


| 활동 | API 작업 | 전송 옵션 | 포맷 옵션 | 사용자 지정 가능 | [메시지 템플릿](cognito-user-pool-settings-message-customizations.md) | 
| --- |--- |--- |--- |--- |--- |
| Forgot password | [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html), [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) | Email, SMS | code | Yes | 검증 메시지 | 
| Invitation | [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) | Email, SMS | code | Yes | 초대 메시지 | 
| Self-registration | [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html), [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html) | Email, SMS | code, link | Yes | 검증 메시지 | 
| Email address or phone number verification | [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html), [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html), [GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html) | Email, SMS | code | Yes | 검증 메시지 | 
| Multi-factor authentication (MFA) | [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html), [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) | Email¹, SMS, authenticator app | code | Yes² | MFA 메시지 | 
| One-time password authentication (OTP) | [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html), [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) | Email¹, SMS | code | Yes | MFA 메시지³ | 

¹ Essentials [기능 플랜](cognito-sign-in-feature-plans.md) 이상 및 [Amazon SES 이메일 구성](#user-pool-email-developer)이 필요합니다.

² SMS 및 이메일 메시지의 경우.

³ 사용자 풀에 MFA가 필요하거나 선택 사항인 경우에만 MFA 메시지 템플릿을 사용자 지정할 수 있습니다. MFA가 비활성화되면 Amazon Cognito는 기본 템플릿과 함께 일회용 암호를 전송합니다.

Amazon SES는 이메일 메시지에 대해 요금을 부과합니다. 자세한 내용은 [Amazon SES 요금](https://aws.amazon.com/ses/pricing/)을 참조하세요.

이메일 MFA에 대한 자세한 내용은 [SMS 및 이메일 메시지 MFA](user-pool-settings-mfa-sms-email-message.md) 섹션을 참조하세요.

Amazon Cognito는 짧은 시간 내에 단일 대상으로 추가 이메일 또는 SMS 메시지를 전송하는 것을 방지할 수 있습니다. 사용자 풀이 영향을 받았다고 생각되면 [메시지 전달 오류 로그](exporting-quotas-and-usage.md#exporting-quotas-and-usage-messages)를 구성하고 검토한 후 계정 팀에 문의하세요.

## 기본 이메일 구성
<a name="user-pool-email-default"></a>

Amazon Cognito는 해당 기본 이메일 구성을 사용하여 이메일 전송을 처리할 수 있습니다. 기본 옵션을 사용하면 Amazon Cognito는 사용자 풀에 대해 매일 제한된 수의 이메일 보내기만 허용합니다. 서비스 제한에 대한 자세한 내용은 [Amazon Cognito의 할당량](quotas.md) 섹션을 참조하세요. 일반적인 프로덕션 환경의 경우 기본 이메일 제한은 필수 전송 볼륨보다 적습니다. 더 많은 전송량을 활성화하려면 Amazon SES 이메일 구성을 사용할 수 있습니다.

기본 구성을 사용하는 경우 AWS 에서 관리하는 Amazon SES 리소스를 사용하여 이메일 메시지를 보낼 수 있습니다. Amazon SES는 [하드 바운스](https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-deliverability.html#send-email-concepts-deliverability-bounce)를 반환하는 이메일 주소를 [계정 수준 억제 목록](https://docs.aws.amazon.com/ses/latest/dg/sending-email-suppression-list.html) 또는 [글로벌 억제 목록](https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-deliverability.html#send-email-concepts-deliverability-suppression-list)에 추가합니다. 전달 불가능한 이메일 주소가 나중에 전달 가능한 이메일 주소가 되는 경우 사용자 풀이 기본 구성을 사용하도록 구성되어 있는 동안에는 제외 목록에서의 이메일 주소 제거를 제어할 수 없습니다. 이메일 주소는 AWS관리형 금지 목록에 무기한 남아 있을 수 있습니다. 전달 불가능한 이메일 주소를 관리하려면 다음 섹션의 설명대로 Amazon SES 이메일 구성을 계정 수준 억제 목록과 함께 사용합니다.

기본 이메일 구성을 사용하면 다음 이메일 주소 중 하나를 발신 주소로 사용할 수 있습니다.
+ 기본 이메일 주소 *no-reply@verificationemail.com*입니다.
+ 사용자 지정 이메일 주소. 자신의 이메일 주소를 사용하려면 먼저 Amazon SES로 확인해야 하며 이 주소를 사용할 수 있는 권한을 Amazon Cognito에 부여해야 합니다.

## Amazon SES 이메일 구성
<a name="user-pool-email-developer"></a>

애플리케이션에 기본 옵션으로 제공되는 것보다 더 많은 전송 볼륨이 필요할 수도 있습니다. 가능한 전송량을 늘리려면 Amazon SES 리소스를 사용자 풀과 함께 사용하여 사용자에게 이메일을 보냅니다. 자체 Amazon SES 구성을 사용하여 이메일 메시지를 보낼 때 [이메일 보내기 활동을 모니터링](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/monitor-sending-activity.html)할 수도 있습니다.

Amazon SES 구성을 사용하려면 먼저 Amazon SES로 하나 이상의 이메일 주소 또는 도메인을 확인해야 합니다. 확인된 이메일 주소 또는 확인된 도메인에 속한 주소를 사용자 풀에 할당한 발신 이메일 주소로 사용합니다. Amazon Cognito에서 사용자에게 이메일을 보내면 Amazon SES가 호출되고 이메일 주소를 사용합니다.

Amazon SES 구성을 사용할 때 다음 조건이 적용됩니다.
+ 사용자 풀에 대한 이메일 전송 제한은 AWS 계정에서 Amazon SES 확인 이메일 주소에 적용되는 것과 동일한 제한입니다.
+ [글로벌 억제 목록](https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-deliverability.html#send-email-concepts-deliverability-suppression-list)을 재정의하는 Amazon SES의 계정 수준 억제 목록을 사용하여 전달 불가능한 이메일 주소에 대한 메시지를 관리할 수 있습니다. 계정 수준 억제 목록을 사용할 때 이메일 메시지 반송은 발신자로서의 계정 평판에 영향을 미칩니다. 자세한 내용은 Amazon Simple Email Service 개발자 안내서의 [Amazon SES 계정 수준 금지 목록 사용](https://docs.aws.amazon.com/ses/latest/dg/sending-email-suppression-list.html)을 참조하세요.

### Amazon SES 이메일 구성 리전
<a name="user-pool-email-developer-region-mapping"></a>

사용자 풀을 생성하는 AWS 리전 에는 Amazon SES를 사용한 이메일 메시지 구성에 대한 세 가지 요구 사항 중 하나가 있습니다. 사용자 풀과 동일한 리전, 동일한 리전을 포함한 여러 리전 또는 하나 이상의 원격 리전에 있는 Amazon SES에서 이메일 메시지를 보낼 수 있습니다. 최상의 성능을 위해 옵션이 있는 경우 사용자 풀과 동일한 리전에서 Amazon SES 인증 ID로 이메일 메시지를 전송합니다.Amazon SES 인증 ID에 대한 리전 요구 사항 범주

**리전 내 전용**  
사용자 풀은 AWS 리전 사용자 풀과 동일한에서 확인된 자격 증명이 있는 이메일 메시지를 보낼 수 있습니다. 사용자 지정 `FROM` 이메일 주소가 없는 기본 이메일 구성에서 Amazon Cognito는 동일한 리전에서 `no-reply@verificationemail.com` 인증 ID를 사용합니다.

**이전 버전과의 호환성**  
사용자 풀은 동일한 AWS 리전 또는 다음 대체 리전 중 하나에서 확인된 자격 증명이 있는 이메일 메시지를 보낼 수 있습니다.  
+ 미국 동부(버지니아 북부)
+ US West (Oregon)
+ 유럽(아일랜드)
이 기능은 서비스가 시작될 때 Amazon Cognito 요구 사항에 맞게 생성했을 수 있는 사용자 풀 리소스의 연속성을 지원합니다. 해당 기간의 사용자 풀은 제한된 수의 자격 증명으로만 이메일 메시지를 보낼 수 있습니다 AWS 리전. 사용자 지정 `FROM` 이메일 주소가 없는 기본 이메일 구성에서 Amazon Cognito는 동일한 리전에서 `no-reply@verificationemail.com` 인증 ID를 사용합니다.

**대체 리전**  
사용자 풀은 사용자 풀 리전 외부에 AWS 리전 있는 대체에서 확인된 자격 증명이 있는 이메일 메시지를 보낼 수 있습니다. 이 구성은 Amazon Cognito를 사용할 수 있는 리전에서 Amazon SES를 사용할 수 없는 경우에 발생합니다.  
대체 리전의 인증 ID에 대한 Amazon SES 전송 권한 부여 정책은 발신 리전의 Amazon Cognito 서비스 보안 주체를 신뢰해야 합니다. 자세한 내용은 [기본 이메일 구성을 사용할 수 있는 권한을 부여하려면](#user-pool-email-permissions-default) 단원을 참조하십시오.  
이러한 리전 중 일부에서 Amazon Cognito는 `COGNITO_DEFAULT`의 기본 이메일 구성을 위해 두 개의 대체 리전 간에 이메일 메시지를 분할합니다. 이러한 경우 사용자 지정 `FROM` 이메일 주소를 사용하려면 각 대체 리전의 인증 ID에 대한 Amazon SES 전송 권한 부여 정책이 발신 리전의 Amazon Cognito 서비스 보안 주체를 신뢰해야 합니다. 자세한 내용은 [기본 이메일 구성을 사용할 수 있는 권한을 부여하려면](#user-pool-email-permissions-default) 단원을 참조하십시오. 이러한 리전에서 `DEVELOPER`의 Amazon SES 이메일 구성을 사용하는 경우 *첫 번째*로 나열된 리전에서 인증 ID를 사용하고 사용자 풀 리전의 Amazon Cognito 서비스 보안 주체를 신뢰하도록 구성해야 합니다. 예를 들어 중동(UAE)의 사용자 풀에서 `cognito-idp.me-central-1.amazonaws.com`을 신뢰하도록 유럽(프랑크푸르트)에서 인증 ID를 구성합니다. 사용자 지정 `FROM` 이메일 주소가 없는 기본 이메일 구성에서 Amazon Cognito는 각 리전에서 `no-reply@verificationemail.com` 인증 ID를 사용합니다.

**참고**  
다음 조건 조합에서는 리전 요소의 와일드카드를 사용하여 [EmailConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-EmailConfiguration)의 `SourceArn` 파라미터를 `arn:${Partition}:ses:*:${Account}:identity/${IdentityName}` 형식으로 지정해야 합니다. 이렇게 하면 사용자 풀이 두의에서 동일한 확인된 자격 증명으로 이메일 메시지를 보낼 수 AWS 계정 있습니다 AWS 리전.  
EmailSendingAccount는 `COGNITO_DEFAULT`입니다.
사용자 지정 `FROM` 주소를 사용하려고 합니다.
사용자 풀은 **대체 리전**에서 이메일을 보냅니다.
사용자 풀에는 다음 **Amazon SES 지원 리전**의 테이블에 지정된 *두 번째*[1](#cognito-email-alternate-regions-note) **대체 리전**이 있습니다.

 AWS SDK, Amazon Cognito API 또는 CLI AWS CDK, 또는 AWS CloudFormation를 사용하여 프로그래밍 방식으로 사용자 풀을 생성하는 경우 사용자 풀은 [EmailConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-EmailConfiguration)의 `SourceArn` 파라미터가 사용자 풀에 지정하는 Amazon SES 자격 증명이 포함된 이메일 메시지를 전송합니다. Amazon SES 자격 증명은 지원되는를 사용해야 합니다 AWS 리전. `EmailSendingAccount`가 `COGNITO_DEFAULT`이고 `SourceArn` 파라미터가 지정되지 않은 경우 Amazon Cognito는 사용자 풀이 생성된 리전의 리소스를 사용하여 `no-reply@verificationemail.com`에서 이메일 메시지를 보냅니다.

다음 표에는 Amazon Cognito에서 Amazon SES 자격 증명을 사용할 수 있는 AWS 리전 가 나와 있습니다. Amazon Cognito


| 사용자 풀 리전 | 리전 옵션 | Amazon SES 지원 리전 | 
| --- | --- | --- | 
|  미국 동부(버지니아 북부)  |  이전 버전과의 호환성  |  미국 서부(오레곤), 미국 동부(버지니아 북부), 유럽(아일랜드)  | 
|  미국 동부(오하이오)  |  이전 버전과의 호환성  |  미국 서부(오하이오), 미국 동부(버지니아 북부), 미국 서부(오레곤), 유럽(아일랜드)  | 
|  미국 서부(캘리포니아 북부)  |  리전 내 전용  |  미국 서부(캘리포니아 북부)  | 
|  미국 서부(오리건)  |  이전 버전과의 호환성  |  미국 동부(버지니아 북부), 미국 서부(오레곤), 유럽(아일랜드)  | 
|  캐나다(중부)  |  이전 버전과의 호환성  |  캐나다(중부), 미국 동부(버지니아 북부), 미국 서부(오레곤), 유럽(아일랜드)  | 
|  캐나다 서부(캘거리)  |  대체 리전  |  캐나다(중부), 미국 서부(캘리포니아 북부)[1](#cognito-email-alternate-regions-note)  | 
|  멕시코(중부)  |  대체 리전  |  미국 동부(버지니아 북부), 미국 서부(오리건)[1](#cognito-email-alternate-regions-note)  | 
|  아시아 태평양(도쿄)  |  이전 버전과의 호환성  |  아시아 태평양(도쿄), 미국 동부(버지니아 북부), 미국 서부(오레곤), 유럽(아일랜드)  | 
|  아시아 태평양(홍콩)  |  대체 리전  |  아시아 태평양(싱가포르), 아시아 태평양(도쿄)[1](#cognito-email-alternate-regions-note)  | 
|  아시아 태평양(서울)  |  이전 버전과의 호환성  |  아시아 태평양(서울), 미국 동부(버지니아 북부), 미국 서부(오레곤), 유럽(아일랜드)  | 
| 아시아 태평양(말레이시아) | 대체 리전 | 아시아 태평양(시드니), 아시아 태평양(싱가포르)[1](#cognito-email-alternate-regions-note) | 
| 아시아 태평양(태국) | 대체 리전 | 아시아 태평양(싱가포르), 아시아 태평양(뭄바이)[1](#cognito-email-alternate-regions-note) | 
|  아시아 태평양(뭄바이)  |  이전 버전과의 호환성  |  아시아 태평양(뭄바이), 미국 동부(버지니아 북부), 미국 서부(오레곤), 유럽(아일랜드)  | 
|  아시아 태평양(하이데라바드)  |  대체 리전  |  아시아 태평양(뭄바이), 아시아 태평양(싱가포르)[1](#cognito-email-alternate-regions-note)  | 
|  아시아 태평양(싱가포르)  |  이전 버전과의 호환성  |  아시아 태평양(싱가포르), 미국 동부(버지니아 북부), 미국 서부(오레곤), 유럽(아일랜드)  | 
|  아시아 태평양(시드니)  |  이전 버전과의 호환성  |  아시아 태평양(시드니), 미국 동부(버지니아 북부), 미국 서부(오레곤), 유럽(아일랜드)  | 
|  아시아 태평양(오사카)  |  리전 내 전용  |  아시아 태평양(오사카)  | 
|  아시아 태평양(자카르타)  |  리전 내 전용  |  아시아 태평양(자카르타)  | 
|  아시아 태평양(멜버른)  |  대체 리전  |  아시아 태평양(시드니), 아시아 태평양(싱가포르)[1](#cognito-email-alternate-regions-note)  | 
|  유럽(아일랜드)  |  이전 버전과의 호환성  |  미국 서부(오레곤), 미국 동부(버지니아 북부), 유럽(아일랜드)  | 
|  유럽(런던)  |  이전 버전과의 호환성  |  유럽(런던), 미국 동부(버니지아 북부), 미국 서부(오레곤), 유럽(아일랜드)  | 
|  유럽(파리)  |  리전 내 전용  |  유럽(파리)  | 
|  유럽(프랑크푸르트)  |  이전 버전과의 호환성  |  유럽(프랑크푸르트), 미국 동부(버니지아 북부), 미국 서부(오레곤), 유럽(아일랜드)  | 
|  유럽(취리히)  |  대체 리전  |  유럽(프랑크푸르트), 유럽(런던)[1](#cognito-email-alternate-regions-note)  | 
|  유럽(스톡홀름)  |  리전 내 전용  |  유럽(스톡홀름)  | 
| 유럽(밀라노) |  리전 내 전용  | 유럽(밀라노) | 
| 유럽(스페인) |  대체 리전  | 유럽(파리), 유럽(스톡홀름)[1](#cognito-email-alternate-regions-note) | 
|  Middle East (Bahrain)  |  리전 내 전용  |  Middle East (Bahrain)  | 
|  중동(UAE)  |  대체 리전  |  유럽(프랑크푸르트), 유럽(런던)[1](#cognito-email-alternate-regions-note)  | 
|  남아메리카(상파울루)  |  리전 내 전용  |  남아메리카(상파울루)  | 
|  이스라엘(텔아비브)  |  리전 내 전용  |  이스라엘(텔아비브)  | 
|  아프리카(케이프타운)  |  리전 내 전용  |  아프리카(케이프타운)  | 

 1 기본 이메일 구성이 있는 사용자 풀에 사용됩니다. Amazon Cognito는 각 리전에서 동일한 이메일 주소를 사용하여 확인된 자격 증명 간에 이메일 메시지를 배포합니다. 사용자 지정 `FROM` 주소를 사용하려면 `arn:${Partition}:ses:*:${Account}:identity/${IdentityName}` 형식의 `SourceArn` 파라미터로 `EmailConfiguration`을 구성합니다.

## 사용자 풀에 대한 이메일 구성
<a name="user-pool-email-configure"></a>

사용자 풀에 대한 이메일 설정을 구성하려면 다음 단계를 완료하세요. 사용하는 설정에 따라 Amazon SES, AWS Identity and Access Management (IAM) 및 Amazon Cognito에서 IAM 권한이 필요할 수도 있습니다.

**참고**  
이러한 단계에서 생성되는 리소스는 AWS 계정간에 공유할 수 없습니다. 예를 들어 사용자 풀을 구성한 한 계정을 다른 계정의 Amazon SES 이메일 주소로 사용할 수 없습니다. Amazon Cognito를 여러 계정에서 사용하는 경우 각 계정에 대해 이러한 단계를 반복합니다.

### 1단계: Amazon SES로 이메일 주소 또는 도메인 확인
<a name="user-pool-email-configure-verify-ses"></a>

사용자 풀을 구성하기 전에 다음 중 하나를 수행하려면 Amazon SES로 하나 이상의 도메인 또는 이메일 주소를 확인해야 합니다.
+ 자신의 이메일 주소를 발신 주소로 사용합니다.
+ Amazon SES 구성을 사용하여 이메일 전송을 처리합니다.

이메일 주소나 도메인을 확인하여 이메일 주소를 소유하고 있음을 확인하면 무단 사용을 방지하는 데 도움이 됩니다.

Amazon SES에서 이메일 확인에 관한 자세한 내용은 *Amazon Simple Email Service 개발자 가이드*에서 [Amazon SES에서 이메일 주소 확인](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses-procedure.html)을 참조하세요. Amazon SES로 도메인을 확인하는 방법에 대한 자세한 내용은 [도메인 확인](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-domains.html)을 참조하세요.

### 2단계: Amazon SES 샌드박스에서 계정 이동
<a name="user-pool-email-configure-sandbox"></a>

기본 Amazon Cognito 이메일 구성을 사용하는 경우 이 단계를 건너뜁니다.

에서 Amazon SES AWS 리전를 처음 사용하는 경우 해당 리전의 Amazon SES 샌드박스 AWS 계정 에이 배치됩니다. Amazon SES는 사기 및 부정 사용을 방지하기 위해 샌드박스를 사용합니다. Amazon SES 구성을 사용하여 이메일 전송을 처리하는 경우 먼저 AWS 계정 을 샌드박스 외부로 이동해야 Amazon Cognito가 사용자에게 이메일을 보낼 수 있습니다.

샌드박스에서 Amazon SES는 전송할 수 있는 이메일 수와 전송할 수 있는 위치를 제한합니다. Amazon SES로 확인한 주소 및 도메인에만 이메일을 보내거나 Amazon SES 메일박스 시뮬레이터 주소로 이메일을 보낼 수 있습니다. 가 샌드박스에 AWS 계정 있는 동안에는 프로덕션 환경에 있는 애플리케이션에 Amazon SES 구성을 사용하지 마십시오. 이 경우 Amazon Cognito에서 사용자의 이메일 주소로 메시지를 보낼 수 없습니다.

샌드박스 AWS 계정 에서를 제거하려면 [ Amazon Simple Email Service 개발자 안내서의 Amazon SES 샌드박스 밖으로 이동](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/request-production-access.html)*을 참조하세요.*

### 3단계: Amazon Cognito에 이메일 권한 부여
<a name="user-pool-email-permissions"></a>

사용자에게 이메일을 보내기 전에 특정 권한을 Amazon Cognito에 부여해야 할 수도 있습니다. 사용자가 부여하는 권한과 권한을 부여하는 데 사용하는 프로세스는 기본 이메일 구성을 사용하는지 아니면 Amazon SES 구성을 사용하는지에 따라 다릅니다.

#### 기본 이메일 구성을 사용할 수 있는 권한을 부여하려면
<a name="user-pool-email-permissions-default"></a>

사용자 풀을 **Cognito를 사용하여 이메일 보내기**로 구성하거나 `EmailSendingAccount`를 `COGNITO_DEFAULT`로 설정한 경우에만 이 단계를 완료합니다.

기본 이메일 구성을 사용하면 사용자 풀에서 다음 주소 중 하나를 사용하여 이메일 메시지를 보낼 수 있습니다.
+ 기본 주소 `no-reply@verificationemail.com`.
+ Amazon SES에서 확인된 이메일 주소 또는 도메인의 사용자 지정 발신 주소입니다.

사용자 정의 주소를 사용하는 경우 Amazon Cognito에 추가 권한이 있어야 해당 주소에서 사용자에게 이메일을 보낼 수 있습니다. 이러한 권한은 Amazon SES의 주소나 도메인에 대한 [전송 권한 부여 정책](https://docs.aws.amazon.com/ses/latest/dg/sending-authorization.html)을 통해 부여됩니다. Amazon Cognito 콘솔을 사용하여 사용자 풀에 사용자 정의 주소를 추가하는 경우 정책이 Amazon SES 확인 이메일 주소에 자동으로 연결됩니다. 그러나 AWS CLI 또는 Amazon Cognito API를 사용하는 등 콘솔 외부에서 사용자 풀을 구성하는 경우 [Amazon SES 콘솔](https://console.aws.amazon.com/ses/) 또는 [PutIdentityPolicy](https://docs.aws.amazon.com/ses/latest/APIReference/API_PutIdentityPolicy.html) API를 사용하여 정책을 연결해야 합니다.

**참고**  
 AWS CLI 또는 Amazon Cognito API를 사용하여 확인된 도메인의 FROM 주소만 구성할 수 있습니다.

전송 권한 부여 정책은 Amazon Cognito를 사용하여 Amazon SES를 호출하는 계정 리소스를 기준으로 액세스를 허용하거나 거부합니다. 리소스 기반 정책에 대한 자세한 내용은 [IAM 사용 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based)를 참조하세요. [Amazon SES 개발자 가이드](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policy-examples.html)에서 리소스 기반 정책의 예제도 찾아볼 수 있습니다.

**Example 전송 권한 부여 정책**  
다음 전송 권한 부여 정책 예제는 Amazon Cognito에 Amazon SES 확인 자격 증명을 사용할 수 있는 제한적인 권한을 부여합니다. Amazon Cognito는 `aws:SourceArn` 조건의 사용자 풀과 `aws:SourceAccount` 조건의 계정을 둘 다 대신하는 경우에만 이메일 메시지를 전송할 수 있습니다.  
사용자 풀 리전 또는 대체 리전의 전송 권한 부여 정책은 Amazon Cognito 서비스 보안 주체가 이메일 메시지를 전송하도록 허용해야 합니다. 자세한 내용은 [리전 표](#ses-regions-table)를 참조하십시오. **사용자 풀 리전**이 **Amazon SES 리전**에서 하나 이상의 값과 일치하는 경우 다음 예제에서 글로벌 서비스 보안 주체를 사용하여 전송 권한 부여 정책을 구성합니다.    
****  

```
{
    "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 Cognito를 사용할 수 있는 일부 옵트인에서는 Amazon SES를 사용할 수 없습니다. AWS 리전 Amazon Cognito 중동(UAE)가 한 예이며 유럽(프랑크푸르트)(`eu-central-1`)에서 인증 ID로 이메일만 보낼 수 있습니다. 기본 이메일 구성이 있는 사용자 풀에서 Amazon Cognito는 두 리전 각각에서 인증 ID로 이메일 메시지도 전송합니다. 중동(UAE)의 경우 추가 리전은 유럽(런던)입니다. 두 리전 모두에서 전송 권한 부여 정책을 업데이트해야 합니다.  
각 대체 리전의 전송 권한 부여 정책은 사용자 풀 옵트인 리전의 Amazon Cognito 서비스 보안 주체가 이메일 메시지를 전송하도록 허용해야 합니다. 자세한 내용은 [리전 표](#ses-regions-table)를 참조하십시오. 리전이 **대체 리전**으로 표시된 경우 다음 예제와 같이 리전 서비스 보안 주체를 사용하여 전송 권한 부여 정책을 구성합니다. 필요에 따라 예시 리전 식별자 *me-central-1*을 필수 리전 ID로 바꿉니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "cognito-idp.me-central-1.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 Simple Email Service 개발자 가이드*에서 [Amazon SES 전송 권한 부여 정책](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html)을 참조하세요.  
자세한 내용은 *Amazon Simple Email Service 개발자 가이드*에서 [Amazon SES 전송 권한 부여 정책 예제](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policy-examples.html)를 참조하세요.

#### Amazon SES 구성을 사용할 수 있는 권한을 부여하려면
<a name="user-pool-email-permissions-developer"></a>

Amazon SES 구성을 사용하도록 사용자 풀을 구성한 경우 Amazon Cognito는 사용자에게 이메일을 보낼 때 사용자 대신 Amazon SES를 호출할 수 있는 추가 권한이 필요합니다. 이 권한은 IAM 서비스를 사용하여 부여됩니다.

이 옵션으로 사용자 풀을 구성하면 Amazon Cognito가 AWS 계정에서 IAM 역할 유형인 *서비스 연결 역할*을 생성합니다. 이 역할에는 Amazon Cognito에서 Amazon SES에 액세스하여 귀하의 주소로 이메일 전송을 허용하는 권한이 포함되어 있습니다.

Amazon Cognito는 구성을 설정하는 사용자 세션의 AWS 자격 증명을 사용하여 서비스 연결 역할을 생성합니다. 이 세션의 IAM 권한에는 `iam:CreateServiceLinkedRole` 작업이 포함되어야 합니다. IAM의 권한에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 리소스에 대한 액세스 관리를](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) 참조하세요.

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

### 4단계: 사용자 풀 구성
<a name="user-pool-email-configure-user-pool"></a>

다음 중 하나를 사용하여 사용자 풀을 구성하려면 다음 단계를 완료하세요.
+ 이메일 발신자로 표시되는 사용자 지정 발신 주소
+ 사용자가 발신 주소로 보낸 메시지를 받는 사용자 지정 회신 주소
+ Amazon SES 구성

**참고**  
확인된 자격 증명이 이메일 주소인 경우 Amazon Cognito는 기본적으로 해당 이메일 주소를 FROM 및 REPLY-TO 이메일 주소로 설정합니다. 하지만 인증 ID가 도메인인 경우 FROM 이메일 주소의 값을 제공해야 합니다.

기본 Amazon Cognito 이메일 구성 및 주소를 사용하는 경우 이 절차를 생략합니다.

**사용자 지정 이메일 주소를 사용하도록 사용자 풀을 구성하려면**

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

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

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

1. **인증 방법** 메뉴를 선택하고 **이메일 구성**을 찾은 다음 **편집**을 선택합니다.

1. [**이메일 구성 편집(Edit email configuration)**] 페이지에서 [**Amazon SES SES에서 이메일 전송(Send email from Amazon SES)**] 또는 [**Amazon Cognito로 이메일 전송(Send email with Amazon Cognito)**]을 선택합니다. [**Amazon SES에서 이메일 전송(Send email from Amazon SES)**]을 선택한 경우에만 **SES 리전(SES Region)**, **구성 집합(Configuration Set)**, **FROM 발신자 이름(FROM sender name)**을 사용자 정의할 수 있습니다.

1. 사용자 정의 FROM 주소를 사용하려면 다음 단계를 완료합니다.

   1. [**SES 리전(SES Region)**]에서 확인된 이메일 주소가 포함된 리전을 선택합니다.

   1. **발신 이메일 주소(FROM email address)**에서 이메일 주소를 선택합니다. Amazon SES에서 확인된 이메일 주소를 사용합니다.

   1. (선택 사항) **구성 세트(Configuration set)**에서 Amazon SES에 사용할 구성 세트를 선택합니다. 이 변경 사항을 수행하고 저장하면 서비스 연결 역할이 생성됩니다.

   1. (선택 사항) **발신 발신자 주소(FROM sender address)** 아래에 이메일 주소를 입력합니다. 이메일 주소만 제공하거나, 이메일 주소와 친숙한 이름을 `Jane Doe <janedoe@example.com>` 포맷으로 제공할 수 있습니다.

   1. (선택 사항) [**REPLY-TO 이메일 주소(REPLY-TO email address)**] 아래에 사용자가 FROM 주소로 보내는 메시지를 받으려는 이메일 주소를 입력합니다.

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

**관련 주제**
+ [이메일 확인 메시지 사용자 정의](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-email-verification-message-customization)
+ [사용자 초대 메시지 사용자 정의](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-user-invitation-message-customization)

# Amazon Cognito 사용자 풀의 SMS 메시지 설정
<a name="user-pool-sms-settings"></a>

사용자 풀에 대한 일부 Amazon Cognito 이벤트로 인해 Amazon Cognito가 사용자에게 SMS 문자 메시지를 보낼 수 있습니다. 예를 들어 전화 확인을 요구하도록 사용자 풀을 구성한 경우 사용자가 앱에서 새 계정을 등록하거나 암호를 다시 설정하면 Amazon Cognito에서 SMS 문자 메시지를 보냅니다. SMS 문자 메시지를 유발하는 작업에 따라 메시지에는 확인 코드, 임시 암호 또는 시작 메시지가 포함됩니다.

Amazon Cognito는 SMS 문자 메시지 전송에 Amazon Simple Notification Service(Amazon SNS)를 사용합니다. Amazon SNS는 SMS 메시지를에 전달합니다 AWS 최종 사용자 메시징 SMS. Amazon Cognito를 통해 처음으로 문자 메시지를 보내는 경우는 사용자를 [샌드박스 환경에](https://docs.aws.amazon.com/sms-voice/latest/userguide/sandbox.html) AWS 최종 사용자 메시징 SMS 배치합니다. 샌드박스 환경에서는 애플리케이션에서 SMS 문자 메시지를 테스트할 수 있습니다. 샌드박스에서는 메시지 전송만 시뮬레이션할 수 있습니다.

**참고**  
2024년 11월에에서 Amazon SNS SMS 메시징을 AWS 로 대체했습니다 AWS 최종 사용자 메시징 SMS. 현재 Amazon Cognito 콘솔은 Amazon SNS 리소스를 참조합니다. 사용자 풀은 전달 대상인 Amazon SNS [게시](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) 작업을 사용하여 SMS 메시지를 시작합니다 AWS 최종 사용자 메시징 SMS. 따라서 `sms-voice:SendTextMessage`가 아닌 `sns:Publish`에 대한 권한을 구성해야 합니다.

AWS 최종 사용자 메시징 SMS 는 SMS 문자 메시지에 대해 요금을 부과합니다. 자세한 내용은 [AWS 최종 사용자 메시징 SMS 요금](https://aws.amazon.com/end-user-messaging/pricing/)을 참조하십시오.

Amazon Cognito는 사용자가 입력할 수 있는 코드와 함께 SMS 메시지를 사용자에게 보냅니다. 다음 표에서는 SMS 메시지를 생성할 수 있는 이벤트를 보여줍니다.

**메시지 옵션**


| 활동 | API 작업 | 전송 옵션 | 포맷 옵션 | 사용자 지정 가능 | [메시지 템플릿](cognito-user-pool-settings-message-customizations.md) | 
| --- |--- |--- |--- |--- |--- |
| Forgot password | [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html), [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) | Email, SMS | code | Yes | 검증 메시지 | 
| Invitation | [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) | Email, SMS | code | Yes | 초대 메시지 | 
| Self-registration | [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html), [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html) | Email, SMS | code, link | Yes | 검증 메시지 | 
| Email address or phone number verification | [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html), [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html), [GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html) | Email, SMS | code | Yes | 검증 메시지 | 
| Multi-factor authentication (MFA) | [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html), [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) | Email¹, SMS, authenticator app | code | Yes² | MFA 메시지 | 
| One-time password authentication (OTP) | [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html), [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) | Email¹, SMS | code | Yes | MFA 메시지³ | 

¹ Essentials [기능 플랜](cognito-sign-in-feature-plans.md) 이상 및 [Amazon SES 이메일 구성](user-pool-email.md#user-pool-email-developer)이 필요합니다.

² SMS 및 이메일 메시지의 경우.

³ 사용자 풀에 MFA가 필요하거나 선택 사항인 경우에만 MFA 메시지 템플릿을 사용자 지정할 수 있습니다. MFA가 비활성화되면 Amazon Cognito는 기본 템플릿과 함께 일회용 암호를 전송합니다.

AWS 최종 사용자 메시징 SMS 는 SMS 메시지에 대해 요금을 부과합니다. 자세한 내용은 [AWS 최종 사용자 메시징 SMS 요금](https://aws.amazon.com/end-user-messaging/pricing/)을 참조하십시오.

MFA에 대한 자세한 내용은 [SMS 및 이메일 메시지 MFA](user-pool-settings-mfa-sms-email-message.md) 섹션을 참조하세요.

Amazon Cognito는 짧은 시간 내에 단일 대상으로 추가 이메일 또는 SMS 메시지를 전송하는 것을 방지할 수 있습니다. 사용자 풀이 영향을 받았다고 생각되면 [메시지 전달 오류 로그](exporting-quotas-and-usage.md#exporting-quotas-and-usage-messages)를 구성하고 검토한 후 계정 팀에 문의하세요.

## 모범 사례
<a name="user-pool-sms-settings-best-practices"></a>

원치 않는 SMS 트래픽 양의 전 세계적 증가로 인해 일부 정부는 SMS 메시지 발신자와 수신자 사이에 장벽을 부과하고 있습니다. MFA와 사용자 업데이트에 SMS 메시지를 사용하는 경우 메시지가 전달되도록 추가 조치를 취해야 합니다. 또한 사용자가 거주할 수 있는 국가의 SMS 메시지 관련 규정을 모니터링하고 SMS 메시지 구성을 최신 상태로 유지해야 합니다. 자세한 내용은 *AWS 최종 사용자 메시징 SMS 사용 설명서*에서 [SMS 및 MMS 국가별 기능과 제한 사항](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-support-by-country.html)을 참조하세요.

SMS 메시지를 사용한 사용자 인증과 확인은 보안 모범 사례가 아닙니다. 전화번호는 소유자가 바뀔 수 있으며, 사용자의 *가지고 있는 것* MFA 요소를 확실히 대표하지 못할 수 있습니다. 대신 앱이나 서드 파티 IdP를 사용하여 TOTP MFA를 구현하세요. [사용자 정의 인증 챌린지 Lambda 트리거](user-pool-lambda-challenge.md)를 사용하여 추가 사용자 지정 인증 요소를 생성할 수도 있습니다.

SMS 메시지 전송 아키텍처 보안에 대한 자세한 내용은 다음 링크를 검토하세요.
+ [Amazon Cognito 사용자 풀을 사용하여 사용자 가입 사기 및 SMS 펌프의 위험 감소](https://aws.amazon.com/blogs/security/reduce-risks-of-user-sign-up-fraud-and-sms-pumping-with-amazon-cognito-user-pools/)
+ [SMS Pumping 방지: 인공적으로 팽창된 트래픽에 대처하는 데 도움이 되는 새로운 AWS 기능](https://aws.amazon.com/blogs/messaging-and-targeting/defending-against-sms-pumping-new-aws-features-to-help-combat-artificially-inflated-traffic/)

## Amazon Cognito 사용자 풀에서 처음으로 SMS 메시지 설정
<a name="user-pool-sms-settings-first-time"></a>

Amazon Cognito는 Amazon SNS AWS 최종 사용자 메시징 SMS를 간접적으로 사용하여 사용자 풀에서 SMS 메시지를 보냅니다. 자체 리소스를 사용하는 [사용자 지정 SMS 발신자 Lambda 트리거](user-pool-lambda-custom-sms-sender.md)를 사용하여 SMS 메시지를 보낼 수도 있습니다. 특정에서 SMS 문자 메시지를 처음 설정하면가 해당 리전의 SMS 샌드박스 AWS 계정 에 AWS 리전 AWS 최종 사용자 메시징 SMS 배치됩니다.는 샌드박스를 AWS 최종 사용자 메시징 SMS 사용하여 사기 및 침해를 방지하고 규정 준수 요구 사항을 충족합니다. AWS 계정 가 샌드박스에 있는 경우는 몇 가지 [제한을](https://docs.aws.amazon.com/sms-voice/latest/userguide/sandbox.html#sandbox-sms) AWS 최종 사용자 메시징 SMS 부과합니다. 예를 들어 발신 ID가 있는 경우 최대 10개의 확인된 대상 번호로 문자 메시지를 보내거나 발신 ID 없이 메시지 전송을 시뮬레이션할 수 있습니다. 가 샌드박스에 AWS 계정 있는 동안에는 프로덕션 환경에서 SMS 메시지를 보내지 마십시오. 샌드박스에서는 Amazon Cognito가 사용자의 전화 번호로 메시지를 보낼 수 없습니다.

**Topics**
+ [

### Amazon Cognito가 SMS 메시지를 보내는 데 사용할 수 있는 IAM 역할 준비 AWS 최종 사용자 메시징 SMS
](#sms-create-a-role)
+ [

### SMS 메시지 AWS 리전 용 선택
](#sms-choose-a-region)
+ [

### 미국 전화 번호로 SMS 메시지를 보내기 위한 발신 자격 증명 얻기
](#user-pool-sms-settings-first-time-origination)
+ [

### 환경이 SMS 샌드박스인지 확인합니다.
](#user-pool-sms-settings-first-time-confirm-sandbox)
+ [

### 샌드박스에서 계정 이동
](#user-pool-sms-settings-first-time-out-sandbox)
+ [

### 에서 시뮬레이터 번호 또는 확인된 전화번호 사용 AWS 최종 사용자 메시징 SMS
](#user-pool-sms-settings-first-time-verify-numbers)
+ [

### Amazon Cognito에서 사용자 풀 설정 완료
](#user-pool-sms-settings-first-time-finish-user-pool)

### Amazon Cognito가 SMS 메시지를 보내는 데 사용할 수 있는 IAM 역할 준비 AWS 최종 사용자 메시징 SMS
<a name="sms-create-a-role"></a>

사용자 풀에서 SMS 메시지를 보낼 때 Amazon Cognito는 계정에서 IAM 역할을 맡습니다. Amazon Cognito는 해당 역할에 할당된 `sns:Publish` 권한을 사용하여 사용자에게 SMS 메시지를 보냅니다. Amazon Cognito 콘솔의 **SMS** 아래에 있는 사용자 풀의 **인증 방법** 메뉴에서 **IAM 역할 선택**을 설정하거나 사용자 풀 생성 마법사 중에 선택할 수 있습니다.

다음 예제에서는 IAM 역할 신뢰 정책은 Amazon Cognito 사용자 풀에 역할을 맡을 수 있는 제한된 권한을 부여합니다. Amazon Cognito는 다음 조건을 충족하는 경우에만 해당 역할을 수행할 수 있습니다.
+ assume-role 작업은 `aws:SourceArn` 조건의 사용자 풀을 대신하여 수행됩니다.
+ assume-role 작업은 `aws:SourceAccount` 조건에 의해 설정된 AWS 계정 의 사용자 풀을 대신하여 수행됩니다.
+ assume-role 작업에는 `sts:externalId` 조건에 외부 ID가 포함됩니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "cognito-idp.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
                    "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cognito-idp:us-west-2:111122223333:userpool/us-west-2_EXAMPLE"
                }
            }
        }
    ]
}
```

------

`aws:SourceArn` 조건 값에 정확한 [사용자 풀 ARN](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncognitouserpools.html#amazoncognitouserpools-resources-for-iam-policies) 또는 와일드카드 ARN을 지정할 수 있습니다. [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html) API 요청을 사용하여 AWS Management Console 또는에서 사용자 풀의 ARNs을 조회합니다.

[다중 인증](user-pool-settings-mfa-sms-email-message.md)에 대한 SMS 메시지를 보내려면 IAM 역할 신뢰 정책에 `sts:ExternalId` 조건이 있어야 합니다. 이 조건의 값은 사용자 풀의 [SmsConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-SmsConfiguration)의 `ExternalId` 속성과 일치해야 합니다. Amazon Cognito 콘솔에서 사용자 풀을 생성하는 중에 IAM 역할을 생성하면 Amazon Cognito는 역할 및 사용자 풀 설정에서 외부 ID를 구성합니다. 기존 IAM 역할을 사용할 때는 그렇지 않습니다.

[UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) API 요청에서 사용자 풀 `ExternalId` 파라미터를 업데이트하고 IAM 역할 신뢰 정책을 동일한 값의 `sts:externalId` 조건으로 업데이트해야 합니다. API를 사용하여 원래 구성을 보존하는 방식으로 사용자 풀을 업데이트하는 방법을 알아보려면 [사용자 풀 및 앱 클라이언트 구성 업데이트](cognito-user-pool-updating.md) 섹션을 참조하세요.

IAM 역할 및 신뢰 정책에 대한 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [역할 용어 및 개념](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html)을 참조하세요.

### SMS 메시지 AWS 리전 용 선택
<a name="sms-choose-a-region"></a>

**참고**  
이제의 SMS 메시지가에서 관리 AWS 됩니다[AWS 최종 사용자 메시징 SMS](https://console.aws.amazon.com/sms-voice/home).

일부 리전에서는 Amazon Cognito SMS 메시지에 사용할 Amazon SNS 리소스가 포함된 리전을 선택할 AWS 리전수 있습니다. Amazon Cognito 아시아 태평양(서울)을 제외하고 Amazon Cognito를 사용할 수 AWS 리전 있는 AWS 리전 에서는 사용자 풀을 생성한에서 Amazon SNS 리소스를 사용할 수 있습니다. 리전을 선택할 때 SMS 메시징을 더 빠르고 안정적으로 만들려면 해당 사용자 풀과 동일한 리전에서 Amazon SNS 리소스를 사용합니다.

새 사용자 풀 마법사의 **메시지 전송 구성(Configure message delivery)** 단계에서 SMS 리소스에 대한 리전을 선택합니다. 또한 기존 사용자 풀의 **인증 방법** 메뉴의 **SMS** 아래에서 **편집**을 선택할 수 있습니다.

시작 시 일부의 경우 AWS 리전 Amazon Cognito는 대체 리전의 Amazon SNS 리소스와 함께 SMS 메시지를 보냈습니다. 선호하는 리전을 설정하려면 사용자 풀에 대한 [SmsConfigurationType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SmsConfigurationType.html) 객체의 `SnsRegion` 파라미터를 사용합니다. 다음 표의 **Amazon Cognito 리전**에서 Amazon Cognito 사용자 풀 리소스를 프로그래밍 방식으로 생성하고 `SnsRegion` 파라미터를 제공하지 않으면 사용자 풀이 레거시 **Amazon SNS 리전**에서 Amazon SNS 리소스와 함께 SMS 메시지를 보낼 수 있습니다.

아시아 태평양(서울)의 Amazon Cognito 사용자 풀 AWS 리전 은 아시아 태평양(도쿄) 리전에서 Amazon SNS 구성을 사용해야 합니다.

Amazon SNS(경유 AWS 최종 사용자 메시징 SMS)는 모든 신규 계정에 대한 지출 할당량을 매월 1.00 USD(USD)로 설정합니다. Amazon Cognito에서 사용하는에서 지출 한도를 늘렸 AWS 리전 을 수 있습니다. Amazon SNS SMS 메시지에 AWS 리전 대한를 변경하기 전에 AWS 지원 센터에서 할당량 증가 사례를 열어 새 리전의 한도를 늘립니다. 자세한 내용은 *AWS 최종 사용자 메시징 SMS 사용 설명서*[의 AWS 최종 사용자 메시징 SMS MMS 및 Voice 샌드박스에서 프로덕션으로 이동](https://docs.aws.amazon.com/sms-voice/latest/userguide/sandbox.html#sandbox-sms-move-to-production)을 참조하세요.

다음 표의 모든 **Amazon Cognito 리전**에 대해 해당 SMS 메시지 리전의 AWS 최종 사용자 메시징 SMS 리소스와 함께 **SMS 메시지를 보낼 수 있습니다**.


| Amazon Cognito 리전 | SMS 메시지 리전 | 
| --- | --- | 
|  미국 동부(오하이오)  |  미국 동부(오하이오), 미국 동부(버지니아 북부)  | 
|  미국 동부(버지니아 북부)  |  미국 동부(버지니아 북부)  | 
|  미국 서부(캘리포니아 북부)  |  미국 서부(캘리포니아 북부)  | 
|  미국 서부(오리건)  |  미국 서부(오리건)  | 
|  캐나다(중부)  |  캐나다(중부), 미국 동부(버지니아 북부)  | 
|  캐나다 서부(캘거리)  |  캐나다 서부(캘거리)  | 
|  멕시코(중부)  |  멕시코(중부)  | 
|  유럽(프랑크푸르트)  |  유럽(프랑크푸르트), 유럽(아일랜드)  | 
|  유럽(런던)  |  유럽(런던), 유럽(아일랜드)  | 
|  유럽(아일랜드)  |  유럽(아일랜드)  | 
|  유럽(파리)  |  유럽(파리)  | 
|  유럽(스톡홀름)  |  유럽(스톡홀름)  | 
|  유럽(밀라노)  |  유럽(밀라노)  | 
|  유럽(스페인)  |  유럽(스페인)  | 
|  유럽(취리히)  |  유럽(취리히)  | 
| 아시아 태평양(말레이시아) | 아시아 태평양(싱가포르) | 
|  아시아 태평양(태국)  |  아시아 태평양(뭄바이)  | 
|  아시아 태평양(뭄바이)  |  아시아 태평양(뭄바이), 아시아 태평양(싱가포르)  | 
|  아시아 태평양(하이데라바드)  |  아시아 태평양(하이데라바드)  | 
|  아시아 태평양(홍콩)  |  아시아 태평양(싱가포르)  | 
|  아시아 태평양(서울)  |  아시아 태평양(도쿄)  | 
|  아시아 태평양(싱가포르)  |  아시아 태평양(싱가포르)  | 
|  아시아 태평양(시드니)  |  아시아 태평양(시드니)  | 
|  아시아 태평양(도쿄)  |  아시아 태평양(도쿄)  | 
|  아시아 태평양(자카르타)  |  아시아 태평양(자카르타)  | 
|  아시아 태평양(오사카)  |  아시아 태평양(오사카)  | 
|  아시아 태평양(멜버른)  |  아시아 태평양(멜버른)  | 
|  Middle East (Bahrain)  |  Middle East (Bahrain)  | 
|  중동(UAE)  |  중동(UAE)  | 
|  남아메리카(상파울루)  |  남아메리카(상파울루)  | 
|  이스라엘(텔아비브)  |  이스라엘(텔아비브)  | 
|  아프리카(케이프타운)  |  아프리카(케이프타운)  | 

### 미국 전화 번호로 SMS 메시지를 보내기 위한 발신 자격 증명 얻기
<a name="user-pool-sms-settings-first-time-origination"></a>

미국 전화 번호로 SMS 문자 메시지를 보내려는 경우 SMS 샌드박스 테스트 환경을 구축하거나 프로덕션 환경을 구축하는 경우 모두 발신 자격 증명을 얻어야 합니다.

미국 이동 통신사는 미국 전화 번호로 메시지를 보낼 때 발신 ID를 요구합니다. 발신 자격 증명이 아직 없는 경우 받아야 합니다. 발신 ID를 얻는 방법을 알아보려면 *AWS 최종 사용자 메시징 SMS 사용 설명서*에서 [전화번호 요청](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request.html)을 참조하세요.

동일한에 두 개 이상의 발신 자격 증명이 있는 경우는 단축 코드 AWS 리전, 10DLC, 수신자 부담 전화번호의 우선순위에 따라 발신 자격 증명 유형을 AWS 최종 사용자 메시징 SMS 선택합니다. 이 우선 순위는 변경할 수 없습니다. 자세한 내용은 [AWS 최종 사용자 메시징 SMS FAQ](https://aws.amazon.com/end-user-messaging/faqs/)를 참조하세요.

### 환경이 SMS 샌드박스인지 확인합니다.
<a name="user-pool-sms-settings-first-time-confirm-sandbox"></a>

환경이 SMS 샌드박스인지 확인하려면 다음 절차를 따르세요. 프로덕션 Amazon Cognito 사용자 풀 AWS 리전 이 있는 각에 대해 반복합니다.

#### Amazon Cognito 콘솔에서 SMS 샌드박스 상태 검토
<a name="check-that-you-are-in-the-sms-sandbox"></a>

**환경이 SMS 샌드박스인지 확인하려면**

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

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

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

1. **인증 방법** 메뉴를 선택합니다.

1. [**SMS 구성(SMS configuration)**] 섹션에서 [**Amazon SNS 프로덕션 환경으로 이동(Move to Amazon SNS production environment)**]을 확장합니다. 계정이 SMS 샌드박스에 있는 경우 다음 메시지가 표시됩니다.

   **SMS 메시지 설정을 완료하도록 AWS 서비스 종속성 구성**

   이 메시지가 표시되지 않으면 해당 계정으로 이미 SMS 메시지를 설정한 다른 사용자가 있는 것입니다. [Amazon Cognito에서 사용자 풀 설정 완료](#user-pool-sms-settings-first-time-finish-user-pool) 섹션으로 이동하세요.

1. **Amazon SNS 프로덕션 환경으로 이동**에서 [Amazon SNS](https://console.aws.amazon.com/sns/home) 링크를 선택합니다. 이렇게 하면 Amazon SNS 콘솔이 새 탭에서 열립니다.

1. 샌드박스 환경에 있는지 확인합니다. 콘솔 메시지는 다음과 같이 샌드박스 상태와 AWS 리전를 나타냅니다.

   `This account is in the SMS sandbox in US East (N. Virginia).`

### 샌드박스에서 계정 이동
<a name="user-pool-sms-settings-first-time-out-sandbox"></a>

프로덕션에서 앱을 사용하려면 계정을 SMS 샌드박스에서 프로덕션으로 이동합니다. Amazon Cognito에서 AWS 리전 사용할 AWS 최종 사용자 메시징 SMS 리소스가 포함된에서 발신 자격 증명을 구성한 후가 SMS 샌드박스에 AWS 계정 있는 동안 미국 전화번호를 확인할 수 있습니다. 환경이 프로덕션 상태일 때는 SMS 메시지를 보내기 전에 사용자 전화번호를 확인할 필요가 없습니다.

 AWS 최종 사용자 메시징 SMS 콘솔 또는 Amazon SNS 콘솔에서 샌드박스 종료 요청을 생성할 수 있습니다. 자세한 지침은 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [SMS 샌드박스에서 이동](https://docs.aws.amazon.com/sms-voice/latest/userguide/sandbox.html#sandbox-sms-move-to-production)을 참조하세요.

### 에서 시뮬레이터 번호 또는 확인된 전화번호 사용 AWS 최종 사용자 메시징 SMS
<a name="user-pool-sms-settings-first-time-verify-numbers"></a>

계정을 SMS 샌드박스 외부로 이동한 경우 이 단계를 건너뜁니다.

샌드박스에 있지만 발신 번호를 설정한 경우 확인된 대상 번호로 메시지를 보낼 수 있습니다. 확인된 대상을 설정하려면 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [확인된 대상 전화번호 추가](https://docs.aws.amazon.com/sms-voice/latest/userguide/verify-destination-phone-number.html)를 참조하세요.

시뮬레이션된 발신자 및 대상으로 메시지를 보낼 수도 있습니다. 시뮬레이터 메시지는 로그를 생성하지만 통신 사업자 네트워크를 통해 전송되지는 않습니다. [바로 가기 메뉴](https://console.aws.amazon.com/sms-voice/home?#/shortcuts)에서 **SMS 시뮬레이터를 사용한 SMS 전송 테스트**를 선택합니다. 자세한 내용은 *AWS 최종 사용자 메시징 SMS 사용 설명서*의 [시뮬레이터 전화번호](https://docs.aws.amazon.com/sms-voice/latest/userguide/test-phone-numbers.html)를 참조하세요.

### Amazon Cognito에서 사용자 풀 설정 완료
<a name="user-pool-sms-settings-first-time-finish-user-pool"></a>

사용자 풀을 생성 또는 [편집](signing-up-users-in-your-app.md#verification-configure)하고 있던 브라우저 탭으로 돌아갑니다. 절차를 완료합니다. 사용자 풀에 SMS 구성을 성공적으로 추가하면 Amazon Cognito가 내부 전화번호에 테스트 메시지를 전송하여 구성이 제대로 작동하는지 확인합니다. Amazon SNS는 각 테스트 SMS 메시지에 대해 요금을 청구합니다.