기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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);