Amazon S3 Bucket Keys로 SSE-KMS 비용 절감하기
Amazon S3 Bucket Keys로 SSE-KMS 비용 절감하기 (Reducing the cost of SSE-KMS with Amazon S3 Bucket Keys)
Amazon S3 Bucket Keys는 AWS Key Management Service(AWS KMS) 키를 사용한 서버 측 암호화(SSE-KMS)의 비용을 절감해요. 버킷 수준 키를 사용하면 AWS KMS 요청 비용을 최대 99%까지 줄일 수 있어요.
출처: 문서
본문
Amazon S3 Bucket Keys는 AWS Key Management Service(AWS KMS) 키를 사용한 Amazon S3 서버 측 암호화(SSE-KMS)의 비용을 절감해요. SSE-KMS에 버킷 수준 키를 사용하면 Amazon S3에서 AWS KMS로 가는 요청 트래픽을 줄여 AWS KMS 요청 비용을 최대 99%까지 절감할 수 있어요. AWS Management Console에서 몇 번의 클릭으로, 클라이언트 애플리케이션을 변경하지 않고도 버킷이 새 객체의 SSE-KMS 암호화에 S3 Bucket Key를 사용하도록 구성할 수 있어요.
참고 S3 Bucket Keys는 AWS Key Management Service(AWS KMS) 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)에서는 지원되지 않아요.
SSE-KMS용 S3 Bucket Keys
SSE-KMS로 암호화된 수백만 또는 수십억 개의 객체에 접근하는 워크로드는 AWS KMS에 대량의 요청을 생성할 수 있어요. S3 Bucket Key 없이 SSE-KMS로 데이터를 보호하면 Amazon S3는 모든 객체에 대해 개별 AWS KMS 데이터 키를 사용해요. 이 경우 Amazon S3는 KMS 암호화 객체에 대한 요청이 이루어질 때마다 AWS KMS를 호출해요. SSE-KMS 작동 방식에 대한 정보는 AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS)를 참고하세요.
버킷을 SSE-KMS에 S3 Bucket Key를 사용하도록 구성하면 AWS가 AWS KMS에서 단기 버킷 수준 키를 생성한 다음 일시적으로 S3에 보관해요. 이 버킷 수준 키는 수명 동안 새 객체의 데이터 키를 만들어요. S3 Bucket Keys는 Amazon S3 내에서 제한된 시간 동안 사용되어 Amazon S3가 암호화 작업을 완료하기 위해 AWS KMS에 요청을 보내는 필요를 줄여요. 이렇게 하면 S3에서 AWS KMS로 가는 트래픽이 줄어들어 이전 비용의 극히 일부로 Amazon S3에서 AWS KMS로 암호화된 객체에 접근할 수 있어요.
요청자의 키 접근이 AWS KMS CloudTrail 이벤트에 기록되도록 고유한 버킷 수준 키는 요청자당 최소 한 번 가져와져요. Amazon S3는 호출자가 다른 역할이나 계정을 사용하거나 다른 범위 지정 정책으로 같은 역할을 사용할 때 다른 요청자로 취급해요. AWS KMS 요청 절감액은 요청자 수, 요청 패턴, 요청된 객체의 상대적 수명을 반영해요. 예를 들어 요청자 수가 적고 제한된 시간 창에서 여러 객체를 요청하며 같은 버킷 수준 키로 암호화된 경우 절감액이 더 커요.
참고 S3 Bucket Keys를 사용하면 버킷 수준 키를 사용해
Encrypt,GenerateDataKey,Decrypt작업에 대한 AWS KMS 요청을 줄여 AWS KMS 요청 비용을 절약할 수 있어요. 설계상 이 버킷 수준 키를 활용하는 후속 요청은 AWS KMS API 요청을 발생시키지 않으며 AWS KMS 키 정책에 대한 접근을 검증하지 않아요.
S3 Bucket Key를 구성하면 이미 버킷에 있는 객체는 S3 Bucket Key를 사용하지 않아요. 기존 객체에 S3 Bucket Key를 구성하려면 CopyObject 작업을 사용할 수 있어요. 자세한 내용은 객체 수준에서 S3 Bucket Key 구성하기를 참고하세요.
Amazon S3는 같은 AWS KMS 키로 암호화된 객체에 대해서만 S3 Bucket Key를 공유해요. S3 Bucket Keys는 AWS KMS가 만든 KMS 키, 가져온 키 자료, 사용자 지정 키 스토어가 지원하는 키 자료와 호환돼요.
S3 Bucket Keys 구성
Amazon S3 콘솔, AWS SDK, AWS CLI 또는 REST API를 통해 버킷이 새 객체의 SSE-KMS에 S3 Bucket Key를 사용하도록 구성할 수 있어요. 버킷에서 S3 Bucket Keys를 활성화하면 다른 지정된 SSE-KMS 키로 업로드된 객체는 자체 S3 Bucket Keys를 사용해요. S3 Bucket Key 설정과 관계없이 요청에 x-amz-server-side-encryption-bucket-key-enabled 헤더를 true 또는 false 값으로 포함해 버킷 설정을 재정의할 수 있어요.
버킷이 S3 Bucket Key를 사용하도록 구성하기 전에 S3 Bucket Key 활성화 전에 확인할 변경 사항을 검토하세요.
Amazon S3 콘솔을 사용한 S3 Bucket Key 구성
새 버킷을 만들 때 새 객체의 SSE-KMS에 S3 Bucket Key를 사용하도록 버킷을 구성할 수 있어요. 버킷 속성을 업데이트해 기존 버킷이 새 객체의 SSE-KMS에 S3 Bucket Key를 사용하도록 구성할 수도 있어요.
자세한 내용은 새 객체에 대한 SSE-KMS와 함께 S3 Bucket Key를 사용하도록 버킷 구성하기를 참고하세요.
S3 Bucket Keys에 대한 REST API, AWS CLI 및 AWS SDK 지원
REST API, AWS CLI 또는 AWS SDK를 사용해 버킷이 새 객체의 SSE-KMS에 S3 Bucket Key를 사용하도록 구성할 수 있어요. 객체 수준에서 S3 Bucket Key를 활성화할 수도 있어요.
자세한 내용은 다음을 참고하세요.
다음 API 작업은 SSE-KMS용 S3 Bucket Keys를 지원해요.
- PutBucketEncryption
ServerSideEncryptionRule은 S3 Bucket Key를 활성화/비활성화하기 위한BucketKeyEnabled매개 변수를 수락해요. - GetBucketEncryption
ServerSideEncryptionRule은BucketKeyEnabled의 설정을 반환해요. - PutObject, CopyObject, CreateMultipartUpload, POST Object
x-amz-server-side-encryption-bucket-key-enabled요청 헤더는 객체 수준에서 S3 Bucket Key를 활성화하거나 비활성화해요. - HeadObject, GetObject, UploadPartCopy, UploadPart, CompleteMultipartUpload
x-amz-server-side-encryption-bucket-key-enabled응답 헤더는 객체에 S3 Bucket Key가 활성화되었는지 여부를 나타내요.
CloudFormation 사용
CloudFormation에서 AWS::S3::Bucket 리소스에는 S3 Bucket Key를 활성화하거나 비활성화하는 데 사용할 수 있는 BucketKeyEnabled라는 암호화 속성이 포함돼요.
자세한 내용은 CloudFormation 사용하기를 참고하세요.
S3 Bucket Key 활성화 전에 확인할 변경 사항
S3 Bucket Key를 활성화하기 전에 다음 관련 변경 사항을 확인하세요.
IAM 또는 AWS KMS 키 정책
기존 AWS Identity and Access Management(IAM) 정책이나 AWS KMS 키 정책이 객체 ARN을 암호화 컨텍스트로 사용해 KMS 키에 대한 접근을 세밀하게 하거나 제한한다면 이러한 정책은 S3 Bucket Key와 함께 작동하지 않아요. S3 Bucket Keys는 버킷 ARN을 암호화 컨텍스트로 사용해요. S3 Bucket Key를 활성화하기 전에 IAM 정책 또는 AWS KMS 키 정책을 업데이트해 버킷 ARN을 암호화 컨텍스트로 사용하세요.
암호화 컨텍스트와 S3 Bucket Keys에 대한 자세한 내용은 암호화 컨텍스트를 참고하세요.
AWS KMS에 대한 CloudTrail 이벤트
S3 Bucket Key를 활성화하면 AWS KMS CloudTrail 이벤트가 객체 ARN 대신 버킷 ARN을 기록해요. 또한 로그에서 SSE-KMS 객체에 대한 KMS CloudTrail 이벤트가 더 적게 나타나요. 키 자료가 Amazon S3에서 시간 제한이 있으므로 AWS KMS에 더 적은 요청이 이루어져요.
복제와 함께 S3 Bucket Key 사용
SSR(같은 리전 복제) 및 CRR(교차 리전 복제)과 함께 S3 Bucket Keys를 사용할 수 있어요.
Amazon S3가 암호화된 객체를 복제할 때 일반적으로 대상 버킷의 복제본 객체에 대한 암호화 설정을 보존해요. 그러나 원본 객체가 암호화되지 않았고 대상 버킷이 기본 암호화 또는 S3 Bucket Key를 사용한다면 Amazon S3는 대상 버킷의 구성으로 객체를 암호화해요.
다음 예제는 S3 Bucket Key가 복제와 함께 작동하는 방식을 보여줘요. 자세한 내용은 암호화된 객체 복제하기(SSE-S3, SSE-KMS, DSSE-KMS, SSE-C)를 참고하세요.
예제 1 – 원본 객체는 S3 Bucket Keys를 사용하고 대상 버킷은 기본 암호화를 사용
원본 객체가 S3 Bucket Key를 사용하지만 대상 버킷이 SSE-KMS와 함께 기본 암호화를 사용한다면 복제본 객체는 대상 버킷에서 S3 Bucket Key 암호화 설정을 유지해요. 대상 버킷은 계속해서 SSE-KMS와 함께 기본 암호화를 사용해요.
예제 2 – 원본 객체는 암호화되지 않고 대상 버킷은 SSE-KMS와 함께 S3 Bucket Key를 사용
원본 객체가 암호화되지 않았고 대상 버킷이 SSE-KMS와 함께 S3 Bucket Key를 사용한다면 복제본 객체는 대상 버킷에서 SSE-KMS와 함께 S3 Bucket Key를 사용해 암호화돼요. 이로 인해 원본 객체의 ETag가 복제본 객체의 ETag와 달라져요. 이 차이를 반영하도록 ETag를 사용하는 애플리케이션을 업데이트해야 해요.
S3 Bucket Keys 사용
S3 Bucket Keys 활성화 및 사용에 대한 자세한 내용은 다음 섹션을 참고하세요.