将 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 下载该对象并将其解密。以下是一个使用 Amazon 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。以下是一个使用 Amazon 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
属性。 -
更新工作流以使用基本 S3 客户端而不是 S3 加密客户端,然后为数据写入指定 SSE-KMS 加密。