

# 객체 수준에서 S3 버킷 키 구성
<a name="configuring-bucket-key-object"></a>

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 비용 절감](bucket-key.md) 섹션을 참조하세요.

PUT 또는 COPY 작업을 사용하여 객체에 대한 S3 버킷 키를 구성하면 Amazon S3는 해당 객체에 대한 설정만 업데이트합니다. 대상 버킷에 대한 S3 버킷 키 설정은 변경되지 않습니다. KMS로 암호화된 객체에 대한 PUT 또는 COPY 요청을 S3 버킷 키가 활성화된 버킷에 제출하면, 요청 헤더에서 키를 비활성화하지 않은 한 객체 수준 작업에서 자동으로 S3 버킷 키를 사용합니다. 객체에 S3 버킷 키를 지정하지 않으면 Amazon S3가 대상 버킷에 대한 S3 버킷 키 설정을 객체에 적용합니다.

**사전 조건:**  
S3 버킷 키를 사용하도록 객체를 구성하기 전에 [S3 버킷 키를 사용 설정하기 전에 유의할 변경 사항](bucket-key.md#bucket-key-changes)을(를) 검토하십시오.

**Topics**
+ [Amazon S3 배치 작업](#bucket-key-object-bops)
+ [REST API 사용](#bucket-key-object-rest)
+ [Java용 AWS SDK(PutObject) 사용](#bucket-key-object-sdk)
+ [AWS CLI(PutObject) 사용](#bucket-key-object-cli)

## Amazon S3 배치 작업
<a name="bucket-key-object-bops"></a>

기존 Amazon S3 객체를 암호화하기 위해 Amazon S3 배치 작업을 사용할 수 있습니다. 작업할 객체 목록을 S3 배치 작업에 제공하면 배치 작업은 각각의 API를 호출하여 지정된 작업을 수행합니다.

[S3 배치 작업 복사 작업](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html)을 사용하여 암호화되지 않은 기존 객체를 복사하고 암호화된 새로운 객체를 동일한 버킷에 작성할 수 있습니다. 단일 배치 작업 건으로 수십억 개의 객체에서 지정된 작업을 수행할 수 있습니다. 자세한 내용은 [Batch Operations를 사용하여 대량으로 객체 작업 수행](batch-ops.md) 및 [Amazon S3 Batch Operations에서 객체 암호화](https://aws.amazon.com/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/)를 참조하십시오.

## REST API 사용
<a name="bucket-key-object-rest"></a>

SSE-KMS를 사용하면 다음 API 작업을 사용하여 객체에 대해 S3 버킷 키를 활성화할 수 있습니다.
+ [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) – 객체를 업로드하면 `x-amz-server-side-encryption-bucket-key-enabled` 요청 헤더를 지정하여 객체 레벨에서 S3 버킷 키를 사용 설정하거나 사용 중지할 수 있습니다.
+ [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) – 객체를 복사하고 SSE-KMS를 구성하면 `x-amz-server-side-encryption-bucket-key-enabled` 요청 헤더를 지정하여 객체에 대한 S3 버킷 키를 사용 설정하거나 사용 중지할 수 있습니다.
+ [Post Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html) – `POST` 작업을 사용하여 객체를 업로드하고 SSE-KMS를 구성하면 `x-amz-server-side-encryption-bucket-key-enabled` 양식 필드를 사용하여 객체에 대한 S3 버킷 키를 활성화하거나 비활성화할 수 있습니다.
+ [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) – `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 사용](specifying-kms-encryption.md#KMSUsingRESTAPI) 단원을 참조하십시오.

## Java용 AWS SDK(PutObject) 사용
<a name="bucket-key-object-sdk"></a>

다음 예제를 사용하여 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) 사용
<a name="bucket-key-object-cli"></a>

다음 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
```