現在、ワークフローでテーブルデータの暗号化に 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 暗号化を指定します。