

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

# Amazon Cognito의 데이터 보호
<a name="data-protection"></a>

 AWS [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/) Amazon Cognito(Amazon Cognito)의 데이터 보호에 적용됩니다. 이 모델에 설명된 대로 AWS 는 모든 AWS 클라우드를 실행하는 글로벌 인프라를 보호할 책임이 있습니다. 사용자는 이 인프라에 호스팅되는 콘텐츠에 대한 통제 권한을 유지할 책임이 있습니다. 이 콘텐츠에는 사용하는 AWS 서비스에 대한 보안 구성 및 관리 작업이 포함됩니다. 데이터 프라이버시에 대한 자세한 내용은 [데이터 프라이버시 FAQ](https://aws.amazon.com/compliance/data-privacy-faq)를 참조하세요.

데이터 보호를 위해 AWS 계정 자격 증명을 보호하고 AWS Identity and Access Management (IAM)을 사용하여 개별 사용자 계정을 설정하는 것이 좋습니다. 이러한 방식에서는 각 사용자에게 자신의 직무를 충실히 이행하는 데 필요한 권한만 부여됩니다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다.
+ 각 계정에 다중 인증(MFA)을 사용합니다.
+ SSL/TLS를 사용하여 AWS 리소스와 통신합니다.
+ 를 사용하여 API 및 사용자 활동 로깅을 설정합니다 AWS CloudTrail.
+  AWS 암호화 솔루션을 서비스 내의 AWS 모든 기본 보안 제어와 함께 사용합니다.
+ Amazon S3에 저장된 개인 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리형 보안 서비스를 사용합니다.

**이름** 필드와 같은 자유 형식 필드에 고객 계정 번호와 같은 중요 식별 정보를 절대 입력하지 마세요. 여기에는 Amazon Cognito 또는 기타 AWS 서비스에서 콘솔 AWS CLI, API 또는 AWS SDKs를 사용하여 작업하는 경우가 포함됩니다. Amazon Cognito 또는 기타 서비스에 입력하는 모든 데이터를 진단 로그에 포함할 수 있습니다. 외부 서버에 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 자격 증명 정보를 URL에 포함시키지 마세요.

## 데이터 암호화
<a name="data-encryption"></a>

데이터 암호화는 일반적으로 저장 데이터 암호화와 전송 중 데이터 암호화의 두 가지 범주로 나뉩니다.

### 저장 시 암호화
<a name="data-encryption-at-rest"></a>

Amazon Cognito 사용자 풀 및 자격 증명 풀 내의 데이터는 업계 표준에 따라 저장 시 암호화됩니다.
+ Amazon Cognito는 [AWS 소유 키를](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) 사용하여 자격 증명 풀의 고객 데이터를 암호화합니다. 이 동작은 변경할 수 없습니다.
+ *기본적으로* Amazon Cognito는 AWS 소유 키를 사용하여 사용자 풀의 고객 데이터도 암호화합니다. 대신 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)로 고객 정보를 암호화하도록 사용자 풀을 구성할 수도 있습니다.

**AWS 소유 키**  
Amazon Cognito는 AWS 소유 KMS 키를 사용하여 사용자 풀 또는 자격 증명 풀의 데이터를 암호화합니다. 이 유형의 키는에 표시되지 않습니다 AWS KMS.

**고객 관리형 키**  
Amazon Cognito는 고객 관리형 키를 사용하여 사용자 풀의 데이터를 암호화합니다. 고객 관리형 키 정책, 교체 및 예약된 삭제 관리는 사용자가 소유합니다.  
고객 관리형 키를 사용한 암호화는 일부 사용자 풀에서 사용하지 못할 수 있습니다. 새로 생성된 사용자 풀에는 항상 이러한 형식의 암호화를 사용할 수 있습니다.

**고객 관리형 키를 사용한 사용자 풀 암호화에 대해 알아야 할 사항**

1. 암호화 설정을 구성하는 작업을 수행하지 않더라도 사용자 풀의 모든 고객 데이터는 저장 시 암호화됩니다.

1. Amazon Cognito는 유휴 사용자 풀 암호화를 위해 사용자 풀 AWS 리전 과 동일한에서 대칭 KMS 키만 지원합니다. [비대칭 키를](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html) 사용하여 유휴 시 사용자 풀 암호화를 구성할 수 없습니다. 단일 리전 키와 사용자 풀과 동일한 리전에 있는 [다중 리전 키를](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) 사용하여 저장 시 암호화를 구성할 수 있습니다.

1. 사용자 풀 암호화는 별칭이 아닌 KMS 키 ARN으로만 구성할 수 있습니다.

**PII 암호화**  
Amazon Cognito는 [검색 가능한 암호화](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/searchable-encryption.html)를 사용하여 사용자 속성 검색에서 개인 식별 정보(PII)의 기밀성, 무결성 및 가용성을 지원합니다. 사용자 풀 데이터 세트에 최적화된 이러한 해시 기반 메시지 인증 코드(HMAC) 함수는 사용자 속성의 일반 텍스트 값과 암호화된 값 간에 매핑됩니다. Amazon Cognito는 사용자 풀을 암호화하는 KMS 키를 사용하여 HMAC 값을 계산합니다. 이 보호는 다음 속성에 적용됩니다.
+ `sub`
+ `email`
+ `phone_number`
+ `given_name`
+ `family_name`
+ `name`
+ `username`
+ `preferred_username`
+ `cognito:user_status`

다음 절차에서는 사용자 풀에서 저장 데이터 암호화를 구성합니다. Amazon Cognito와 AWS 서비스 같이 액세스를 위임하는 KMS 키 정책에 대한 자세한 내용은 [키 정책의 Amazon Cognito에 대한 권한을 참조하세요](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-services.html).

------
#### [ Set customer managed key policy ]

고객 관리형 키를 사용하려면 키가 키에 대한 암호화 및 복호화 작업을 수행하기 위해 Amazon Cognito 서비스 보안 주체를 신뢰해야 합니다. 다음 예제와 같이 KMS 키의 키 [정책을](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) 구성합니다. 이 정책을 작성하는 IAM 보안 주체는 `kms:PutKeyPolicy` 권한이 있는 KMS 키에 대한 쓰기 액세스 권한이 있어야 합니다.

```
{
    "Id": "cognito-cmk-policy",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Allow Amazon Cognito service access",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "cognito-idp.amazonaws.com",
                    "identitystore.amazonaws.com"
                ]
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKeyWithoutPlainText"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": [
                        "arn:{{aws}}:cognito-idp:{{us-east-1}}:{{111122223333}}:userpool/{{us-east-1_EXAMPLE}}"
                    ]
                },
                "StringEquals": {
                    "aws:SourceAccount": [
                        "{{111122223333}}"
                    ]
                },
                "StringLike": {
                    "kms:EncryptionContext:aws:cognito-idp:userpool-arn": "arn:{{aws}}:cognito-idp:{{us-east-1}}:{{111122223333}}:userpool/{{us-east-1_EXAMPLE}}"
                }
            }
        },
        {
            "Sid": "Allow Amazon Cognito service DescribeKey access",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "cognito-idp.amazonaws.com",
                    "identitystore.amazonaws.com"
                ]
            },
            "Action": [
                "kms:DescribeKey"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": [
                        "arn:{{aws}}:cognito-idp:{{us-east-1}}:{{111122223333}}:userpool/{{us-east-1_EXAMPLE}}"
                    ]
                },
                "StringEquals": {
                    "aws:SourceAccount": [
                        "{{111122223333}}"
                    ]
                }
            }
        },
        {
            "Sid": "Allow access through Amazon Cognito for all principals in account that are authorized to use Amazon Cognito",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "kms:DescribeKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": [
                        "cognito-idp.{{us-east-1}}.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Sid": "Allow access through Amazon Cognito for all principals in account that are authorized to use Amazon Cognito",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKeyWithoutPlainText"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": [
                        "cognito-idp.{{us-east-1}}.amazonaws.com"
                    ]
                },
                "StringLike": {
                    "kms:EncryptionContext:aws:cognito-idp:userpool-arn": "arn:{{aws}}:cognito-idp:{{us-east-1}}:{{111122223333}}:userpool/{{us-east-1_EXAMPLE}}"
                }
            }
        },
        {
            "Sid": "Allow administrators to manage the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:{{aws}}:iam::{{111122223333}}:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        }
    ]
}
```

------
#### [ Set customer managed key policy with permissions for encryption of exported logs ]

[로그 내보내기](exporting-quotas-and-usage.md)가 구성된 경우 KMS 키에이 정책을 적용합니다. 이 정책은 Amazon Cognito가 로그를 내보낼 때 로그를 암호화하고 중간 서비스는 로그를 해독한 후 CloudWatch Logs 로그 그룹에 기록하도록 허용합니다. 다음 예제와 같이 KMS 키의 키 [정책을](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) 구성합니다. 이 정책을 작성하는 IAM 보안 주체는 `kms:PutKeyPolicy` 권한이 있는 KMS 키에 대한 쓰기 액세스 권한이 있어야 합니다.

```
{
    "Id": "cognito-cmk-policy",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Allow Amazon Cognito service access",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "cognito-idp.amazonaws.com",
                    "identitystore.amazonaws.com"
                ]
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKeyWithoutPlainText"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": [
                        "arn:{{aws}}:cognito-idp:{{us-east-1}}:{{111122223333}}:userpool/{{us-east-1_EXAMPLE}}"
                    ]
                },
                "StringEquals": {
                    "aws:SourceAccount": [
                        "{{111122223333}}"
                    ]
                },
                "StringLike": {
                    "kms:EncryptionContext:aws:cognito-idp:userpool-arn": "arn:{{aws}}:cognito-idp:{{us-east-1}}:{{111122223333}}:userpool/{{us-east-1_EXAMPLE}}"
                }
            }
        },
        {
            "Sid": "Allow Amazon Cognito service DescribeKey access",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "cognito-idp.amazonaws.com",
                    "identitystore.amazonaws.com"
                ]
            },
            "Action": [
                "kms:DescribeKey"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": [
                        "arn:{{aws}}:cognito-idp:{{us-east-1}}:{{111122223333}}:userpool/{{us-east-1_EXAMPLE}}"
                    ]
                },
                "StringEquals": {
                    "aws:SourceAccount": [
                        "{{111122223333}}"
                    ]
                }
            }
        },
        {
            "Sid": "Allow access through Amazon Cognito for all principals in account that are authorized to use Amazon Cognito",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "kms:DescribeKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": [
                        "cognito-idp.{{us-east-1}}.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Sid": "Allow access through Amazon Cognito for all principals in account that are authorized to use Amazon Cognito",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKeyWithoutPlainText"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": [
                        "cognito-idp.{{us-east-1}}.amazonaws.com"
                    ]
                },
                "StringLike": {
                    "kms:EncryptionContext:aws:cognito-idp:userpool-arn": "arn:{{aws}}:cognito-idp:{{us-east-1}}:{{111122223333}}:userpool/{{us-east-1_EXAMPLE}}"
                }
            }
        },
        {
            "Sid": "Allow Amazon Cognito service log delivery access",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "cognito-idp.amazonaws.com"
                ]
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Encrypt"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:EncryptionContext:SourceArn": "arn:{{aws}}:logs:{{us-east-1}}:{{111122223333}}:*"
                }
            }
        },
        {
            "Sid": "Allow IngestionHub service log delivery access",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "delivery.logs.amazonaws.com"
                ]
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "kms:EncryptionContext:SourceArn": "arn:{{aws}}:logs:{{us-east-1}}:{{111122223333}}:*"
                }
            }
        },
        {
            "Sid": "Allow administrators to manage the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:{{aws}}:iam::{{111122223333}}:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        }
    ]
}
```

------
#### [ Configure encryption at rest in the console ]

**사용자 풀에서 저장 시 암호화를 구성하려면**

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

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

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

1. **설정** 메뉴를 선택하고 **사용자 풀 보안** 탭으로 이동합니다. **저장 시 암호화**를 찾아 **편집**을 선택합니다.

1. **키 유형**에서 **AWS 소유 키** 또는 **고객 관리형 키를** 선택합니다.

   1. **AWS 소유 키를** 선택한 경우 추가 구성이 필요하지 않습니다.

   1. **고객 관리형 키를** 선택한 경우 **고객 관리형 키 ARN에 KMS 키의 ARN**을 입력합니다. AWS KMS 콘솔에서 ** AWS KMS 키 생성을** 선택하고 새 창을 열어 새 KMS 키를 생성할 수도 있습니다.

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

------
#### [ Configure encryption at rest with the API ]

[CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-KeyConfiguration) 또는 [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-KeyConfiguration) API 요청에서 키 구성을 설정합니다. 다음 부분 예제 요청 본문은 제공된 고객 관리형 키를 사용하도록 사용자 풀을 설정합니다. 전체 예제 요청은 [예제](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#API_CreateUserPool_Examples) 섹션을 참조하세요.

```
"KeyConfiguration": { 
   "KeyType": "CUSTOMER_MANAGED_KEY",
   "KmsKeyArn": "arn:aws:kms:{{us-east-1}}:{{111122223333}}:key/{{a1b2c3d4-5678-90ab-cdef-EXAMPLE22222}}"
},
```

다음 부분 예제 요청 본문은 AWS 소유 키를 사용하도록 사용자 풀을 설정합니다.

```
"KeyConfiguration": { 
   "KeyType": "AWS_OWNED_KEY"
},
```

[DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html) 응답에 `KeyConfiguration` 파라미터가 포함되지 않은 경우 사용자 풀은 AWS 소유 키로 저장 데이터를 암호화하도록 구성됩니다.

------

## 전송 중 암호화
<a name="data-encryption-in-transit"></a>

관리형 서비스인 Amazon Cognito는 AWS 글로벌 네트워크 보안으로 보호됩니다. AWS 보안 서비스 및가 인프라를 AWS 보호하는 방법에 대한 자세한 내용은 [AWS 클라우드 보안을](https://aws.amazon.com/security/) 참조하세요. 인프라 보안 모범 사례를 사용하여 환경을 설계하려면 *보안 원칙 AWS Well‐Architected Framework*의 [인프라 보호를](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html) 참조하세요 AWS .

 AWS 에서 게시한 API 호출을 사용하여 네트워크를 통해 Amazon Cognito에 액세스합니다. 클라이언트는 다음을 지원해야 합니다.
+ Transport Layer Security(TLS). TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ DHE(Ephemeral Diffie-Hellman) 또는 ECDHE(Elliptic Curve Ephemeral Diffie-Hellman)와 같은 완전 전송 보안(PFS)이 포함된 암호 제품군. Java 7 이상의 최신 시스템은 대부분 이러한 모드를 지원합니다.

Amazon Cognito 사용자 풀과 자격 증명 풀에는 IAM 인증, 비인증 및 토큰 승인 API 작업이 있습니다. 일부는 사용자 풀 도메인 구성과 같은 관리 작업을 위한 *컨트롤 플레인* 유형 작업이고, 다른 하나는 인증을 위한 *데이터 플레*인 유형 작업입니다. 자세한 내용은 [권한 부여 모델별로 그룹화된 API 작업 목록](authentication-flows-public-server-side.md#user-pool-apis-auth-unauth) 단원을 참조하십시오. Amazon Cognito API 작업의 모든 클래스는 사용자 풀,`cognito-idp` 자격 증명 풀 및 서비스 엔드포인트`cognito-identity`의 네임스페이스를 공유합니다. [AWS 서비스 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html)에는 [최소 TLS 버전 1.2](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/)로 전송 중 암호화가 필요합니다.

Amazon Cognito 사용자 풀은 서비스 소유 Amazon CloudFront 배포에서 제공되는 웹 도메인에서 [관리형 로그인](cognito-user-pools-managed-login.md) 및 클래식 호스팅 UI를 호스팅합니다. Amazon Cognito는 해당 배포에서 전송 중 암호화 설정을 관리합니다. 관리형 로그인의 암호화 설정에 대한 자세한 내용은 관리형 로그인 장의 [TLS 버전을](cognito-user-pools-managed-login.md#managed-login-things-to-know-TLSversion) 참조하세요.