DynamoDB용 데이터베이스 암호화를 사용하도록 기존 DynamoDB 테이블을 구성합니다 AWS . SDK - AWS 데이터베이스 암호화 SDK

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

DynamoDB용 데이터베이스 암호화를 사용하도록 기존 DynamoDB 테이블을 구성합니다 AWS . SDK

버전 3을 사용합니다. 의 x. NETDynamoDB용 클라이언트 측 암호화 라이브러리, 클라이언트 측 암호화를 위해 기존 Amazon DynamoDB 테이블을 구성할 수 있습니다. 이 주제에서는 채워진 기존 DynamoDB 테이블에 버전 3.x를 추가하기 위해 수행해야 하는 세 가지 단계에 대한 지침을 제공합니다.

1단계: 암호화된 항목 읽기 및 쓰기 준비

AWS 데이터베이스 암호화 SDK 클라이언트가 암호화된 항목을 읽고 쓸 수 있도록 준비하려면 다음 단계를 완료하십시오. 다음 변경사항을 배포한 후에도 클라이언트는 계속해서 일반 텍스트 항목을 읽고 씁니다. 테이블에 기록된 새 항목을 암호화하거나 서명하지는 않지만 암호화된 항목이 나타나는 즉시 복호화할 수 있습니다. 이러한 변경으로 인해 클라이언트는 새 항목의 암호화를 시작할 수 있습니다. 다음 단계로 진행하기 전에 각 리더에 다음 변경 내용을 배포해야 합니다.

1. 속성 작업 정의

개체 모델을 만들어 암호화하고 서명할 속성 값, 서명만 할 속성 값, 무시할 속성 값을 정의합니다.

기본적으로 프라이머리 키 속성은 서명되지만 암호화되지는 않으며(SIGN_ONLY) 다른 모든 속성은 암호화되고 서명됩니다(ENCRYPT_AND_SIGN).

속성을 암호화하고 서명하도록 ENCRYPT_AND_SIGN을 지정합니다. 속성을 서명하되 암호화하지 않도록 SIGN_ONLY을 지정합니다. 서명 및 속성을 지정하고 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 암호화 컨텍스트에 포함하도록 지정합니다. 서명하지 않으면 속성을 암호화할 수 없습니다. 속성을 무시하도록 DO_NOTHING을 지정합니다. 자세한 내용은 SDKDynamoDB용 AWS 데이터베이스 암호화의 속성 작업 단원을 참조하십시오.

참고

SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT속성을 지정하는 경우 파티션 및 정렬 속성도 지정해야 합니다SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT.

var attributeActionsOnEncrypt = new Dictionary<string, CryptoAction> { ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN, ["attribute2"] = CryptoAction.SIGN_ONLY, [":attribute3"] = CryptoAction.DO_NOTHING };
2. 서명에서 제외할 속성을 정의합니다.

다음 예제에서는 모든 DO_NOTHING 속성이 고유한 접두사 ":“를 공유한다고 가정하고 이 접두사를 사용하여 허용된 서명되지 않은 속성을 정의합니다. 클라이언트는 접두사가 ":"인 모든 속성 이름은 서명에서 제외된 것으로 간주합니다. 자세한 내용은 Allowed unsigned attributes 단원을 참조하십시오.

const String unsignAttrPrefix = ":";
3. 키링 생성

다음 예제에서는 AWS KMS 키링을 생성합니다. AWS KMS 키링은 대칭 암호화 또는 RSA AWS KMS keys 비대칭을 사용하여 데이터 키를 생성, 암호화 및 복호화합니다.

이 예제에서는 대칭 암호화 키를 사용하여 CreateMrkMultiKeyring 키링을 생성하는 AWS KMS 데 사용합니다. KMS 이 CreateAwsKmsMrkMultiKeyring 방법을 사용하면 키링이 단일 리전 키와 다중 리전 키를 모두 올바르게 처리할 수 있습니다.

var matProv = new MaterialProviders(new MaterialProvidersConfig()); var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId }; var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
4. DynamoDB 테이블 암호화 구성 정의

다음 예제는 이 DynamoDB 테이블의 암호화 구성을 나타내는 tableConfigs 맵을 정의합니다.

이 예제에서는 DynamoDB 테이블 이름을 논리적 테이블 이름으로 지정합니다. 암호화 구성을 처음 정의할 때 DynamoDB 테이블 이름을 논리적 테이블 이름으로 지정하는 것이 좋습니다.

FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT을 일반 텍스트 오버라이드로 지정해야 합니다. 이 정책은 계속해서 일반 텍스트 항목을 읽고 쓰고, 암호화된 항목을 읽고, 클라이언트가 암호화된 항목을 쓸 수 있도록 준비시킵니다.

테이블 암호화 구성에 포함된 값에 대한 자세한 내용은 을 참조하십시오. SDKDynamoDB용 AWS 데이터베이스 암호화의 암호화 구성

Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs = new Dictionary<String, DynamoDbTableEncryptionConfig>(); DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig { LogicalTableName = ddbTableName, PartitionKeyName = "partition_key", SortKeyName = "sort_key", AttributeActionsOnEncrypt = attributeActionsOnEncrypt, Keyring = kmsKeyring, AllowedUnsignedAttributePrefix = unsignAttrPrefix, PlaintextOverride = FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT }; tableConfigs.Add(ddbTableName, config);
5. 새 AWS SDK DynamoDB 클라이언트 생성

다음 예제에서는 4단계의 명령을 사용하여 새 AWS SDK DynamoDB 클라이언트를 생성합니다TableEncryptionConfigs.

var ddb = new Client.DynamoDbClient( new DynamoDbTablesEncryptionConfig { TableEncryptionConfigs = tableConfigs });

2단계: 암호화되고 서명된 항목 쓰기

클라이언트가 암호화되고 서명된 항목을 작성할 수 있도록 테이블 암호화 구성의 일반 텍스트 정책을 업데이트하십시오. 다음 변경 사항을 배포하면 클라이언트는 1단계에서 구성한 속성 작업을 기반으로 새 항목을 암호화하고 서명합니다. 클라이언트는 일반 텍스트 항목과 암호화되고 서명된 항목을 읽을 수 있습니다.

3단계로 진행하기 전에 테이블의 기존 일반 텍스트 항목을 모두 암호화하고 서명해야 합니다. 기존 일반 텍스트 항목을 빠르게 암호화하기 위해 실행할 수 있는 단일 지표나 쿼리는 없습니다. 시스템에 가장 적합한 프로세스를 사용하세요. 예를 들어, 테이블을 천천히 스캔한 다음 정의한 속성 작업 및 암호화 구성을 사용하여 항목을 다시 쓰는 비동기 프로세스를 사용할 수 있습니다. 테이블의 일반 텍스트 항목을 식별하려면 AWS 데이터베이스 암호화가 항목을 암호화하고 서명할 때 SDK 추가하는 aws_dbe_foot 속성 aws_dbe_head 및 속성을 포함하지 않는 모든 항목을 검사하는 것이 좋습니다.

다음 예제는 1단계의 테이블 암호화 구성을 업데이트합니다. 일반 텍스트 오버라이드를 FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT로 업데이트해야 합니다. 이 정책은 일반 텍스트 항목을 계속 읽지만 암호화된 항목을 읽고 쓸 수도 있습니다. 업데이트를 사용하여 새 AWS SDK DynamoDB 클라이언트를 생성합니다. TableEncryptionConfigs

Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs = new Dictionary<String, DynamoDbTableEncryptionConfig>(); DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig { LogicalTableName = ddbTableName, PartitionKeyName = "partition_key", SortKeyName = "sort_key", AttributeActionsOnEncrypt = attributeActionsOnEncrypt, Keyring = kmsKeyring, AllowedUnsignedAttributePrefix = unsignAttrPrefix, PlaintextOverride = FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT }; tableConfigs.Add(ddbTableName, config);

3단계: 암호화되고 서명된 항목만 읽기

모든 항목을 암호화하고 서명한 후에는 클라이언트가 암호화되고 서명된 항목만 읽고 쓸 수 있도록 테이블 암호화 구성의 일반 텍스트 재정의를 업데이트하십시오. 다음 변경 사항을 배포하면 클라이언트는 1단계에서 구성한 속성 작업을 기반으로 새 항목을 암호화하고 서명합니다. 클라이언트는 암호화되고 서명된 항목만 읽을 수 있습니다.

다음 예제는 2단계의 테이블 암호화 구성을 업데이트합니다. FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT으로 일반 텍스트 재정의를 업데이트하거나 구성에서 일반 텍스트 정책을 제거할 수 있습니다. 클라이언트는 기본적으로 암호화되고 서명된 항목만 읽고 씁니다. 업데이트를 사용하여 새 AWS SDK DynamoDB 클라이언트를 생성합니다. TableEncryptionConfigs

Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs = new Dictionary<String, DynamoDbTableEncryptionConfig>(); DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig { LogicalTableName = ddbTableName, PartitionKeyName = "partition_key", SortKeyName = "sort_key", AttributeActionsOnEncrypt = attributeActionsOnEncrypt, Keyring = kmsKeyring, AllowedUnsignedAttributePrefix = unsignAttrPrefix, // Optional: you can also remove the plaintext policy from your configuration PlaintextOverride = FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT }; tableConfigs.Add(ddbTableName, config);