Direct KMS Materials Provider - AWS 데이터베이스 암호화 SDK

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

Direct KMS Materials Provider

참고

클라이언트 측 암호화 라이브러리의 이름이 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 버전 지원을 참조하세요.

Direct KMS Materials Provider(Direct KMS Provider)는 AWS Key Management Service (AWS KMS)을 암호화되지 않은 상태로 유지하지 않는 AWS KMS key에 따라 테이블 항목을 보호합니다. 이 암호화 자료 공급자는 각 테이블 항목에 대해 고유한 암호화 키 및 서명 키를 반환합니다. 이를 위해 항목을 암호화하거나 복호화할 때마다 AWS KMS을 호출합니다.

DynamoDB 항목을 높은 빈도와 대규모로 처리하는 경우 AWS KMS 초당 요청 제한을 초과하여 처리 지연이 발생할 수 있습니다. 제한을 초과해야 하는 경우 AWS Support 센터에서 사례를 생성합니다. Most Recent Provider와 같이 키 재사용이 제한된 암호화 자료 공급자를 사용하는 것도 고려해 볼 수 있습니다.

Direct KMS Provider를 사용하려면 호출자에게 한 개의 AWS 계정, 최소 한 개의 AWS KMS key, AWS KMS key에서 GenerateDataKeyDecrypt 작업을 호출할 수 있는 권한이 있어야 합니다. AWS KMS key는 대칭 암호화 키여야 합니다. DynamoDB Encryption Client는 비대칭 암호화를 지원하지 않습니다. DynamoDB 글로벌 테이블을 사용하는 경우 AWS KMS 다중 리전 키를 지정하는 것이 좋습니다. 자세한 내용은 사용 방법 섹션을 참조하세요.

참고

Direct KMS Provider를 사용하면 프라이머리 키 속성의 이름과 값이 AWS KMS 암호화 컨텍스트 및 관련 AWS KMS 작업의 AWS CloudTrail 로그에 일반 텍스트로 표시됩니다. 그러나 DynamoDB Encryption Client는 암호화된 어떤 속성 값도 일반 텍스트로 노출하지 않습니다.

Direct KMS Provider는 DynamoDB Encryption Client가 지원하는 여러 암호화 자료 공급자(CMP) 중 하나입니다. 기타 CMP에 대한 자세한 내용은 암호화 자료 공급자 섹션을 참조하세요.

예제 코드는 다음을 참조하십시오.

사용 방법

Direct KMS Provider를 생성하려면 키 ID 파라미터를 사용하여 계정에 대칭 암호화 KMS 키를 지정합니다. 키 ID 파라미터의 값은 AWS KMS key의 키 ID, 키 ARN, 별칭 이름 또는 별칭 ARN일 수 있습니다. 키 식별자에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드키 식별자를 참조하세요.

Direct KMS Provider에는 대칭 암호화 KMS 키가 필요합니다. 비대칭 KMS 키를 사용할 수 없습니다. 그러나 다중 리전 KMS 키, 가져온 키 자료가 있는 KMS 키 또는 사용자 지정 키 스토어의 KMS 키를 사용할 수 있습니다. KMS 키에 대한 kms:GenerateDataKeykms:Decrypt 권한이 있어야 합니다. 따라서 AWS 관리형 또는 AWS 소유형 KMS 키가 아닌 고객 관리형 키를 사용해야 합니다.

Python용 DynamoDB Encryption Client는 키 ID 파라미터 값(포함된 경우)의 리전에서 AWS KMS를 호출할 리전을 결정합니다. 그렇지 않으면 AWS KMS 클라이언트의 리전(지정한 경우)을 사용하거나 AWS SDK for Python (Boto3)에 구성한 리전을 사용합니다. Python의 리전 선택에 대한 자세한 내용은 AWS SDK for Python(Boto3) API 참조의 구성을 참조하세요.

Java용 DynamoDB Encryption Client는 지정한 클라이언트에 리전이 포함된 경우 AWS KMS 클라이언트의 리전에서 AWS KMS을 호출할 리전을 결정합니다. 그렇지 않으면 AWS SDK for Java에서 구성한 리전을 사용합니다. AWS SDK for Java에서의 리전 선택에 대한 자세한 내용은 AWS SDK for Java 개발자 안내서의 AWS 리전 선택을 참조하세요.

Java
// Replace the example key ARN and Region with valid values for your application final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' final String region = 'us-west-2' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, keyArn);
Python

다음 예에서는 ARN 키를 사용하여 AWS KMS key를 지정합니다. 키 식별자에 AWS 리전가 포함되지 않은 경우 DynamoDB Encryption Client는 구성된 Botocore 세션(있는 경우) 또는 Boto 기본값에서 리전을 가져옵니다.

# Replace the example key ID with a valid value kms_key = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key)

Amazon DynamoDB 글로벌 테이블을 사용하는 경우 AWS KMS 다중 리전 키로 데이터를 암호화하는 것이 좋습니다. 다중 리전 키는 동일한 키 ID와 키 구성 요소를 가졌기 때문에 서로 교환해 사용할 수 있는 다양한 AWS 리전의 AWS KMS keys입니다. 자세한 내용을 알아보려면 AWS Key Management Service 개발자 안내서다중 리전 키 사용을 참조하세요.

참고

글로벌 테이블 버전 2017.11.29를 사용하는 경우 예약된 복제 필드가 암호화되거나 서명되지 않도록 속성 작업을 설정해야 합니다. 자세한 내용은 이전 버전 글로벌 테이블 관련 문제 섹션을 참조하세요.

DynamoDB Encryption Client에서 다중 리전 키를 사용하려면 다중 리전 키를 생성하여 애플리케이션이 실행되는 리전에 복제합니다. 그런 다음 DynamoDB Encryption Client가 AWS KMS을 호출하는 리전의 다중 리전 키를 사용하도록 Direct KMS Provider를 구성합니다.

다음 예제에서는 다중 리전 키를 사용하여 미국 동부(버지니아 북부)(us-east-1) 리전의 데이터를 암호화하고 미국 서부(오레곤)(us-west-2) 리전에서 이를 복호화하도록 DynamoDB Encryption Client를 구성합니다.

Java

이 예제에서 DynamoDB Encryption Client는 AWS KMS 클라이언트의 리전에서 AWS KMS을 호출하기 위한 리전을 가져옵니다. 이 keyArn 값은 동일한 리전의 다중 리전 키를 식별합니다.

// Encrypt in us-east-1 // Replace the example key ARN and Region with valid values for your application final String usEastKey = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' final String region = 'us-east-1' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usEastKey);
// Decrypt in us-west-2 // Replace the example key ARN and Region with valid values for your application final String usWestKey = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' final String region = 'us-west-2' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usWestKey);
Python

이 예제에서 DynamoDB Encryption Client는 키 ARN의 해당 리전에서 AWS KMS을 호출할 리전을 가져옵니다.

# Encrypt in us-east-1 # Replace the example key ID with a valid value us_east_key = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_east_key)
# Decrypt in us-west-2 # Replace the example key ID with a valid value us_west_key = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_west_key)

작동 방식

Direct KMS Provider는 다음 다이어그램에서처럼 사용자가 지정하는 AWS KMS key에 의해 보호되는 암호화 및 서명 키를 반환합니다.

DynamoDB Encryption Client에서 Direct KMS Provider의 입력, 처리 및 출력
  • 암호화 자료를 생성하기 위해 Direct KMS Provider는 사용자가 지정한 AWS KMS key를 사용하여 각 항목에 대한 고유한 데이터 키를 생성하도록 AWS KMS에 요청합니다. 이 공급자는 데이터 키의 일반 텍스트 복사본에서 항목의 암호화 및 서명 키를 추출한 다음 항목의 자료 설명 속성에 저장된 암호화된 데이터 키와 함께 암호화 및 서명 키를 반환합니다.

    항목 암호화기는 암호화 및 서명 키를 사용하여 가능한 한 빨리 메모리에서 암호화 및 서명 키를 제거합니다. 파생된 데이터 키의 암호화된 복사본만 암호화된 항목에 저장됩니다.

  • 복호화 자료를 생성하기 위해 Direct KMS Provider는 AWS KMS에 암호화된 데이터 키를 복호화하라고 요청합니다. 그런 다음 일반 텍스트 데이터 키에서 확인 및 서명 키를 추출하여 항목 암호화 도구에 반환합니다.

    항목 암호화기는 항목을 확인하고 확인에 성공하면 암호화된 값을 복호화합니다. 그런 다음 가능한 빨리 메모리에서 키를 제거합니다.

암호화 자료 가져오기

이 단원에서는 항목 암호화 도구에서 암호화 자료 요청 수신 시 Direct KMS Provider의 입력, 출력 및 처리에 대해 자세히 설명합니다.

입력(애플리케이션에서)

  • AWS KMS key의 키 ID입니다.

입력(항목 암호화 도구에서)

출력(항목 암호화 도구로)

  • 암호화 키(일반 텍스트)

  • 서명 키

  • 실제 자료 설명: 이러한 값은 클라이언트가 항목에 추가하는 자료 설명 속성에 저장됩니다.

    • amzn-ddb-env-key: AWS KMS key에 의해 암호화된 Base64로 인코딩된 데이터 키

    • amzn-ddb-env-alg: 암호화 알고리즘, 기본값은 AES/256

    • amzn-ddb-sig-alg: 서명 알고리즘, 기본값은 HmacSHA256/256

    • amzn-ddb-wrap-alg: kms

처리

  1. Direct KMS Provider는 지정된 AWS KMS key을 사용하여 항목에 대한 고유한 데이터 키를 생성하라는 요청을 AWS KMS에 보냅니다. 이 작업은 일반 텍스트 키와 AWS KMS key로 암호화된 복사본을 반환합니다. 이 자료를 초기 키 자료라고 합니다.

    이 요청은 AWS KMS 암호화 컨텍스트에 다음 값을 일반 텍스트로 포함합니다. 이러한 비밀이 아닌 값은 암호화된 개체에 암호화 방식으로 바인딩되므로 복호화 시 동일한 암호화 컨텍스트가 필요합니다. 이 값을 사용하여 AWS CloudTrail 로그에서 AWS KMS에 대한 호출을 식별할 수 있습니다.

    • amzn-ddb-env-alg – 암호화 알고리즘, 기본값은 AES/256

    • amzn-ddb-sig-alg – 서명 알고리즘, 기본값은 HmacSHA256/256

    • (선택 사항) aws-kms-table – 테이블 이름

    • (선택 사항) 파티션 키 이름파티션 키 값(이진 값은 Base64로 인코딩됨)

    • (선택 사항) 정렬 키 이름정렬 키 값(이진 값은 Base64로 인코딩됨)

    Direct KMS Provider는 항목에 대한 DynamoDB 암호화 컨텍스트에서 AWS KMS 암호화 컨텍스트 값을 가져옵니다. DynamoDB 암호화 컨텍스트가 테이블 이름 같은 값을 포함하지 않는 경우 해당 이름-값 페어가 AWS KMS 암호화 컨텍스트에서 생략됩니다.

  2. Direct KMS Provider는 데이터 키에서 대칭 암호화 키 및 서명 키를 추출합니다. 기본적으로 Secure Hash Algorithm(SHA) 256RFC5869 HMAC 기반 키 추출 함수를 사용하여 256비트 AES 대칭 암호화 키 및 256비트 HMAC-SHA-256 서명 키를 추출합니다.

  3. Direct KMS Provider는 출력을 항목 암호화 도구로 반환합니다.

  4. 항목 암호화기는 암호화 키를 사용하여 지정된 속성을 암호화하고 서명 키를 사용하여 실제 자료 설명에 지정된 알고리즘을 사용하여 서명합니다. 가능한 한 빨리 메모리에서 일반 텍스트 키를 제거합니다.

복호화 자료 가져오기

이 단원에서는 항목 암호화 도구에서 복호화 자료 요청 수신 시 Direct KMS Provider의 입력, 출력 및 처리를 자세히 설명합니다.

입력(애플리케이션에서)

  • AWS KMS key의 키 ID입니다.

    키 ID의 값은 AWS KMS key의 키 ID, 키 ARN, 별칭 이름 또는 별칭 ARN일 수 있습니다. 리전과 같이 키 ID에 포함되지 않은 모든 값은 AWS 명명된 프로필에서 사용할 수 있어야 합니다. 키 ARN은 에AWS KMS서 필요로 하는 모든 값을 제공합니다.

입력(항목 암호화 도구에서)

출력(항목 암호화 도구로)

  • 암호화 키(일반 텍스트)

  • 서명 키

처리

  1. Direct KMS Provider는 암호화된 항목의 자료 설명 속성에서 암호화된 데이터 키를 가져옵니다.

  2. 암호화된 데이터 키를 복호화하기 위해 지정된 AWS KMS key를 사용할 것을 AWS KMS에 요청합니다. 이 작업은 일반 텍스트 키를 반환합니다.

    이 요청은 데이터 키를 생성 및 암호화하는 데 사용된 것과 동일한 AWS KMS 암호화 컨텍스트를 사용해야 합니다.

    • aws-kms-table – 테이블 이름

    • 파티션 키 이름파티션 키 값(이진 값은 Base64로 인코딩됨)

    • (선택 사항) 정렬 키 이름정렬 키 값(이진 값은 Base64로 인코딩됨)

    • amzn-ddb-env-alg – 암호화 알고리즘, 기본값은 AES/256

    • amzn-ddb-sig-alg – 서명 알고리즘, 기본값은 HmacSHA256/256

  3. Direct KMS Provider는 Secure Hash Algorithm(SHA) 256RFC5869 HMAC 기반 키 파생 기능을 사용하여 데이터 키에서 256비트 AES 대칭 암호화 키와 256비트 HMAC-SHA-256 서명 키를 파생합니다.

  4. Direct KMS Provider는 출력을 항목 암호화 도구로 반환합니다.

  5. 항목 암호화기는 서명 키를 사용하여 항목을 확인합니다. 성공하면 대칭 암호화 키를 사용하여 암호화된 속성 값을 복호화합니다. 이러한 작업은 실제 자료 설명에 지정된 암호화 및 서명 알고리즘을 사용합니다. 항목 암호화 도구는 가능한 한 빨리 메모리에서 일반 텍스트 키를 제거합니다.