

# 디렉터리 버킷의 새 객체 업로드에 AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정
<a name="s3-express-specifying-kms-encryption"></a>

디렉터리 버킷의 경우 서버 측 암호화로 데이터를 암호화하려면 Amazon S3 관리형 키(SSE-S3)(기본값)를 사용하는 서버 측 암호화 또는 AWS Key Management Service(AWS KMS) 키를 사용하는 서버 측 암호화(SSE-KMS)를 사용할 수 있습니다. 버킷의 기본 암호화는 원하는 암호화 구성을 사용하고 `CreateSession` 요청 또는 `PUT` 객체 요청에서 버킷 기본 암호화를 재정의하지 않는 것이 좋습니다. 그러면 새 객체가 원하는 암호화 설정으로 자동 암호화됩니다. 디렉터리 버킷의 암호화 재정의 동작에 대한 자세한 내용은 [Specifying server-side encryption with AWS KMS for new object uploads](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html)를 참조하세요.

모든 Amazon S3 버킷에는 기본적으로 암호화가 구성되어 있으며 S3 버킷에 업로드되는 신규 객체는 모두 저장 시 자동으로 암호화됩니다. Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화가 Amazon S3 내 모든 버킷의 기본 암호화 구성입니다. 디렉터리 버킷에 다른 암호화 유형을 지정하려는 경우 AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 사용한 서버 측 암호화를 사용할 수 있습니다. SSE-KMS로 디렉터리 버킷의 새 객체를 암호화하려면 KMS 키(특히 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk))를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. [AWS 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)(`aws/s3`)는 지원되지 않습니다. SSE-KMS 구성은 버킷 수명 기간 동안 디렉터리 버킷당 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) 1개만 지원할 수 있습니다. SSE-KMS에 고객 관리형 키를 지정한 후에는 버킷의 SSE-KMS 구성을 위한 고객 관리형 키를 재정의할 수 없습니다. 그런 다음 SSE-KMS를 사용하여 새 객체의 서버 측 암호화 설정을 지정할 때는 암호화 키가 디렉터리 버킷의 기본 암호화 구성에 지정한 것과 동일한 고객 관리형 키인지 확인해야 합니다. 데이터에 새 고객 관리형 키를 사용하려면 최신 고객 관리형 키가 있는 새 디렉터리 버킷에 기존 객체를 복사하는 것이 좋습니다.

새 객체를 업로드하거나 기존 객체를 복사할 때 암호화를 적용할 수 있습니다. 객체 암호화를 변경하면 새 객체가 생성되어 이전 객체를 대체합니다.

REST API 작업, AWS SDK 및 AWS Command Line Interface(AWS CLI)를 사용하여 SSE-KMS를 지정할 수 있습니다.

**참고**  
 디렉터리 버킷의 암호화 재지정 동작은 다음과 같습니다.  
REST API와 함께 [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html)을 사용하여 [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 및 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)를 제외한 영역 엔드포인트 API 요청을 인증하고 권한을 부여하는 경우, 이전에 버킷의 기본 암호화를 SSE-KMS로 지정한 경우에만 암호화 설정을 SSE-S3 또는 SSE-KMS로 재정의할 수 있습니다.
AWS CLI 또는 AWS SDK와 함께 [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html)을 사용하여 [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 및 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)를 제외한 영역 엔드포인트 API 요청을 인증하고 권한을 부여하는 경우, 암호화 설정을 아예 재정의할 수 없습니다.
[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 요청을 할 때 이전에 SSE-KMS를 사용하여 버킷의 기본 암호화를 지정한 경우에만 암호화 설정을 SSE-S3 또는 SSE-KMS로 재정의할 수 있습니다. [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 요청을 할 때는 암호화 설정을 재정의할 수 없습니다.
Amazon S3에서 다중 리전 AWS KMS keys를 사용할 수 있습니다. 그러나 Amazon S3는 현재 다중 리전 키를 단일 리전 키인 것처럼 취급하며, 키의 다중 리전 기능을 사용하지 않습니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [다중 리전 키 사용](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)을 참조하십시오.
다른 계정에서 소유한 KMS 키를 사용하려면 먼저 해당 키에 대한 사용 권한이 있어야 합니다. KMS 키의 크로스 계정 권한에 대한 자세한 내용은 **AWS Key Management Service 개발자 안내서에서 [다른 계정에서 사용할 수 있는 KMS 키 만들기](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console)를 참조하십시오.

## REST API 사용
<a name="s3-express-KMSUsingRESTAPI"></a>

**참고**  
 버킷의 수명 기간 동안 디렉터리 버킷당 1개의 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)만 지원됩니다. [https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)(`aws/s3`)는 지원되지 않습니다. 고객 관리형 키를 사용하는 버킷의 기본 암호화 구성으로 SSE-KMS를 지정한 후에는 버킷의 SSE-KMS 구성에 대한 고객 관리형 키를 변경할 수 없습니다.

[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 및 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)를 제외한 [영역 엔드포인트(객체 수준) API 작업](s3-express-differences.md#s3-express-differences-api-operations)의 경우, 지연 시간이 짧도록 [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html)을 통해 요청을 인증하고 권한을 부여합니다. 버킷의 기본 암호화는 원하는 암호화 구성을 사용하고 `CreateSession` 요청 또는 `PUT` 객체 요청에서 버킷 기본 암호화를 재정의하지 않는 것이 좋습니다. 그러면 새 객체가 원하는 암호화 설정으로 자동 암호화됩니다. SSE-KMS로 디렉터리 버킷의 새 객체를 암호화하려면 KMS 키(특히 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk))를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. 그런 다음 영역 엔드포인트 API 작업을 위한 세션이 생성되면 세션 중에 SSE-KMS 및 S3 버킷 키를 사용하여 새 객체가 자동으로 암호화되고 해독됩니다. 디렉터리 버킷의 암호화 재정의 동작에 대한 자세한 내용은 [Specifying server-side encryption with AWS KMS for new object uploads](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html)를 참조하세요.

REST API를 사용하는 영역 엔드포인트 API 직접 호출([CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 및 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 제외)에서는 `CreateSession` 요청에서 암호화 설정(`x-amz-server-side-encryption`, `x-amz-server-side-encryption-aws-kms-key-id`, `x-amz-server-side-encryption-context`, `x-amz-server-side-encryption-bucket-key-enabled`)의 값을 재정의할 수 없습니다. 영역 엔드포인트 API 직접 호출에서 이러한 암호화 설정 값을 명시적으로 지정할 필요는 없으며, Amazon S3는 `CreateSession` 요청의 암호화 설정 값을 사용하여 디렉터리 버킷의 새 객체를 보호합니다.

**참고**  
`CreateSession`의 경우 AWS CLI 또는 AWS SDK를 사용하면 세션 토큰이 자동으로 새로 고쳐져 세션이 만료될 때 서비스가 중단되지 않도록 합니다. AWS CLI 또는 AWS SDK는 `CreateSession` 요청에 버킷의 기본 암호화 구성을 사용합니다. `CreateSession` 요청의 암호화 설정 값을 재정의하는 것은 지원되지 않습니다. 또한, 영역 엔드포인트 API 직접 호출([CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 및 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 제외)에서는 `CreateSession` 요청의 암호화 설정 값을 재정의할 수 없습니다.

[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)의 경우 SSE-KMS로 디렉터리 버킷의 새 객체 사본을 암호화하려면 KMS 키(특히 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk))를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. 그런 다음 SSE-KMS를 사용하여 새 객체 사본의 서버 측 암호화 설정을 지정할 때는 암호화 키가 디렉터리 버킷의 기본 암호화 구성에 지정한 것과 동일한 고객 관리형 키인지 확인해야 합니다. [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)의 경우 SSE-KMS로 디렉터리 버킷의 새 객체 부분 사본을 암호화하려면 KMS 키(특히 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk))를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 요청 헤더에서 SSE-KMS를 사용하여 새 객체 부분 사본에 대한 서버 측 암호화 설정을 지정할 수 없습니다. 또한, [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) 요청에서 제공하는 암호화 설정은 대상 버킷의 기본 암호화 구성과 일치해야 합니다.



**Topics**
+ [SSE-KMS를 지원하는 Amazon S3 REST API 작업](#s3-express-sse-request-headers-kms)
+ [암호화 컨텍스트(`x-amz-server-side-encryption-context`)](#s3-express-s3-kms-encryption-context)
+ [AWS KMS 키 ID(`x-amz-server-side-encryption-aws-kms-key-id`)](#s3-express-s3-kms-key-id-api)
+ [S3 버킷 키(`x-amz-server-side-encryption-aws-bucket-key-enabled`)](#s3-express-bucket-key-api)

### SSE-KMS를 지원하는 Amazon S3 REST API 작업
<a name="s3-express-sse-request-headers-kms"></a>

디렉터리 버킷의 다음 객체 수준 REST API 작업은 `x-amz-server-side-encryption`, `x-amz-server-side-encryption-aws-kms-key-id` 및 `x-amz-server-side-encryption-context` 요청 헤더를 수락합니다.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) - 영역 엔드포인트(객체 수준) API 작업(CopyObject 및 UploadPartCopy 제외)을 사용하는 경우 이러한 요청 헤더를 지정할 수 있습니다.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) - `PUT` API 작업을 사용하여 데이터를 업로드할 때 이러한 요청 헤더를 지정할 수 있습니다.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) - 객체를 복사할 때 소스 객체 및 대상 객체가 모두 있어야 합니다. `CopyObject` 작업을 사용하여 SSE-KMS 헤더를 전달할 경우 헤더가 대상 객체에만 적용됩니다.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) - 멀티파트 업로드 API 작업을 사용하여 대형 객체를 업로드할 때 이러한 헤더를 지정할 수 있습니다. `CreateMultipartUpload` 요청에서 이 헤더를 지정합니다.

객체가 서버 측 암호화를 사용하여 저장될 경우 다음 REST API 작업의 응답 헤더는 `x-amz-server-side-encryption` 헤더를 반환합니다.
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)

**중요**  
Transport Layer Security(TLS) 또는 Signature Version 4를 사용하여 요청을 수행하지 않으면 AWS KMS로 보호되는 객체에 대한 모든 `GET` 및 `PUT` 요청이 실패합니다.
객체가 SSE-KMS를 사용하는 경우 `GET` 요청 및 `HEAD` 요청에 대해 암호화 요청 헤더를 전송하면 HTTP 400 BadRequest 오류가 발생합니다.

### 암호화 컨텍스트(`x-amz-server-side-encryption-context`)
<a name="s3-express-s3-kms-encryption-context"></a>

`x-amz-server-side-encryption:aws:kms`를 지정하면 Amazon S3 API는 명시적인 암호화 컨텍스트를 필요에 따라 `x-amz-server-side-encryption-context` 헤더에 제공할 수 있도록 지원합니다. 디렉터리 버킷의 경우 암호화 컨텍스트는 데이터에 대한 컨텍스트 정보를 포함하는 키-값 페어 집합입니다. 값은 기본 암호화 컨텍스트인 버킷 Amazon 리소스 이름(ARN)과 일치해야 합니다. 추가 암호화 컨텍스트 값은 지원되지 않습니다.

디렉터리 버킷의 암호화 컨텍스트에 대한 자세한 내용은 [암호화 컨텍스트](s3-express-UsingKMSEncryption.md#s3-express-encryption-context) 섹션을 참조하세요. 암호화 컨텍스트에 대한 일반 내용은 *AWS Key Management Service 개발자 안내서*의 [AWS Key Management Service 개념 - 암호화 컨텍스트](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)를 참조하십시오.

### AWS KMS 키 ID(`x-amz-server-side-encryption-aws-kms-key-id`)
<a name="s3-express-s3-kms-key-id-api"></a>

`x-amz-server-side-encryption-aws-kms-key-id` 헤더를 사용하여 데이터를 보호하는 데 사용되는 고객 관리형 키의 ID를 지정할 수 있습니다.

SSE-KMS 구성은 버킷 수명 기간 동안 디렉터리 버킷당 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) 1개만 지원할 수 있습니다. [https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)(`aws/s3`)는 지원되지 않습니다. 또한, SSE-KMS에 고객 관리형 키를 지정한 후에는 버킷의 SSE-KMS 구성을 위한 고객 관리형 키를 재정의할 수 없습니다.

다음과 같은 방법으로 버킷의 SSE-KMS 구성에 대해 지정한 고객 관리형 키를 식별할 수 있습니다.
+ 응답에서 `x-amz-server-side-encryption-aws-kms-key-id`의 값을 찾기 위해 `HeadObject` API 작업을 요청합니다.

데이터에 새 고객 관리형 키를 사용하려면 최신 고객 관리형 키가 있는 새 디렉터리 버킷에 기존 객체를 복사하는 것이 좋습니다.

For information about the encryption context in directory buckets, see [AWS KMS keys](s3-express-UsingKMSEncryption.md#s3-express-aws-managed-customer-managed-keys).

### S3 버킷 키(`x-amz-server-side-encryption-aws-bucket-key-enabled`)
<a name="s3-express-bucket-key-api"></a>

S3 버킷 키는 디렉터리 버킷의 `GET` 및 `PUT` 작업에 대해 항상 활성화되며 비활성화할 수 없습니다. [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html), [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html), [배치 운영의 Copy 작업](directory-buckets-objects-Batch-Ops.md) 또는 [import 작업](create-import-job.md)을 통해 SSE-KMS로 암호화된 객체를 범용 버킷에서 디렉터리 버킷으로, 디렉터리 버킷에서 범용 버킷으로 또는 디렉터리 버킷 간에 복사하는 경우 S3 버킷 키는 지원되지 않습니다. 이 경우 Amazon S3는 KMS 암호화 개체에 대한 사본 요청이 있을 때마다 AWS KMS를 직접적으로 호출합니다. 디렉터리 버킷의 S3 버킷 키에 대한 자세한 내용은 [암호화 컨텍스트](s3-express-UsingKMSEncryption.md#s3-express-encryption-context) 섹션을 참조하세요.

## AWS CLI 사용
<a name="s3-express-KMSUsingCLI"></a>

**참고**  
`CreateSession`의 경우 AWS CLI를 사용하면 세션 토큰이 자동으로 새로 고쳐져 세션이 만료될 때 서비스가 중단되지 않도록 합니다. `CreateSession` 요청의 암호화 설정 값을 재정의하는 것은 지원되지 않습니다. 또한, 영역 엔드포인트 API 직접 호출([CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 및 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 제외)에서는 `CreateSession` 요청의 암호화 설정 값을 재정의할 수 없습니다.  
SSE-KMS로 디렉터리 버킷의 새 객체를 암호화하려면 KMS 키(특히 고객 관리형 키)를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. 그런 다음 영역 엔드포인트 API 작업을 위한 세션이 생성되면 세션 중에 SSE-KMS 및 S3 버킷 키를 사용하여 새 객체가 자동으로 암호화되고 해독됩니다.

다음 예시 AWS CLI 명령을 사용하려면 `user input placeholders`를 실제 정보로 대체하세요.

새 객체를 업로드하거나 기존 객체를 복사할 때 AWS KMS 키를 사용하여 서버 측 암호화를 통해 데이터를 암호화하도록 지정할 수 있습니다. 이렇게 하려면 `put-bucket-encryption` 명령을 사용하여 디렉터리 버킷의 기본 암호화 구성을 SSE-KMS(`aws:kms`)로 설정하면 됩니다. 구체적으로 요청에 `--server-side-encryption aws:kms` 헤더를 추가합니다. `--ssekms-key-id example-key-id`를 사용하여, 생성해둔 [고객 관리형 AWS KMS 키](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#customer-cmk)를 추가합니다. `--server-side-encryption aws:kms`를 지정하는 경우 고객 관리형 키의 AWS KMS 키 ID를 제공해야 합니다. 디렉터리 버킷은 AWS 관리형 키를 사용하지 않습니다. 예시 명령은 [AWS CLI 사용](s3-express-bucket-encryption.md#s3-express-default-bucket-encryption-cli) 섹션을 참조하세요.

그 후 다음 명령으로 새 객체를 업로드하면 Amazon S3는 기본 암호화를 위한 버킷 설정을 사용하여 기본적으로 객체를 암호화합니다.

```
aws s3api put-object --bucket bucket-base-name--zone-id--x-s3 --key example-object-key --body filepath
```

영역 엔드포인트 API 작업 명령에 명시적으로 `-\-bucket-key-enabled`를 추가할 필요는 없습니다. S3 버킷 키는 디렉터리 버킷의 `GET` 및 `PUT` 작업에 대해 항상 활성화되며 비활성화할 수 없습니다. [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html), [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html), [배치 운영의 Copy 작업](directory-buckets-objects-Batch-Ops.md) 또는 [import 작업](create-import-job.md)을 통해 SSE-KMS로 암호화된 객체를 범용 버킷에서 디렉터리 버킷으로, 디렉터리 버킷에서 범용 버킷으로 또는 디렉터리 버킷 간에 복사하는 경우 S3 버킷 키는 지원되지 않습니다. 이 경우 Amazon S3는 KMS 암호화 개체에 대한 사본 요청이 있을 때마다 AWS KMS를 직접적으로 호출합니다.

소스 버킷(예: 범용 버킷)에서 새 버킷(예: 디렉터리 버킷)으로 객체를 복사하고 대상 객체에 SSE-KMS 암호화를 사용할 수 있습니다. 이렇게 하려면 `put-bucket-encryption` 명령을 사용하여 대상 버킷(예: 디렉터리 버킷)의 기본 암호화 구성을 SSE-KMS(`aws:kms`)로 설정합니다. 예시 명령은 [AWS CLI 사용](s3-express-bucket-encryption.md#s3-express-default-bucket-encryption-cli) 섹션을 참조하세요. 그 후 다음 명령으로 객체를 복사하면 Amazon S3는 기본 암호화를 위한 버킷 설정을 사용하여 기본적으로 객체를 암호화합니다.

```
aws s3api copy-object --copy-source amzn-s3-demo-bucket/example-object-key --bucket bucket-base-name--zone-id--x-s3 --key example-object-key  
```

## AWS SDK 사용
<a name="s3-express-kms-using-sdks"></a>

AWS SDK를 사용하는 경우 서버 측 암호화에 AWS KMS keys를 사용하도록 Amazon S3에 요청할 수 있습니다. 다음 예시에서는 Java 및 .NET용 AWS SDK와 함께 SSE-KMS를 사용하는 방법을 보여줍니다. 다른 SDK 사용에 대한 자세한 내용은 AWS 개발자 센터의 [샘플 코드 및 라이브러리](https://aws.amazon.com/code)를 참조하세요.

**참고**  
`CreateSession`의 경우 AWS SDK를 사용하면 세션 토큰이 자동으로 새로 고쳐져 세션이 만료될 때 서비스가 중단되지 않도록 합니다. `CreateSession` 요청의 암호화 설정 값을 재정의하는 것은 지원되지 않습니다. 또한, 영역 엔드포인트 API 직접 호출([CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 및 [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) 제외)에서는 `CreateSession` 요청의 암호화 설정 값을 재정의할 수 없습니다.  
SSE-KMS로 디렉터리 버킷의 새 객체를 암호화하려면 KMS 키(특히 고객 관리형 키)를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. 그런 다음 영역 엔드포인트 API 작업을 위한 세션이 생성되면 세션 중에 SSE-KMS 및 S3 버킷 키를 사용하여 새 객체가 자동으로 암호화되고 해독됩니다.  
AWS SDK를 사용하여 디렉터리 버킷의 기본 암호화 구성을 SSE-KMS로 설정하는 방법에 대한 자세한 내용은 [AWS SDK 사용](s3-express-bucket-encryption.md#s3-express-kms-put-bucket-encryption-using-sdks) 섹션을 참조하세요.

**중요**  
Amazon S3에서 서버 측 암호화에 AWS KMS key을 사용하는 경우 대칭 암호화 KMS 키를 선택해야 합니다. Amazon S3는 대칭 암호화 KMS 키만 지원합니다. 이들 키에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [대칭 암호화 KMS 키](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks)를 참조하십시오.

고객 관리형 키 생성에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [AWS KMS API 프로그래밍](https://docs.aws.amazon.com/kms/latest/developerguide/programming-top.html)을 참조하십시오.