Amazon S3使用AWSKMS 託管密鑰 - AWS SDK for Java 1.x

截至 2024 年 7 月 31 日, AWS SDK for Java 1.x 已進入維護模式,並將end-of-support在 2025 年 12 月 31 日送達。我們建議您遷移至 AWS SDK for Java 2.x,以繼續接收新功能、可用性改進和安全性更新。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon S3使用AWSKMS 託管密鑰

下列範例使用亞馬遜 3 加密客户端 2 構建器類別建立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文件在應用程序的類路徑中。

Code

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));

呼叫putObject方法Amazon S3加密客户端上傳對象。

Code

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

您可以使用相同的用户端檢索對象。此示例調用getObjectAsString方法來檢索存儲的字符串。

Code

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

驗證加密模式

當您使用AuthenticatedEncryption模式下,在加密過程中應用改進的密鑰包裝算法。在此模式下解密時,算法可以驗證解密對象的完整性,並在檢查失敗時拋出異常。如需有關驗證加密工作方式的詳細資訊,請參閲Amazon S3驗證用户端加密博客文章。

注意

若要使用經驗證的加密功能,您必須包含最新的Bouncy Castle文件在應用程序的類路徑中。

要啟用此模式,請指定AuthenticatedEncryption中的值withCryptoConfiguration方法。

Code

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

Code

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客户端初始化加密客户端。

Code

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();