디렉터리 버킷의 새 객체 업로드에 AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정
디렉터리 버킷의 경우 서버 측 암호화로 데이터를 암호화하려면 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를 참조하세요.
모든 Amazon S3 버킷에는 기본적으로 암호화가 구성되어 있으며 S3 버킷에 업로드되는 신규 객체는 모두 저장 시 자동으로 암호화됩니다. Amazon S3 관리형 키(SSE-S3)를 사용한 서버 측 암호화가 Amazon S3 내 모든 버킷의 기본 암호화 구성입니다. 디렉터리 버킷에 다른 암호화 유형을 지정하려는 경우 AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 사용한 서버 측 암호화를 사용할 수 있습니다. SSE-KMS로 디렉터리 버킷의 새 객체를 암호화하려면 KMS 키(특히 고객 관리형 키)를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. AWS 관리형 키(aws/s3
)는 지원되지 않습니다. SSE-KMS 구성은 버킷 수명 기간 동안 디렉터리 버킷당 고객 관리형 키 1개만 지원할 수 있습니다. SSE-KMS에 고객 관리형 키를 지정한 후에는 버킷의 SSE-KMS 구성을 위한 고객 관리형 키를 재정의할 수 없습니다. 그런 다음 SSE-KMS를 사용하여 새 객체의 서버 측 암호화 설정을 지정할 때는 암호화 키가 디렉터리 버킷의 기본 암호화 구성에 지정한 것과 동일한 고객 관리형 키인지 확인해야 합니다. 데이터에 새 고객 관리형 키를 사용하려면 최신 고객 관리형 키가 있는 새 디렉터리 버킷에 기존 객체를 복사하는 것이 좋습니다.
새 객체를 업로드하거나 기존 객체를 복사할 때 암호화를 적용할 수 있습니다. 객체 암호화를 변경하면 새 객체가 생성되어 이전 객체를 대체합니다.
REST API 작업, AWS SDK 및 AWS Command Line Interface(AWS CLI)를 사용하여 SSE-KMS를 지정할 수 있습니다.
참고
-
디렉터리 버킷의 암호화 재지정 동작은 다음과 같습니다.
-
REST API와 함께 CreateSession을 사용하여 CopyObject 및 UploadPartCopy를 제외한 영역 엔드포인트 API 요청을 인증하고 권한을 부여하는 경우, 이전에 버킷의 기본 암호화를 SSE-KMS로 지정한 경우에만 암호화 설정을 SSE-S3 또는 SSE-KMS로 재정의할 수 있습니다.
-
AWS CLI 또는 AWS SDK와 함께 CreateSession을 사용하여 CopyObject 및 UploadPartCopy를 제외한 영역 엔드포인트 API 요청을 인증하고 권한을 부여하는 경우, 암호화 설정을 아예 재정의할 수 없습니다.
-
CopyObject 요청을 할 때 이전에 SSE-KMS를 사용하여 버킷의 기본 암호화를 지정한 경우에만 암호화 설정을 SSE-S3 또는 SSE-KMS로 재정의할 수 있습니다. UploadPartCopy 요청을 할 때는 암호화 설정을 재정의할 수 없습니다.
-
-
Amazon S3에서 다중 리전 AWS KMS keys를 사용할 수 있습니다. 그러나 Amazon S3는 현재 다중 리전 키를 단일 리전 키인 것처럼 취급하며, 키의 다중 리전 기능을 사용하지 않습니다. 자세한 내용은 AWS Key Management Service 개발자 안내서에서 다중 리전 키 사용을 참조하십시오.
다른 계정에서 소유한 KMS 키를 사용하려면 먼저 해당 키에 대한 사용 권한이 있어야 합니다. KMS 키의 크로스 계정 권한에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서에서 다른 계정에서 사용할 수 있는 KMS 키 만들기를 참조하십시오.
참고
CopyObject 및 UploadPartCopy를 제외한 영역 엔드포인트(객체 수준) API 작업의 경우, 지연 시간이 짧도록 CreateSession을 통해 요청을 인증하고 권한을 부여합니다. 버킷의 기본 암호화는 원하는 암호화 구성을 사용하고 CreateSession
요청 또는 PUT
객체 요청에서 버킷 기본 암호화를 재정의하지 않는 것이 좋습니다. 그러면 새 객체가 원하는 암호화 설정으로 자동 암호화됩니다. SSE-KMS로 디렉터리 버킷의 새 객체를 암호화하려면 KMS 키(특히 고객 관리형 키)를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. 그런 다음 영역 엔드포인트 API 작업을 위한 세션이 생성되면 세션 중에 SSE-KMS 및 S3 버킷 키를 사용하여 새 객체가 자동으로 암호화되고 해독됩니다. 디렉터리 버킷의 암호화 재정의 동작에 대한 자세한 내용은 Specifying server-side encryption with AWS KMS for new object uploads를 참조하세요.
REST API를 사용하는 영역 엔드포인트 API 직접 호출(CopyObject 및 UploadPartCopy 제외)에서는 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 및 UploadPartCopy 제외)에서는 CreateSession
요청의 암호화 설정 값을 재정의할 수 없습니다.
CopyObject의 경우 SSE-KMS로 디렉터리 버킷의 새 객체 사본을 암호화하려면 KMS 키(특히 고객 관리형 키)를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. 그런 다음 SSE-KMS를 사용하여 새 객체 사본의 서버 측 암호화 설정을 지정할 때는 암호화 키가 디렉터리 버킷의 기본 암호화 구성에 지정한 것과 동일한 고객 관리형 키인지 확인해야 합니다. UploadPartCopy의 경우 SSE-KMS로 디렉터리 버킷의 새 객체 부분 사본을 암호화하려면 KMS 키(특히 고객 관리형 키)를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. UploadPartCopy 요청 헤더에서 SSE-KMS를 사용하여 새 객체 부분 사본에 대한 서버 측 암호화 설정을 지정할 수 없습니다. 또한, CreateMultipartUpload 요청에서 제공하는 암호화 설정은 대상 버킷의 기본 암호화 구성과 일치해야 합니다.
주제
SSE-KMS를 지원하는 Amazon S3 REST API 작업
디렉터리 버킷의 다음 객체 수준 REST API 작업은 x-amz-server-side-encryption
, x-amz-server-side-encryption-aws-kms-key-id
및 x-amz-server-side-encryption-context
요청 헤더를 수락합니다.
-
CreateSession - 영역 엔드포인트(객체 수준) API 작업(CopyObject 및 UploadPartCopy 제외)을 사용하는 경우 이러한 요청 헤더를 지정할 수 있습니다.
-
PutObject -
PUT
API 작업을 사용하여 데이터를 업로드할 때 이러한 요청 헤더를 지정할 수 있습니다. -
CopyObject - 객체를 복사할 때 소스 객체 및 대상 객체가 모두 있어야 합니다.
CopyObject
작업을 사용하여 SSE-KMS 헤더를 전달할 경우 헤더가 대상 객체에만 적용됩니다. -
CreateMultipartUpload - 멀티파트 업로드 API 작업을 사용하여 대형 객체를 업로드할 때 이러한 헤더를 지정할 수 있습니다.
CreateMultipartUpload
요청에서 이 헤더를 지정합니다.
객체가 서버 측 암호화를 사용하여 저장될 경우 다음 REST API 작업의 응답 헤더는 x-amz-server-side-encryption
헤더를 반환합니다.
중요
-
Transport Layer Security(TLS) 또는 Signature Version 4를 사용하여 요청을 수행하지 않으면 AWS KMS로 보호되는 객체에 대한 모든
GET
및PUT
요청이 실패합니다. -
객체가 SSE-KMS를 사용하는 경우
GET
요청 및HEAD
요청에 대해 암호화 요청 헤더를 전송하면HTTP 400 BadRequest
오류가 발생합니다.
암호화 컨텍스트(x-amz-server-side-encryption-context
)
x-amz-server-side-encryption:aws:kms
를 지정하면 Amazon S3 API는 명시적인 암호화 컨텍스트를 필요에 따라 x-amz-server-side-encryption-context
헤더에 제공할 수 있도록 지원합니다. 디렉터리 버킷의 경우 암호화 컨텍스트는 데이터에 대한 컨텍스트 정보를 포함하는 키-값 페어 집합입니다. 값은 기본 암호화 컨텍스트인 버킷 Amazon 리소스 이름(ARN)과 일치해야 합니다. 추가 암호화 컨텍스트 값은 지원되지 않습니다.
디렉터리 버킷의 암호화 컨텍스트에 대한 자세한 내용은 암호화 컨텍스트 섹션을 참조하세요. 암호화 컨텍스트에 대한 일반 내용은 AWS Key Management Service 개발자 안내서의 AWS Key Management Service 개념 - 암호화 컨텍스트를 참조하십시오.
AWS KMS 키 ID(x-amz-server-side-encryption-aws-kms-key-id
)
x-amz-server-side-encryption-aws-kms-key-id
헤더를 사용하여 데이터를 보호하는 데 사용되는 고객 관리형 키의 ID를 지정할 수 있습니다.
SSE-KMS 구성은 버킷 수명 기간 동안 디렉터리 버킷당 고객 관리형 키 1개만 지원할 수 있습니다. AWS 관리형 키(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 버킷 키(x-amz-server-side-encryption-aws-bucket-key-enabled
)
S3 버킷 키는 디렉터리 버킷의 GET
및 PUT
작업에 대해 항상 활성화되며 비활성화할 수 없습니다. CopyObject, UploadPartCopy, 배치 운영의 Copy 작업 또는 import 작업을 통해 SSE-KMS로 암호화된 객체를 범용 버킷에서 디렉터리 버킷으로, 디렉터리 버킷에서 범용 버킷으로 또는 디렉터리 버킷 간에 복사하는 경우 S3 버킷 키는 지원되지 않습니다. 이 경우 Amazon S3는 KMS 암호화 개체에 대한 사본 요청이 있을 때마다 AWS KMS를 직접적으로 호출합니다. 디렉터리 버킷의 S3 버킷 키에 대한 자세한 내용은 암호화 컨텍스트 섹션을 참조하세요.
참고
CreateSession
의 경우 AWS CLI를 사용하면 세션 토큰이 자동으로 새로 고쳐져 세션이 만료될 때 서비스가 중단되지 않도록 합니다. CreateSession
요청의 암호화 설정 값을 재정의하는 것은 지원되지 않습니다. 또한, 영역 엔드포인트 API 직접 호출(CopyObject 및 UploadPartCopy 제외)에서는 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
를 사용하여, 생성해둔 고객 관리형 AWS KMS 키를 추가합니다. example-key-id
--server-side-encryption
aws:kms
를 지정하는 경우 고객 관리형 키의 AWS KMS 키 ID를 제공해야 합니다. 디렉터리 버킷은 AWS 관리형 키를 사용하지 않습니다. 예시 명령은 AWS CLI 사용 섹션을 참조하세요.
그 후 다음 명령으로 새 객체를 업로드하면 Amazon S3는 기본 암호화를 위한 버킷 설정을 사용하여 기본적으로 객체를 암호화합니다.
aws s3api put-object --bucket
--key
bucket-base-name
--azid
--x-s3example-object-key
--bodyfilepath
영역 엔드포인트 API 작업 명령에 명시적으로 -\-bucket-key-enabled
를 추가할 필요는 없습니다. S3 버킷 키는 디렉터리 버킷의 GET
및 PUT
작업에 대해 항상 활성화되며 비활성화할 수 없습니다. CopyObject, UploadPartCopy, 배치 운영의 Copy 작업 또는 import 작업을 통해 SSE-KMS로 암호화된 객체를 범용 버킷에서 디렉터리 버킷으로, 디렉터리 버킷에서 범용 버킷으로 또는 디렉터리 버킷 간에 복사하는 경우 S3 버킷 키는 지원되지 않습니다. 이 경우 Amazon S3는 KMS 암호화 개체에 대한 사본 요청이 있을 때마다 AWS KMS를 직접적으로 호출합니다.
소스 버킷(예: 범용 버킷)에서 새 버킷(예: 디렉터리 버킷)으로 객체를 복사하고 대상 객체에 SSE-KMS 암호화를 사용할 수 있습니다. 이렇게 하려면 put-bucket-encryption
명령을 사용하여 대상 버킷(예: 디렉터리 버킷)의 기본 암호화 구성을 SSE-KMS(aws:kms
)로 설정합니다. 예시 명령은 AWS CLI 사용 섹션을 참조하세요. 그 후 다음 명령으로 객체를 복사하면 Amazon S3는 기본 암호화를 위한 버킷 설정을 사용하여 기본적으로 객체를 암호화합니다.
aws s3api copy-object --copy-source
/
amzn-s3-demo-bucket
example-object-key
--bucket--key
bucket-base-name
--azid
--x-s3example-object-key
AWS SDK를 사용하는 경우 서버 측 암호화에 AWS KMS keys를 사용하도록 Amazon S3에 요청할 수 있습니다. 다음 예시에서는 Java 및 .NET용 AWS SDK와 함께 SSE-KMS를 사용하는 방법을 보여줍니다. 다른 SDK 사용에 대한 자세한 내용은 AWS 개발자 센터의 샘플 코드 및 라이브러리
참고
CreateSession
의 경우 AWS SDK를 사용하면 세션 토큰이 자동으로 새로 고쳐져 세션이 만료될 때 서비스가 중단되지 않도록 합니다. CreateSession
요청의 암호화 설정 값을 재정의하는 것은 지원되지 않습니다. 또한, 영역 엔드포인트 API 직접 호출(CopyObject 및 UploadPartCopy 제외)에서는 CreateSession
요청의 암호화 설정 값을 재정의할 수 없습니다.
SSE-KMS로 디렉터리 버킷의 새 객체를 암호화하려면 KMS 키(특히 고객 관리형 키)를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. 그런 다음 영역 엔드포인트 API 작업을 위한 세션이 생성되면 세션 중에 SSE-KMS 및 S3 버킷 키를 사용하여 새 객체가 자동으로 암호화되고 해독됩니다.
AWS SDK를 사용하여 디렉터리 버킷의 기본 암호화 구성을 SSE-KMS로 설정하는 방법에 대한 자세한 내용은 AWS SDK 사용 섹션을 참조하세요.
중요
Amazon S3에서 서버 측 암호화에 AWS KMS key을 사용하는 경우 대칭 암호화 KMS 키를 선택해야 합니다. Amazon S3는 대칭 암호화 KMS 키만 지원합니다. 이들 키에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 대칭 암호화 KMS 키를 참조하십시오.
고객 관리형 키 생성에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드의 AWS KMS API 프로그래밍을 참조하십시오.