本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 CSE-KMS 資料表資料轉換為 SSE-KMS
如果您的工作流程目前使用 CSE-KMS 來進行資料表資料加密,則請依照下列步驟轉換至 SSE-KMS。
先決條件
如果您仍然使用 CSE-KMS 工作群組或用戶端設定寫入資料,則請遵循 從 CSE-KMS 移轉至 SSE-KMS 中的步驟,將其更新為 SSE-KMS。這可避免在移轉程序期間從可能寫入資料表的任何其他工作流程中新增新的 CSE-KMS 加密資料。
資料遷移
-
檢查資料表是否已將
has_encrypted_data屬性設定為true。此屬性會指定該資料表可能包含 CSE-KMS 加密資料。不過,請務必注意,即使資料表上沒有任何實際 CSE-KMS 加密資料,也可能存在此屬性。 -
適用於資料表中的每個 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;Code
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;Code
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屬性。 -
更新工作流程以使用基本 S3 用戶端而非 S3 加密用戶端,然後為資料寫入指定 SSE-KMS 加密。