

# Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3) 사용
<a name="UsingServerSideEncryption"></a>

**중요**  
이제 Amazon S3가 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)를 Amazon S3 내 모든 버킷 암호화의 기본 수준으로 적용합니다. 2023년 1월 5일부터 Amazon S3로의 모든 새 객체 업로드는 추가 비용 없이 성능에 영향을 미치지 않고 자동으로 암호화됩니다. S3 버킷 기본 암호화 구성에 및 신규 객체 업로드에 대한 자동 암호화 상태는 CloudTrail 로그, S3 인벤토리, S3 Storage Lens, Amazon S3 콘솔에서 사용할 수 있으며, AWS CLI 및 AWS SDK에서 추가 Amazon S3 API 응답 헤더로도 사용할 수 있습니다. 자세한 내용은 [기본 암호화 관련 FAQ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html)를 참조하십시오.

Amazon S3 버킷에 대한 모든 신규 객체 업로드는 기본적으로 Amazon S3 관리형 키(SSE-S3)를 통한 서버 측 암호화로 암호화됩니다.

서버 측 암호화를 사용하여 저장된 데이터를 보호합니다. Amazon S3는 각 객체를 고유한 키로 암호화합니다. 또한 추가 보안 조치로 주기적으로 바뀌는 키를 사용하여 키 자체를 암호화합니다. Amazon S3 서버 측 암호화는 256비트 고급 암호화 표준 갈루아/카운터 모드(AES-GCM)를 사용하여 업로드된 모든 객체를 암호화합니다.

Amazon S3 관리형 키(SSE-S3)를 통한 서버 측 암호화를 사용하는 경우 추가 요금이 부과되지 않습니다. 그러나 기본 암호화 기능을 구성하도록 요청할 경우 표준 Amazon S3 요청 요금이 발생합니다. 요금에 대한 자세한 내용은 [Amazon S3 요금](https://aws.amazon.com/s3/pricing/)을 참조하십시오.

Amazon S3 관리형 키만 사용하여 데이터 업로드를 암호화하도록 요구하는 경우 다음 버킷 정책을 사용할 수 있습니다. 예를 들어 다음 버킷 정책은 요청에 서버 측 암호화를 요청하는 `x-amz-server-side-encryption` 헤더가 포함되지 않을 경우 객체 업로드 권한을 거부합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "PutObjectPolicy",
  "Statement": [
    {
      "Sid": "DenyObjectsThatAreNotSSES3",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
   ]
}
```

------

**참고**  
서버 측 암호화는 객체 메타데이터가 아닌 객체 데이터만 암호화합니다.

## 서버 측 암호화를 위한 API 지원
<a name="APISupportforServer-SideEncryption"></a>

모든 Amazon S3 버킷에는 기본적으로 암호화가 구성되어 있으며 S3 버킷에 업로드되는 신규 객체는 모두 저장 시 자동으로 암호화됩니다. Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화가 Amazon S3 내 모든 버킷의 기본 암호화 구성입니다. 다른 유형의 암호화를 사용하려면 S3 `PUT` 요청에 사용할 서버 측 암호화 유형을 지정하거나 대상 버킷에 기본 암호화 구성을 업데이트할 수 있습니다.

`PUT` 요청에 다른 암호화 유형을 지정하려는 경우 AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS), AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS) 또는 고객 제공 키를 사용한 서버 측 암호화 (SSE-C)를 사용할 수 있습니다. 대상 버킷에 다른 기본 암호화 구성을 설정하려는 경우 SSE-KMS 또는 DSSE-KMS를 사용할 수 있습니다.

범용 버킷의 기본 암호화 구성을 변경하는 방법에 대한 자세한 내용은 [기본 암호화 구성](default-bucket-encryption.md) 섹션을 참조하세요.

버킷의 기본 암호화 구성을 SSE-KMS로 변경해도 버킷에 있는 기존 Amazon S3 객체의 암호화 유형은 변경되지 않습니다. 기본 암호화 구성을 SSE-KMS로 업데이트한 후 기존 객체의 암호화 유형을 변경하려는 경우 Amazon S3 Batch Operations를 사용할 수 있습니다. 객체 목록을 S3 Batch Operations에 제공하면 Batch Operations가 각각의 API 작업을 직접적으로 호출합니다. [객체 복사](batch-ops-copy-object.md) 작업을 사용하면 기존 객체를 복사하여 SSE-KMS로 암호화된 객체와 동일한 버킷에 다시 쓸 수 있습니다. 단일 배치 작업 건으로 수십억 개의 객체에서 지정된 작업을 수행할 수 있습니다. 자세한 내용은 [Batch Operations를 사용하여 대량으로 객체 작업 수행](batch-ops.md) 및 *AWS Storage Blog* 게시물 [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/)를 참조하세요.

객체 생성 REST API를 사용하여 서버 측 암호화를 구성하려면 `x-amz-server-side-encryption` 요청 헤더를 제공해야 합니다. REST API에 대한 정보는 [REST API 사용](specifying-s3-encryption.md#SSEUsingRESTAPI) 섹션을 참조하세요.

다음 Amazon S3 API는 이러한 헤더를 지원합니다.
+ **PUT 작업** - `PUT` API를 사용하여 데이터를 업로드할 때 요청 헤더를 지정합니다. 자세한 내용은 [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) 섹션을 참조하세요.
+ **멀티파트 업로드 시작** – 멀티파트 업로드 API 작업을 사용하여 대용량 객체를 업로드할 때 시작 요청에 헤더를 지정합니다. 자세한 내용은 [멀티파트 업로드 시작](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)을 참조하세요.
+ **COPY 작업** - 객체를 복사할 때 소스 객체 및 대상 객체가 둘 다 있습니다. 자세한 내용은 [PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)를 참조하세요.

**참고**  
`POST` 작업을 사용하여 객체를 업로드할 경우에는 요청 헤더를 제공하는 대신 양식 필드에 동일한 정보를 제공합니다. 자세한 내용은 [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html) 섹션을 참조하세요.

AWS SDK 또한 서버 측 암호화를 요청하는 데 사용할 수 있는 래퍼 API를 제공하며, AWS Management Console을 사용하여 객체를 업로드하고 서버 측 암호화를 요청할 수도 있습니다.

더 일반적인 내용은 **AWS Key Management Service 개발자 안내서의 [AWS KMS 개념](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)을 참조하십시오.

**Topics**
+ [서버 측 암호화를 위한 API 지원](#APISupportforServer-SideEncryption)
+ [Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3) 지정](specifying-s3-encryption.md)