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 バケットキーを有効または無効にできます。 -
PostObject –
POST
オペレーションを使用してオブジェクトをアップロードし、SSE−KMS を設定するとき、x-amz-server-side-encryption-bucket-key-enabled
フォームフィールドを使用してオブジェクトの S3 バケットキーを有効または無効にできます。 -
CreateMultipartUpload –
CreateMultipartUpload
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 バケットキーを設定できます。
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
--keyobject key name
--server-side-encryption aws:kms --bucket-key-enabled --bodyfilepath