

# 디렉터리 버킷에서 AWS KMS 키(SSE-KMS)를 사용한 서버 측 암호화 사용
<a name="s3-express-UsingKMSEncryption"></a>

 AWS KMS 내 보안 관리가 암호화 관련 규정 준수 요구 사항을 충족하는 데 도움이 될 수 있습니다. AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 사용한 서버 측 암호화를 사용하도록 디렉터리 버킷을 구성하고, 이러한 KMS 키를 사용하여 Amazon S3 디렉터리 버킷의 데이터를 보호하도록 선택할 수 있습니다. SSE-KMS에 대한 자세한 내용은 [AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS) 사용](UsingKMSEncryption.md) 단원을 참조하십시오.

**권한**  
AWS KMS key로 암호화된 객체를 Amazon S3에 업로드하거나 다운로드하려면 키에 대한 `kms:GenerateDataKey` 권한과 `kms:Decrypt` 권한이 있어야 합니다. 자세한 내용은 **AWS Key Management Service 개발자 안내서의 [키 사용자가 암호화 작업에 KMS를 사용하도록 허용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-users-crypto)을 참조하세요. –멀티파트 업로드에 필요한 AWS KMS 권한에 대한 자세한 내용은 [멀티파트 업로드 API 및 권한](mpuoverview.md#mpuAndPermissions) 섹션을 참조하십시오.

SSE-KMS용 KMS 키에 대한 자세한 내용은 [AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정](specifying-kms-encryption.md) 섹션을 참조하세요.

**Topics**
+ [AWS KMS keys](#s3-express-aws-managed-customer-managed-keys)
+ [교차 계정 작업에 SSE-KMS 사용](#s3-express-bucket-encryption-update-bucket-policy)
+ [Amazon S3 버킷 키](#s3-express-sse-kms-bucket-keys)
+ [SSE-KMS 필요](#s3-express-require-sse-kms)
+ [암호화 컨텍스트](#s3-express-encryption-context)
+ [AWS KMS 암호화된 객체에 대한 요청 전송](#s3-express-aws-signature-version-4-sse-kms)
+ [디렉터리 버킷의 SSE-KMS 암호화 감사](#s3-express-bucket-encryption-sse-auditing)
+ [디렉터리 버킷의 새 객체 업로드에 AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정](s3-express-specifying-kms-encryption.md)

## AWS KMS keys
<a name="s3-express-aws-managed-customer-managed-keys"></a>

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 작업을 요청합니다.

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

디렉터리 버킷에서 암호화를 위한 [AWS KMS 고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)를 지정할 때는 키 ID 또는 키 ARN만 사용하세요. KMS 키의 키 별칭 형식은 지원되지 않습니다.

SSE-KMS용 KMS 키에 대한 자세한 내용은 [AWS KMS keys](UsingKMSEncryption.md#aws-managed-customer-managed-keys) 섹션을 참조하세요.

## 교차 계정 작업에 SSE-KMS 사용
<a name="s3-express-bucket-encryption-update-bucket-policy"></a>

디렉터리 버킷에서 교차 계정 작업에 암호화를 사용하는 경우 다음 사항에 유의하세요.
+ S3 객체에 대한 교차 계정 액세스 권한을 부여하는 경우 다른 계정에서 액세스할 수 있도록 고객 관리형 키 정책을 구성합니다.
+ 고객 관리형 키를 지정하려면 정규화된 KMS 키 ARN을 사용해야 합니다.

## Amazon S3 버킷 키
<a name="s3-express-sse-kms-bucket-keys"></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를 직접적으로 호출합니다.

[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)의 경우 지연 시간이 짧도록 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](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)를 참조하세요.

S3 버킷 키는 Amazon S3 내에서 제한된 기간 동안 사용되므로, Amazon S3가 암호화 작업을 완료하기 위해 AWS KMS에 요청할 필요성이 추가적으로 줄어듭니다. S3 버킷 키 사용에 대한 자세한 내용은 [Amazon S3 버킷 키](UsingKMSEncryption.md#sse-kms-bucket-keys) 및 [Amazon S3 버킷 키를 사용하여 SSE-KMS 비용 절감](bucket-key.md) 섹션을 참조하세요.

## SSE-KMS 필요
<a name="s3-express-require-sse-kms"></a>

특정 디렉터리 버킷의 모든 객체에 대해 SSE-KMS를 요구하려면 버킷 정책을 사용하면 됩니다. 예를 들어, `CreateSession` API 작업을 사용하여 새 객체(`PutObject`, `CopyObject`, `CreateMultipartUpload`)를 업로드할 수 있는 권한을 부여하는 경우, `CreateSession` 요청에 SSE-KMS를 요청하는 `x-amz-server-side-encryption-aws-kms-key-id` 헤더가 포함되지 않는다면 다음 버킷 정책은 모든 사람에 대한 업로드 객체 권한(`s3express:CreateSession`)을 거부합니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id":"UploadObjectPolicy",
   "Statement":[{
         "Sid":"DenyObjectsThatAreNotSSEKMS",
         "Effect":"Deny",
         "Principal":"*",
         "Action":"s3express:CreateSession",
         "Resource":"arn:aws:s3express:us-east-1:111122223333:bucket/amzn-s3-demo-bucket--usw2-az1--x-s3",
         "Condition":{
            "Null":{
               "s3express:x-amz-server-side-encryption-aws-kms-key-id":"true"
            }
         }
      }
   ]
}
```

------

버킷의 객체를 암호화하는 데 특정 AWS KMS key를 사용하도록 하려면 `s3express:x-amz-server-side-encryption-aws-kms-key-id` 조건 키를 사용합니다. KMS 키를 지정하려면 `arn:aws:kms:region:acct-id:key/key-id` 형식의 Amazon 리소스 이름(ARN) 키를 사용해야 합니다. AWS Identity and Access Management는 `s3express:x-amz-server-side-encryption-aws-kms-key-id` 문자열이 존재하는지 검증하지 않습니다. Amazon S3가 객체 암호화에 사용하는 AWS KMS 키 ID는 정책의 AWS KMS 키 ID와 일치해야 합니다. 그렇지 않으면 Amazon S3는 요청을 거부합니다.

새 객체 업로드에 SSE-KMS를 사용하는 방법에 대한 자세한 내용은 [디렉터리 버킷의 새 객체 업로드에 AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정](s3-express-specifying-kms-encryption.md) 섹션을 참조하세요.

디렉터리 버킷에 대한 특정 조건 키의 전체 목록을 보려면 [IAM을 사용한 리전 엔드포인트 API 권한 부여](s3-express-security-iam.md) 섹션을 참조하세요.

## 암호화 컨텍스트
<a name="s3-express-encryption-context"></a>

디렉터리 버킷의 경우 **암호화 컨텍스트는 데이터에 대한 컨텍스트 정보를 포함하는 키-값 페어 집합입니다. 추가 암호화 컨텍스트 값은 지원되지 않습니다. 암호화 컨텍스트에 대한 자세한 정보는 [암호화 컨텍스트](UsingKMSEncryption.md#encryption-context) 섹션을 참조하십시오.



기본적으로 디렉터리 버킷에서 SSE-KMS를 사용하는 경우 Amazon S3는 버킷의 Amazon 리소스 이름(ARN)을 암호화 컨텍스트 페어로 사용합니다.

```
arn:aws:s3express:region:account-id:bucket/bucket-base-name--zone-id--x-s3
```

IAM 정책 또는 AWS KMS 키 정책에서 버킷 ARN을 암호화 컨텍스트로 사용하는지 확인하세요.

필요한 경우 [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html#API_CreateSession_RequestSyntax)과 같은 영역 엔드포인트 API 요청의 `x-amz-server-side-encryption-context` 헤더를 사용하여 명시적 암호화 컨텍스트 페어를 제공할 수 있습니다. 이 헤더의 값은 암호화 컨텍스트를 키-값 페어로 포함하는 UTF-8 인코딩 JSON의 Base64로 인코딩된 문자열입니다. 디렉터리 버킷의 경우 암호화 컨텍스트는 기본 암호화 컨텍스트인 버킷의 Amazon 리소스 이름(ARN)과 일치해야 합니다. 또한, 암호화 컨텍스트는 암호화되지 않으므로 민감한 정보를 포함하지 않도록 해야 합니다.

암호화 컨텍스트를 사용하여 암호화 작업을 식별하고 분류할 수 있습니다. 또한, 기본 암호화 컨텍스트 ARN 값을 사용하면 어떤 디렉터리 버킷 ARN이 어떤 암호화 키와 함께 사용되었는지 확인하여 AWS CloudTrail에서 관련 요청을 추적할 수 있습니다.

CloudTrail 로그 파일 `requestParameters` 필드에서, 디렉터리 버킷에서 SSE-KMS를 사용하는 경우 암호화 컨텍스트 값은 버킷의 ARN입니다.

```
"encryptionContext": {
    "aws:s3express:arn": "arn:aws:s3:::arn:aws:s3express:region:account-id:bucket/bucket-base-name--zone-id--x-s3"
}
```

또한, 디렉터리 버킷에서 SSE-KMS를 사용하는 객체 암호화의 경우 AWS KMS CloudTrail 이벤트가 객체 ARN 대신 버킷 ARN을 로깅합니다.

## AWS KMS 암호화된 객체에 대한 요청 전송
<a name="s3-express-aws-signature-version-4-sse-kms"></a>

디렉터리 버킷은 HTTPS(TLS)를 통해서만 액세스할 수 있습니다. 나아가 디렉터리 버킷은 AWS Signature Version 4(SigV4)를 사용하여 요청에 서명합니다. AWS KMS 암호화 객체의 요청 전송에 대한 자세한 내용은 [AWS KMS 암호화된 객체에 대한 요청 전송](UsingKMSEncryption.md#aws-signature-version-4-sse-kms) 섹션을 참조하세요.

객체가 SSE-KMS를 사용하는 경우 `GET` 요청 및 `HEAD` 요청에 암호화 요청 헤더를 전송하면 안 됩니다. 그러면 HTTP 400 Bad Request 오류가 발생합니다.

## 디렉터리 버킷의 SSE-KMS 암호화 감사
<a name="s3-express-bucket-encryption-sse-auditing"></a>

AWS CloudTrail 로그를 사용하여 SSE-KMS 암호화 데이터의 AWS KMS 키 사용을 감사할 수 있습니다. [https://docs.aws.amazon.com/kms/latest/developerguide/ct-generatedatakey.html](https://docs.aws.amazon.com/kms/latest/developerguide/ct-generatedatakey.html) 및 [https://docs.aws.amazon.com/kms/latest/developerguide/ct-decrypt.html](https://docs.aws.amazon.com/kms/latest/developerguide/ct-decrypt.html)와 같은 [암호화 작업](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations)에 대한 인사이트를 얻을 수 있습니다. CloudTrail은 이벤트 이름, 사용자 이름, 이벤트 소스 등 검색 필터링을 위한 다양한 [속성 값](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_LookupEvents.html)을 지원합니다.

**Topics**
+ [AWS KMS keys](#s3-express-aws-managed-customer-managed-keys)
+ [교차 계정 작업에 SSE-KMS 사용](#s3-express-bucket-encryption-update-bucket-policy)
+ [Amazon S3 버킷 키](#s3-express-sse-kms-bucket-keys)
+ [SSE-KMS 필요](#s3-express-require-sse-kms)
+ [암호화 컨텍스트](#s3-express-encryption-context)
+ [AWS KMS 암호화된 객체에 대한 요청 전송](#s3-express-aws-signature-version-4-sse-kms)
+ [디렉터리 버킷의 SSE-KMS 암호화 감사](#s3-express-bucket-encryption-sse-auditing)
+ [디렉터리 버킷의 새 객체 업로드에 AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정](s3-express-specifying-kms-encryption.md)

# 디렉터리 버킷의 새 객체 업로드에 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)을 참조하십시오.