メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

AWS SDK for Java を使用したサーバー側の暗号化の指定

AWS SDK for Java を使用してオブジェクトをアップロードするときに、PutObjectRequestObjectMetadata プロパティを使用してリクエストの x-amz-server-side-encryption ヘッダーを設定できます(「REST API を使用したサーバー側の暗号化の指定」を参照)。次の Java コード例に示すように、Amazon S3 クライアントの PutObject メソッドを呼び出すと、Amazon S3 がデータを暗号化して保存します。

Copy
File file = new File(uploadFileName); PutObjectRequest putRequest = new PutObjectRequest( bucketName, keyName, file); // Request server-side encryption. ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION); putRequest.setMetadata(objectMetadata); PutObjectResult response = s3client.putObject(putRequest); System.out.println("Uploaded object encryption status is " + response.getSSEAlgorithm());

レスポンスでは、オブジェクトデータの暗号化に使用した暗号化アルゴリズムが返されます。これは getSSEAlgorithm メソッドで確認できます。

オブジェクトのアップロード方法を示す動作例については、AWS SDK for Java を使用したオブジェクトのアップロード を参照してください。サーバー側の暗号化の場合、リクエストに ObjectMetadata プロパティを追加します。

マルチパートアップロード API を使用して大容量のオブジェクトをアップロードするときに、アップロード中のオブジェクトに対してサーバー側の暗号化を要求できます。

  • 低レベルマルチパートアップロード API を使用して大容量オブジェクトをアップロードする場合(ファイルのアップロード を参照)は、マルチパートアップロードの開始時にサーバー側の暗号化を指定できます。つまり、ObjectMetadata メソッドを呼び出して InitiateMultipartUploadRequest.setObjectMetadata プロパティを追加します。

  • 高レベルマルチパートアップロード API を使用する場合(高レベル Java API を使用したマルチパートアップロード を参照)は、TransferManager クラスのメソッドでオブジェクトをアップロードします。パラメーターとして ObjectMetadata を受け取るどのアップロードメソッドを呼び出してもかまいません。

使用された暗号化アルゴリズムの確認

次の Java コード例に示すように、オブジェクトメタデータを取得して、既存のオブジェクトの暗号化状態を確認できます。

Copy
GetObjectMetadataRequest request2 = new GetObjectMetadataRequest(bucketName, keyName); ObjectMetadata metadata = s3client.getObjectMetadata(request2); System.out.println("Encryption algorithm used: " + metadata.getSSEAlgorithm());

Amazon S3 に保存されたオブジェクトにサーバー側の暗号化が使用されていない場合、メソッドは null を返します。

既存のオブジェクトのサーバー側暗号化の変更(コピーオペレーション)

既存のオブジェクトの暗号化状態を変更するには、オブジェクトのコピーを作成し、コピー元オブジェクトを削除します。デフォルトでは、明示的にサーバー側の暗号化を要求しない限り、コピー API は対象を暗号化しません。対象オブジェクトの暗号化を要求するには、次の Java コード例で示すように、CopyObjectRequestObjectMetadata プロパティを使用してサーバー側の暗号化を指定します。

Copy
CopyObjectRequest copyObjRequest = new CopyObjectRequest( sourceBucket, sourceKey, targetBucket, targetKey); // Request server-side encryption. ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION); copyObjRequest.setNewObjectMetadata(objectMetadata); CopyObjectResult response = s3client.copyObject(copyObjRequest); System.out.println("Copied object encryption status is " + response.getSSEAlgorithm());

オブジェクトのコピー方法を示す作業サンプルについては、「AWS SDK for Java を使用したオブジェクトのコピー」を参照してください。前のコード例に示されているように、CopyObjectRequest オブジェクトでサーバー側の暗号を指定できます。