AWS KMS マネージドキーを使用した Amazon S3 クライアント側の暗号化 - AWS SDK for Java 1.x

AWS SDK for Java (v1) の近日発表 end-of-support しました。AWS SDK for Java v2 に移行することをお勧めします。日付、その他の詳細、移行方法については、リンク先の発表内容を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS KMS マネージドキーを使用した Amazon S3 クライアント側の暗号化

次の例では、AmazonS3EncryptionClientV2Builder クラスを使用して、クライアント側の暗号化が有効になった Amazon S3 クライアントを作成します。この設定を行うと、このクライアントを使用して Amazon S3 にアップロードするすべてのオブジェクトが暗号化されます。このクライアントを使用して Amazon S3 から取得したオブジェクトは、自動的に復号化されます。

注記

次の例では、AWS KMS マネージドキーを使用した Amazon S3 クライアント側の暗号化の使用方法を説明します。独自の暗号化キーを使用する方法については、「Amazon S3 client-side encryption with client master keys」を参照してください。

クライアント側の Amazon S3 暗号化を有効にする際に、厳格な認証済みまたは認証済みの 2 つの暗号化モードから選択できます。以下のセクションで、各タイプを有効にする方法を説明します。各モードで使用されるアルゴリズムについては、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 ファイルをアプリケーションのクラスパスに含める必要があります。

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

Amazon S3 暗号化クライアントで putObject メソッドを呼び出して、オブジェクトをアップロードします。

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 Client-Side Authenticated Encryption」というブログ記事を参照してください。

注記

クライアント側で認証済み暗号化を使用するには、最新の Bouncy Castle jar ファイルをアプリケーションのクラスパスに含める必要があります。

このモードを有効にするには、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();