

 AWS SDK for Java 1.x は 2025 年 12 月 31 日にend-of-supportしました。新しい機能、可用性の向上、セキュリティ更新のために、[AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html) に移行することをお勧めします。

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

# Amazon S3 クライアント側の暗号化を使用する
<a name="examples-crypto"></a>

Amazon S3 暗号化クライアントを使用したデータの暗号化は、Amazon S3 に保存された機密情報に保護レイヤーを追加するための 1 つの方法です。このセクションの例では、アプリケーションの Amazon S3 暗号化クライアントを作成および設定する方法を示しています。

暗号化を初めて使用する場合は、AWS KMS デベロッパーガイドの[暗号化の基礎](https://docs.aws.amazon.com/kms/latest/developerguide/crypto-intro.html)で暗号化の用語やアルゴリズムの基本的な概要を参照してください。AWS SDK 全体の暗号化のサポートの詳細については、「Amazon Web Services 全般のリファレンス」の「[AWS SDK Support for Amazon S3 Client-Side Encryption](https://docs.aws.amazon.com/general/latest/gr/aws_sdk_cryptography.html)」を参照してください。

**注記**  
これらのコード例では、ユーザーが [AWS SDK for Java の使用](basics.md)の内容を理解し、[開発用の AWS 認証情報とリージョンのセットアップ](setup-credentials.md)の情報を使用してデフォルトの AWS 認証情報を設定していることを前提としています。

AWS SDK for Java のバージョン 1.11.836 以前を使用している場合は、アプリケーションをそれ以降のバージョンに移行する方法について、「[Amazon S3 Encryption Client Migration](s3-encryption-migration.md)」を参照してください。移行できない場合は、GitHub で[この完全な例](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/java/example_code/s3/src/main/java/aws/example/s3/S3Encrypt.java)を参照してください。

それ以外の場合であって、AWS SDK for Java のバージョン 1.11.837 以降を使用しているときは、以下にリストされているトピックの例を調べて、Amazon S3 クライアント側の暗号化を使用してください。

**Topics**
+ [Amazon S3クライアントマスターキーを使用した クライアント側の暗号化](examples-crypto-masterkey.md)
+ [AWS KMS マネージドキーを使用した Amazon S3 クライアント側の暗号化](examples-crypto-kms.md)

# Amazon S3クライアントマスターキーを使用した クライアント側の暗号化
<a name="examples-crypto-masterkey"></a>

次の例では、[AmazonS3EncryptionClientV2Builder](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/AmazonS3EncryptionClientV2Builder.html) クラスを使用して、クライアント側の暗号化が有効になった Amazon S3 クライアントを作成します。有効にすると、このクライアントを使用して Amazon S3 にアップロードするすべてのオブジェクトが暗号化されます。このクライアントを使用して Amazon S3 から取得したオブジェクトは、自動的に復号化されます。

**注記**  
次の例では、カスタマー管理のクライアントマスターキーを使用した Amazon S3 クライアント側の暗号化の使用方法を説明します。AWS KMS マネージドの暗号化キーを使用する方法については、「[Amazon S3 client-side encryption with AWS KMS managed keys](examples-crypto-kms.md)」を参照してください。

クライアント側の Amazon S3 暗号化を有効にする際に、厳格な認証済みまたは認証済みの 2 つの暗号化モードから選択できます。以下のセクションで、各タイプを有効にする方法を説明します。各モードで使用されるアルゴリズムについては、[CryptoMode](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/CryptoMode.html) の定義を参照してください。

## 必須のインポート
<a name="required-imports"></a>

これらの例では、次のクラスをインポートします。

 **インポート**。

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.regions.Regions;
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.StaticEncryptionMaterialsProvider;
```

## 厳格な認証済み暗号化
<a name="strict-authenticated-encryption"></a>

厳密に認証された暗号化は、`CryptoMode` が指定されていない場合のデフォルトのモードです。

このモードを明示的に有効にするには、`StrictAuthenticatedEncryption` 値を `withCryptoConfiguration` メソッドに指定します。

**注記**  
クライアント側で認証済み暗号化を使用するには、最新の [Bouncy Castle jar](https://www.bouncycastle.org/download/bouncy-castle-java/) ファイルをアプリケーションのクラスパスに含める必要があります。

 **コード** 

```
AmazonS3EncryptionV2 s3Encryption = AmazonS3EncryptionClientV2Builder.standard()
         .withRegion(Regions.US_WEST_2)
         .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode((CryptoMode.StrictAuthenticatedEncryption)))
         .withEncryptionMaterialsProvider(new StaticEncryptionMaterialsProvider(new EncryptionMaterials(secretKey)))
         .build();

s3Encryption.putObject(bucket_name, ENCRYPTED_KEY2, "This is the 2nd content to encrypt");
```

## 認証済み暗号化モード
<a name="authenticated-encryption-mode"></a>

`AuthenticatedEncryption` モードを使用すると、暗号化中に適用されるキーのラップアルゴリズムが強化されます。このモードで復号化するときは、アルゴリズムによって復号化されたオブジェクトの整合性が検証され、チェックが失敗した場合は例外がスローされます。認証済み暗号化の動作の詳細については、「[Amazon S3 Client-Side Authenticated Encryption](https://aws.amazon.com/blogs/developer/amazon-s3-client-side-authenticated-encryption)」というブログ記事を参照してください。

**注記**  
クライアント側で認証済み暗号化を使用するには、最新の [Bouncy Castle jar](https://www.bouncycastle.org/download/bouncy-castle-java/) ファイルをアプリケーションのクラスパスに含める必要があります。

このモードを有効にするには、`AuthenticatedEncryption` 値を `withCryptoConfiguration` メソッドに指定します。

 **コード** 

```
AmazonS3EncryptionV2 s3EncryptionClientV2 = AmazonS3EncryptionClientV2Builder.standard()
         .withRegion(Regions.DEFAULT_REGION)
         .withClientConfiguration(new ClientConfiguration())
         .withCryptoConfiguration(new CryptoConfigurationV2().withCryptoMode(CryptoMode.AuthenticatedEncryption))
         .withEncryptionMaterialsProvider(new StaticEncryptionMaterialsProvider(new EncryptionMaterials(secretKey)))
         .build();

s3EncryptionClientV2.putObject(bucket_name, ENCRYPTED_KEY1, "This is the 1st content to encrypt");
```

# AWS KMS マネージドキーを使用した Amazon S3 クライアント側の暗号化
<a name="examples-crypto-kms"></a>

次の例では、[AmazonS3EncryptionClientV2Builder](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/AmazonS3EncryptionClientV2Builder.html) クラスを使用して、クライアント側の暗号化が有効になった Amazon S3 クライアントを作成します。この設定を行うと、このクライアントを使用して Amazon S3 にアップロードするすべてのオブジェクトが暗号化されます。このクライアントを使用して Amazon S3 から取得したオブジェクトは、自動的に復号化されます。

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

クライアント側の Amazon S3 暗号化を有効にする際に、厳格な認証済みまたは認証済みの 2 つの暗号化モードから選択できます。以下のセクションで、各タイプを有効にする方法を説明します。各モードで使用されるアルゴリズムについては、[CryptoMode](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/CryptoMode.html) の定義を参照してください。

## 必須のインポート
<a name="required-imports"></a>

これらの例では、次のクラスをインポートします。

 **インポート**。

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

## 厳格な認証済み暗号化
<a name="strict-authenticated-encryption-kms"></a>

厳密に認証された暗号化は、`CryptoMode` が指定されていない場合のデフォルトのモードです。

このモードを明示的に有効にするには、`StrictAuthenticatedEncryption` 値を `withCryptoConfiguration` メソッドに指定します。

**注記**  
クライアント側で認証済み暗号化を使用するには、最新の [Bouncy Castle jar](https://www.bouncycastle.org/download/bouncy-castle-java/) ファイルをアプリケーションのクラスパスに含める必要があります。

 **コード** 

```
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 メソッドを呼び出して、オブジェクトをアップロードします。

 **コード** 

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

## 認証済み暗号化モード
<a name="authenticated-encryption-kms"></a>

`AuthenticatedEncryption` モードを使用すると、暗号化中に適用されるキーのラップアルゴリズムが強化されます。このモードで復号化するときは、アルゴリズムによって復号化されたオブジェクトの整合性が検証され、チェックが失敗した場合は例外がスローされます。認証済み暗号化の動作の詳細については、「[Amazon S3 Client-Side Authenticated Encryption](https://aws.amazon.com/blogs/developer/amazon-s3-client-side-authenticated-encryption)」というブログ記事を参照してください。

**注記**  
クライアント側で認証済み暗号化を使用するには、最新の [Bouncy Castle jar](https://www.bouncycastle.org/download/bouncy-castle-java/) ファイルをアプリケーションのクラスパスに含める必要があります。

このモードを有効にするには、`AuthenticatedEncryption` 値を `withCryptoConfiguration` メソッドに指定します。

 **コード** 

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

## AWS KMS クライアントの設定
<a name="configure-kms"></a>

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