DynamoDB Encryption Client 애플리케이션의 문제 해결 - AWS 데이터베이스 암호화 SDK

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

DynamoDB Encryption Client 애플리케이션의 문제 해결

참고

클라이언트 측 암호화 라이브러리의 이름이 AWS Database Encryption SDK로 변경되었습니다. 다음 주제에서는 Java용 DynamoDB Encryption Client 버전 1.x~2.x 와 Python용 DynamoDB Encryption Client 버전 1.x~3.x에 대한 정보를 제공합니다. 자세한 내용은 AWS Database Encryption SDK for DynamoDB 버전 지원을 참조하세요.

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

DynamoDB Encryption Client에 대한 피드백을 제공하려면 aws-dynamodb-encryption-java 또는 aws-dynamodb-encryption-python GitHub 리포지토리에 문제를 제출하세요.

이 설명서에 대한 피드백을 제공하려면 이 페이지의 피드백 링크를 사용하십시오. GitHub에서 이 설명서의 오픈 소스 리포지토리인 aws-dynamodb-encryption-docs에 문제를 제기하거나 기고할 수도 있습니다.

액세스가 거부되었습니다

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

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

세부 정보

DynamoDB Encryption Client 라이브러리를 사용하는 애플리케이션을 실행하려면, 호출자에게 해당 구성 요소를 사용할 수 있는 권한이 있어야 합니다. 그렇지 않으면 필수 요소에 대한 액세스가 거부됩니다.

  • DynamoDB Encryption Client에는 Amazon Web Services(AWS) 계정이 필요하지 않으며 어떤 AWS 서비스에도 의존하지 않습니다. 그러나 애플리케이션에서 AWS을 사용하는 경우 AWS 계정 및 해당 계정을 사용할 수 있는 권한이 있는 사용자가 필요합니다.

  • DynamoDB Encryption Client에는 Amazon DynamoDB가 필요하지 않습니다. 그러나 클라이언트를 사용하는 애플리케이션이 DynamoDB 테이블을 생성하거나, 테이블에 항목을 넣거나, 테이블에서 항목을 가져오는 경우 호출자는 AWS 계정에 필요한 DynamoDB 작업을 사용할 수 있는 권한이 있어야 합니다. 자세한 내용은 Amazon DynamoDB 개발자 안내서액세스 제어 주제를 참조하세요.

  • 애플리케이션이 DynamoDB Encryption Client for Python의 클라이언트 헬퍼 클래스를 사용하는 경우 호출자는 DynamoDB DescribeTable 작업을 호출할 권한이 있어야 합니다.

  • DynamoDB Encryption Client에는 AWS Key Management Service (AWS KMS)가 필요하지 않습니다. 그러나 애플리케이션이 Direct KMS Materials Provider를 사용하거나 AWS KMS를 사용하는 공급자 스토어가 있는 Most Recent Provider를 사용하는 경우 호출자에게 AWS KMS GenerateDataKeyDecrypt 작업을 사용할 수 있는 권한이 있어야 합니다.

서명 확인 실패

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

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

세부 정보

제공하는 속성 작업은 암호화하고 서명할 속성, 서명할(암호화하지 않음) 속성, 무시할 속성을 DynamoDB Encryption Client에 알려줍니다.

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

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

이전 버전 글로벌 테이블 관련 문제

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

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

세부 정보

DynamoDB Encryption Client를 DynamoDB 글로벌 테이블과 함께 사용할 수 있습니다. 다중 리전 KMS 키가 있는 글로벌 테이블을 사용하고 글로벌 테이블이 복제되는 모든 AWS 리전에 KMS 키를 복제하는 것이 좋습니다.

글로벌 테이블 버전 2019.11.21부터 DynamoDB Encryption Client에서 특별한 구성 없이 글로벌 테이블을 사용할 수 있습니다. 하지만 글로벌 테이블 버전 2017.11.29를 사용하는 경우 예약된 복제 필드가 암호화되거나 서명되지 않았는지 확인해야 합니다.

글로벌 테이블 버전 2017.11.29를 사용하는 경우 다음 속성에 대한 속성 작업을 Java의 DO_NOTHING 또는 Python@DoNotTouch으로 설정해야 합니다.

  • aws:rep:deleting

  • aws:rep:updatetime

  • aws:rep:updateregion

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

Most Recent Provider의 성능 저하

문제: 특히 최신 버전의 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 값 설정 섹션을 참조하십시오.