

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

# DynamoDB Encryption Client 애플리케이션의 문제 해결
<a name="troubleshooting"></a>

**참고**  
클라이언트측 암호화 라이브러리의 [이름이 AWS Database Encryption SDK로 변경되었습니다](DDBEC-rename.md). 다음 주제에서는 Java용 DynamoDB Encryption Client 버전 1.*x*\$12.*x* 와 Python용 DynamoDB Encryption Client 버전 1.*x*\$13.*x*에 대한 정보를 제공합니다. 자세한 내용은 [AWS Database Encryption SDK for DynamoDB 버전 지원](legacy-dynamodb-encryption-client.md#legacy-support)을 참조하세요.

이 섹션에서는 DynamoDB Encryption Client를 사용할 때 발생할 수 있는 문제를 설명하고 문제 해결을 위한 제안을 제공합니다.

DynamoDB Encryption Client에 대한 피드백을 제공하려면 [aws-dynamodb-encryption-java](https://github.com/aws/aws-dynamodb-encryption-java/) 또는 [aws-dynamodb-encryption-python](https://github.com/aws/aws-dynamodb-encryption-python/) GitHub 리포지토리에 문제를 제출하세요.

이 설명서에 대한 피드백을 제공하려면 이 페이지의 피드백 링크를 사용하십시오.

**Topics**
+ [액세스 거부됨](#kms-permissions)
+ [서명 확인 실패](#change-data-model)
+ [이전 버전 글로벌 테이블 관련 문제](#fix-global-tables)
+ [Most Recent Provider의 성능 저하](#mrp-ttl-delay)

## 액세스 거부됨
<a name="kms-permissions"></a>

**문제**: 필요한 리소스에 대한 애플리케이션의 액세스가 거부됩니다.

**제안**: 필요한 권한에 대해 알아보고 이러한 권한을 애플리케이션이 실행되는 보안 컨텍스트에 추가합니다.

**세부 정보**

DynamoDB Encryption Client 라이브러리를 사용하는 애플리케이션을 실행하려면, 호출자에게 해당 구성 요소를 사용할 수 있는 권한이 있어야 합니다. 그렇지 않으면 필수 요소에 대한 액세스가 거부됩니다.
+ DynamoDB Encryption Client에는 Amazon Web Services(AWS) 계정이 필요하지 않으며 어떤 AWS 서비스에도 의존하지 않습니다. 그러나 애플리케이션에서 [를 AWS 계정](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) 사용하는 경우 계정을 사용할 [권한이 있는 및 사용자가](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html) AWS필요합니다.
+ DynamoDB Encryption Client에는 Amazon DynamoDB가 필요하지 않습니다. 그러나 클라이언트를 사용하는 애플리케이션이 DynamoDB 테이블을 생성하거나, 테이블에 항목을 넣거나, 테이블에서 항목을 가져오는 경우 호출자는 AWS 계정에 필요한 DynamoDB 작업을 사용할 수 있는 권한이 있어야 합니다. 자세한 내용은 *Amazon DynamoDB 개발자 안내서*의 [액세스 제어 주제](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-overview.html)를 참조하세요.
+ 애플리케이션이 DynamoDB Encryption Client for Python의 [클라이언트 헬퍼 클래스](python-using.md#python-helpers)를 사용하는 경우 호출자는 DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html) 작업을 호출할 권한이 있어야 합니다.
+ DynamoDB Encryption Client에는 AWS Key Management Service ()가 필요하지 않습니다AWS KMS. 그러나 애플리케이션이 [Direct KMS Materials Provider](direct-kms-provider.md)를 사용하거나가 사용하는 공급자 스토어와 함께 [Most Recent Provider](most-recent-provider.md)를 사용하는 경우 AWS KMS호출자는 AWS KMS [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 및 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업을 사용할 수 있는 권한이 있어야 합니다.

## 서명 확인 실패
<a name="change-data-model"></a>

**문제**: 서명 확인 실패로 인해 항목을 복호화할 수 없습니다. 또한 항목이 의도한 대로 암호화 및 서명되지 않을 수도 있습니다.

**제안**: 제공하는 속성 작업에서 항목의 모든 속성을 고려해야 합니다. 항목을 복호화할 때는 항목을 암호화하는 데 사용된 작업과 일치하는 속성 작업을 제공해야 합니다.

**세부 정보**

제공하는 [속성 작업](DDBEC-legacy-concepts.md#legacy-attribute-actions)은 암호화하고 서명할 속성, 서명할(암호화하지 않음) 속성, 무시할 속성을 DynamoDB Encryption Client에 알려줍니다.

지정한 속성 작업이 항목의 모든 속성을 고려하지 않는 경우 항목이 의도한 방식으로 암호화되고 서명되지 않을 수 있습니다. 항목 복호화 시 제공하는 속성 작업과 항목 암호화 시 제공했던 속성 작업이 다른 경우 서명 확인이 실패할 수 있습니다. 이는 새 속성 동작이 모든 호스트에 전파되지 않았을 수 있는 분산 애플리케이션에서 특히 발생하는 문제입니다.

서명 유효성 검사 오류는 해결하기 어렵습니다. 이를 방지하기 위해 데이터 모델을 변경할 때 추가 예방 조치를 취하십시오. 자세한 내용은 [데이터 모델 변경](data-model.md)을 참조하세요.

## 이전 버전 글로벌 테이블 관련 문제
<a name="fix-global-tables"></a>

**문제**: 서명 확인에 실패하여 이전 버전의 Amazon DynamoDB 글로벌 테이블의 항목을 복호화할 수 없습니다.

**제안**: 예약된 복제 필드가 암호화되거나 서명되지 않도록 속성 작업을 설정합니다.

**세부 정보**

DynamoDB Encryption Client를 [DynamoDB 글로벌 테이블](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html)과 함께 사용할 수 있습니다. [다중 리전 KMS 키](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)와 함께 글로벌 테이블을 사용하고 글로벌 테이블이 복제되는 모든 AWS 리전 에 KMS 키를 복제하는 것이 좋습니다.

글로벌 테이블 [버전 2019.11.21](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V2.html)부터 DynamoDB Encryption Client에서 특별한 구성 없이 글로벌 테이블을 사용할 수 있습니다. 하지만 글로벌 테이블 [버전 2017.11.29](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V1.html)를 사용하는 경우 예약된 복제 필드가 암호화되거나 서명되지 않았는지 확인해야 합니다.

[글로벌 테이블 버전 2017.11.29를 사용하는 경우 다음 속성에 대한 속성 작업을 [Java](java-using.md#attribute-actions-java)의 `DO_NOTHING` 또는 Python](python-using.md#python-attribute-actions)의 `@DoNotTouch`으로 설정해야 합니다.
+ `aws:rep:deleting`
+ `aws:rep:updatetime`
+ `aws:rep:updateregion`

다른 버전의 글로벌 테이블을 사용하는 경우에는 별도의 조치가 필요하지 않습니다.

## Most Recent Provider의 성능 저하
<a name="mrp-ttl-delay"></a>

**문제**: 특히 최신 버전의 DynamoDB Encryption Client로 업데이트한 후 애플리케이션의 응답성이 떨어집니다.

**제안**: Time-to-Live 값과 캐시 크기를 조정합니다.

**세부 정보**

Most Recent Provider는 암호화 자료의 재사용을 제한적으로 허용하여 DynamoDB Encryption Client를 사용하는 애플리케이션의 성능을 개선하도록 설계되었습니다. 애플리케이션에 Most Recent Provider를 구성할 때는 성능 향상과 캐싱 및 재사용으로 인해 발생하는 보안 문제 사이에서 균형을 맞춰야 합니다.

최신 버전의 DynamoDB Encryption Client에서는 time-to-live(TTL) 값에 따라 캐시된 암호화 자료 공급자(CMP)를 사용할 수 있는 기간이 결정됩니다. 또한 TTL은 Most Recent Provider가 CMP의 새 버전을 확인하는 빈도를 결정합니다.

TTL이 너무 길면 애플리케이션이 비즈니스 규칙이나 보안 표준을 위반할 수 있습니다. TTL이 너무 짧은 경우 공급자 스토어를 자주 호출하면 공급자 스토어가 애플리케이션 및 서비스 계정을 공유하는 기타 애플리케이션의 요청을 제한할 수 있습니다. 이 문제를 해결하려면 지연 시간 및 가용성 목표를 충족하고 보안 표준을 준수하는 값으로 TTL 및 캐시 크기를 조정합니다. 자세한 내용은 [time-to-live 값 설정](most-recent-provider.md#most-recent-provider-ttl) 섹션을 참조하십시오.