オブジェクトレベルで S3 バケットキーを設定する - Amazon Simple Storage Service

オブジェクトレベルで S3 バケットキーを設定する

REST API、AWS SDK、または AWS CLI を使用して PUT オペレーションまたは COPY オペレーションを実行する際、true または false の値の付いた x-amz-server-side-encryption-bucket-key-enabled リスエストヘッダーを追加して、オブジェクトレベルで S3 バケットキーを有効または無効にできます。S3 バケットキーは、Amazon S3 から AWS KMS へのリクエストトラフィックを減らすことにより、AWS Key Management Service (AWS KMS) (SSE−KMS) を使用したサーバー側の暗号化のコストを削減します。詳細については、Amazon S3 バケットキーを使用した SSE−KMS のコストの削減 を参照してください。

PUT オペレーションまたは COPY オペレーションを使用してオブジェクトの S3 バケットキーを設定すると、Amazon S3 では、そのオブジェクトの設定のみが更新されます。レプリケート先バケットの S3 バケットキーの設定は変更されません。KMS で暗号化されたオブジェクトの PUT または COPY リクエストを S3 バケットキーが有効になっているバケットに送信すると、リクエストヘッダーのキーを無効にしない限り、オブジェクトレベルのオペレーションでは自動的に S3 バケットキーが使用されます。オブジェクトに S3 バケットキーを指定しない場合、Amazon S3 ではレプリケート先バケットの S3 バケットキーの設定がオブジェクトに適用されます。

前提条件:

S3 バケットキーを使用するようにオブジェクトを設定する前に、「S3 バケットキーを有効にする前に注意するべき変更点」を確認してください。

Amazon S3 バッチオペレーション

既存の Amazon S3 オブジェクトを暗号化するには、Amazon S3 バッチオペレーションを使用します。S3 バッチオペレーションは、操作するオブジェクトのリストとともに提供します。バッチオペレーションは各 API を呼び出して、指定されたオペレーションを実行します。

S3 バッチオペレーションのコピーオペレーションを使用して、既存の暗号化されていないオブジェクトをコピーし、同じバケットに新しい暗号化されたオブジェクトを書き込めます。1 つのバッチオペレーションジョブで、数十億ものオブジェクトに対して、指定されたオペレーションを実行できます。詳細については、バッチオペレーションでオブジェクトオペレーションを一括で実行する および Amazon S3 バッチオペレーションによるオブジェクトの暗号化を参照してください。

REST API の使用

SSE−KMS を使用すると、次の API を使用して、オブジェクトの S3 バケットキーを有効にできます。

  • PutObject – オブジェクトをアップロードするときに、x-amz-server-side-encryption-bucket-key-enabled リクエストヘッダーを指定して、オブジェクトレベルで S3 バケットキーを有効または無効にできます。

  • CopyObject – オブジェクトをコピーして SSE−KMS を設定するときに、x-amz-server-side-encryption-bucket-key-enabled リクエストヘッダーを指定して、オブジェクトの S3 バケットキーを有効または無効にできます。

  • PostObjectPOST オペレーションを使用してオブジェクトをアップロードし、SSE−KMS を設定するとき、x-amz-server-side-encryption-bucket-key-enabled フォームフィールドを使用してオブジェクトの S3 バケットキーを有効または無効にできます。

  • CreateMultipartUploadCreateMultipartUpload API オペレーションを使用して大きなオブジェクトをアップロードし、SSE−KMS を設定する場合、x-amz-server-side-encryption-bucket-key-enabled リクエストヘッダーを使用してオブジェクトの S3 バケットキーを有効または無効にできます。

オブジェクトレベルで S3 バケットキーを有効にするには、x-amz-server-side-encryption-bucket-key-enabled リクエストヘッダーを含めます。SSE−KMS および REST API の詳細については、REST API の使用 を参照してください。

AWS SDK Java (PutObject) の使用

次の例を使用して、AWS SDK for Java を使ってオブジェクトレベルで S3 バケットキーを設定できます。

Java
AmazonS3 s3client = AmazonS3ClientBuilder.standard()     .withRegion(Regions.DEFAULT_REGION)     .build(); String bucketName = "amzn-s3-demo-bucket1"; String keyName = "key name for object"; String contents = "file contents"; PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, contents)     .withBucketKeyEnabled(true);      s3client.putObject(putObjectRequest);

AWS CLI (PutObject) の使用

次の AWS CLI の例を使用して、PutObject リクエストの一部としてオブジェクトレベルで S3 バケットキーを設定できます。

aws s3api put-object --bucket amzn-s3-demo-bucket --key object key name --server-side-encryption aws:kms --bucket-key-enabled --body filepath