Amazon S3配合客户端加密AWSKMS 托管密钥 - AWS SDK for Java

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon S3配合客户端加密AWSKMS 托管密钥

以下示例使用Amazons3 加密客户端 v2Builder创建类Amazon S3启用客户端加密的客户端。配置后,您使用此客户端上传到 Amazon S3 的任何对象都将加密。您使用此客户端从 Amazon S3 获取的任何对象都将自动解密。

注意

以下示例演示了如何使用Amazon S3配合客户端加密AWSKMS 托管密钥。要了解如何配合使用加密和您自己的密钥,请参阅Amazon S3使用客户端主密钥.

启用客户端时,您可以从两种加密模式中进行选择Amazon S3加密:严格验证或身份验证。以下部分说明了如何启用每种类型。要了解每种模式使用哪种算法,请参阅 CryptoMode 定义。

必需的导入

为这些示例导入以下类。

导入

import com.amazonaws.ClientConfiguration; import com.amazonaws.regions.Regions; import com.amazonaws.services.kms.AWSKMS; import com.amazonaws.services.kms.AWSKMSClientBuilder; import com.amazonaws.services.kms.model.GenerateDataKeyRequest; import com.amazonaws.services.kms.model.GenerateDataKeyResult; import com.amazonaws.services.s3.AmazonS3EncryptionClientV2Builder; import com.amazonaws.services.s3.AmazonS3EncryptionV2; import com.amazonaws.services.s3.model.CryptoConfigurationV2; import com.amazonaws.services.s3.model.CryptoMode; import com.amazonaws.services.s3.model.EncryptionMaterials; import com.amazonaws.services.s3.model.KMSEncryptionMaterialsProvider;

经严格身份验证

如果没有,则严格经身份验证加密是默认CryptoMode已指定。

要明确启用此模式,请指定StrictAuthenticatedEncryption中的值withCryptoConfiguration方法。

注意

要使用客户端经身份验证加密,您必须将最新的 Bouncy Castle jar 文件加入应用程序的类路径中。

代码

AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard() .withRegion(Regions.US_WEST_2) .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.StrictAuthenticatedEncryption))) .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId)) .build(); s3Encryption.putObject(bucket_name, ENCRYPTED_KEY3, "This is the 3rd content to encrypt with a key created in the {console}"); System.out.println(s3Encryption.getObjectAsString(bucket_name, ENCRYPTED_KEY3));

对 Amazon S3 加密客户端调用 putObject 方法以上传对象。

代码

s3Encryption.putObject(bucket_name, ENCRYPTED_KEY3, "This is the 3rd content to encrypt with a key created in the {console}");

您可以使用同一个客户端检索该对象。此示例调用 getObjectAsString 方法以检索存储的字符串。

代码

System.out.println(s3Encryption.getObjectAsString(bucket_name, ENCRYPTED_KEY3));

经认证加密模式

使用 AuthenticatedEncryption 模式时,在加密期间会应用改进的密钥包装算法。在此模式下解密时,该算法会验证已解密对象的完整性,如果检查失败,则引发异常。有关经身份验证加密的更多详细信息,请参阅Amazon S3经客户端经身份验证博客帖子。

注意

要使用客户端经身份验证加密,您必须将最新的 Bouncy Castle jar 文件加入应用程序的类路径中。

要启用此模式,请在 withCryptoConfiguration 方法中指定 AuthenticatedEncryption 值。

代码

AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard() .withRegion(Regions.US_WEST_2) .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.AuthenticatedEncryption))) .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId)) .build();

配置AWS KMS客户

这些区域有:Amazon S3加密客户端创建AWS KMS默认情况下,除非明确指定了一个客户端。

为此自动创建的设置区域AWS KMS客户端,设置awsKmsRegion.

代码

Region kmsRegion = Region.getRegion(Regions.AP_NORTHEAST_1); AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard() .withRegion(Regions.US_WEST_2) .withCryptoConfiguration(new CryptoConfigurationV2().withAwsKmsRegion(kmsRegion)) .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId)) .build();

此外,您也可以使用自己的AWS KMS客户端来初始化加密客户端。

代码

AWSKMS kmsClient = AWSKMSClientBuilder.standard() .withRegion(Regions.US_WEST_2); .build(); AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard() .withRegion(Regions.US_WEST_2) .withKmsClient(kmsClient) .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.AuthenticatedEncryption))) .withEncryptionMaterialsProvider(new KMSEncryptionMaterialsProvider(keyId)) .build();