현재 워크플로가 테이블 데이터 암호화에 CSE-KMS를 사용하는 경우 다음 단계를 통해 SSE-KMS로 전환합니다.
전제 조건
CSE-KMS 작업 그룹 또는 클라이언트 측 설정을 사용하여 여전히 데이터를 쓰는 경우 CSE-KMS에서 SSE-KMS로 마이그레이션의 단계에 따라 SSE-KMS로 업데이트하세요. 이렇게 하면 마이그레이션 프로세스 중에 테이블에 쓸 수 있는 다른 워크플로에서 새 CSE-KMS 암호화된 데이터가 추가되지 않습니다.
데이터 마이그레이션
-
테이블에
has_encrypted_data
속성이true
로 설정되어 있는지 확인합니다. 이 속성은 테이블에 CSE-KMS 암호화 데이터가 포함될 수 있도록 지정합니다. 그러나 이 속성은 CSE-KMS 암호화 데이터가 실제로는 없는 테이블에도 존재할 수 있다는 점에 유의해야 합니다.-
https://console.aws.amazon.com/athena/
에서 Athena 콘솔을 엽니다. -
쿼리 편집기 시작을 선택합니다.
-
편집기 왼쪽의 데이터베이스에서 쿼리할 데이터베이스를 선택합니다.
-
쿼리 편집기에서 다음 쿼리를 실행하여
has_encrypted_data table
속성으로 설정된 값을 확인합니다.SHOW TBLPROPERTIES
<table_name>
('has_encrypted_data');
-
테이블의 각 CSE-KMS 암호화 객체의 경우.
-
S3 암호화 클라이언트를 사용하여 S3에서 객체를 다운로드하고 복호화합니다. 다음은 AWS Java SDK V2의 예제입니다.
가져오기
import software.amazon.awssdk.core.ResponseInputStream; import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.encryption.s3.S3EncryptionClient; import software.amazon.encryption.s3.materials.Keyring; import software.amazon.encryption.s3.materials.KmsDiscoveryKeyring;
코드
final Keyring kmsDiscoveryKeyRing = KmsDiscoveryKeyring.builder() .enableLegacyWrappingAlgorithms(true) .build(); final S3EncryptionClient s3EncryptionClient = S3EncryptionClient.builder() .enableLegacyUnauthenticatedModes(true) .keyring(kmsDiscoveryKeyRing) .build(); GetObjectRequest getObjectRequest = GetObjectRequest.builder() .bucket("
amzn-s3-demo-bucket
") .key("<my-key>
") .build(); ResponseInputStream<GetObjectResponse> s3Object = s3EncryptionClient.getObject(getObjectRequest); -
동일한 이름과 SSE-KMS 암호화를 사용하여 객체를 S3에 업로드합니다. 다음은 AWS Java SDK V2의 예제입니다.
가져오기
import software.amazon.awssdk.core.ResponseInputStream; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.PutObjectRequest; import software.amazon.awssdk.services.s3.model.ServerSideEncryption;
코드
final S3Client s3Client = S3Client.builder() .build(); PutObjectRequest putObjectRequest = PutObjectRequest.builder() .bucket("
amzn-s3-demo-bucket
") .key("<my-key>
") .serverSideEncryption(ServerSideEncryption.AWS_KMS) .ssekmsKeyId("<my-kms-key>
") .build(); s3Client.putObject(putObjectRequest, RequestBody.fromBytes(s3Object.readAllBytes()));
-
마이그레이션 후
테이블의 모든 CSE-KMS 파일에 대한 재암호화를 만료한 후 다음 단계를 수행합니다.
-
테이블에서
has_encrypted_data
속성을 제거합니다.-
https://console.aws.amazon.com/athena/
에서 Athena 콘솔을 엽니다. -
쿼리 편집기 시작을 선택합니다.
-
편집기 왼쪽의 데이터베이스에서 쿼리할 데이터베이스를 선택합니다.
-
쿼리 편집기에서 테이블에 대해 다음 쿼리를 실행합니다.
ALTER TABLE
<database-name>
.<table-name>
UNSET TBLPROPERTIES ('has_encrypted_data')
-
S3 암호화 클라이언트 대신 기본 S3 클라이언트를 사용하도록 워크플로를 업데이트한 다음 데이터 쓰기에 SSE-KMS 암호화를 지정합니다.