AWS Key Management Service에 저장된 KMS 키를 사용하는 서버 측 암호화(SSE-KMS)로 데이터 보호 - Amazon Simple Storage Service

AWS Key Management Service에 저장된 KMS 키를 사용하는 서버 측 암호화(SSE-KMS)로 데이터 보호

서버 측 암호화는 데이터를 받는 애플리케이션 또는 서비스에 의해 해당 대상에서 데이터를 암호화하는 것입니다. AWS Key Management Service(AWS KMS)는 클라우드에 맞게 확장된 키 관리 시스템을 제공하기 위해 안전하고 가용성이 높은 하드웨어 및 소프트웨어를 결합하는 서비스입니다. Amazon S3는 AWS KMS keys를 사용하여 Amazon S3 객체를 암호화합니다. AWS KMS는 객체 데이터만 암호화합니다. 객체 메타데이터는 암호화되지 않습니다.

KMS 키를 사용하는 경우 AWS Management Console 또는 AWS KMS API를 통해 AWS KMS를 사용하여 중앙 집중식으로 KMS 키를 생성하고, KMS가 사용되는 방식을 제어하는 정책을 정의하며, KMS 사용을 감사하여 KMS가 올바로 사용되는지 검증합니다. 이러한 KMS 키를 사용하여 Amazon S3 버킷에서 데이터를 보호할 수 있습니다. S3 버킷에 SSE-KMS 암호화를 사용할 때 AWS KMS keys는 버킷과 동일한 리전에 있어야 합니다.

AWS KMS keys 사용에 따르는 추가 요금이 있습니다. 자세한 내용은 AWS Key Management Service 개발자 가이드AWS KMS key 개념AWS KMS 요금을 참조하세요.

중요

AWS KMS key를 사용하여 암호화된 객체를 Amazon S3에 업로드하려면 키에 대한 kms:Decryptkms:GenerateDataKey 권한이 필요합니다. AWS KMS key를 사용하여 암호화된 객체를 다운로드하려면 kms:Decrypt 권한이 필요합니다. AWS KMS 권한 및 멀티파트 업로드에 대한 자세한 내용은 멀티파트 업로드 API 및 권한 섹션을 참조하세요.

AWS KMS keys 및 고객 관리형 키

AWS KMS에서 서버 측 암호화(SSE-KMS)를 사용하는 경우 기본 AWS관리형 키를 사용하거나 이미 생성한 고객 관리형 키를 지정할 수 있습니다.

고객 관리형 키를 지정하지 않으면 Amazon S3에서는 SSE-KMS로 암호화된 객체를 버킷에 처음 추가할 때 AWS 계정에 AWS KMS key를 자동으로 생성합니다. 기본적으로 Amazon S3에서는 SSE-KMS에 이 KMS를 사용합니다.

SSE-KMS에 고객 관리형 키를 사용하려는 경우 SSE-KMS를 구성하기 전에 고객 관리형 키를 생성합니다. 그런 다음 버킷에 대해 SSE-KMS를 구성할 때 기존 고객 관리형 키를 지정합니다.

고객 관리형 키를 생성하면 보다 유연하게 제어할 수 있습니다. 예를 들어, 고객 관리형 키를 생성, 교체 및 비활성화할 수 있습니다. 또한 액세스 제어를 정의하고 데이터를 보호하는 데 사용하는 고객 관리형 키를 감사할 수 있습니다. 고객 관리형 및 AWS 관리형 키에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드AWS KMS 개념을 참조하세요.

중요

Amazon S3에서 서버 측 암호화에 AWS KMS key를 사용하는 경우 대칭 키를 선택해야 합니다. Amazon S3는 대칭 키만 지원하며 비대칭 키는 지원하지 않습니다. 자세한 내용은 AWS Key Management Service 개발자 안내서대칭 및 비대칭 키 사용을 참조하세요.

Amazon S3 버킷 키

AWS KMS(SSE-KMS)를 사용하여 서버 측 암호화를 구성할 때 SSE-KMS용 S3 버킷 키를 사용하도록 버킷을 구성할 수 있습니다. SSE-KMS용 이 버킷 수준 키는 Amazon S3에서 AWS KMS로 가는 요청 트래픽을 줄여 KMS 요청 비용을 최대 99% 줄일 수 있습니다.

새 객체에서 SSE-KMS용 S3 버킷 키를 사용하도록 버킷을 구성하면 AWS KMS는 버킷의 객체에 대해 고유한 데이터 키를 만드는 데 사용되는 버킷 수준 키를 생성합니다. 이 버킷 키는 Amazon S3 내에서 제한된 기간 동안 사용되므로 Amazon S3가 암호화 작업을 완료하기 위해 AWS KMS에 요청할 필요성이 추가적으로 줄어듭니다. S3 버킷 키 사용에 대한 자세한 내용은 Amazon S3 버킷 키를 사용하여 SSE-KMS 비용 절감 단원을 참조하세요.

AWS 서명 버전 4

SSE-KMS로 암호화된 객체를 업로드 또는 액세스하는 경우 강화된 보안을 위해 AWS 서명 버전 4를 사용해야 합니다. AWS SDK를 사용하여 이 작업을 수행하는 방법에 대한 자세한 내용은 요청 인증에서 서명 버전 지정 섹션을 참조하세요.

중요

AWS KMS로 보호되는 객체에 대한 모든 GET 및 PUT 요청은 SSL 또는 TLS를 통해, 또는 SigV4를 사용하여 요청되지 않을 경우 실패합니다.

SSE-KMS 주요 내용

SSE-KMS의 주요 내용은 다음과 같습니다.

  • 사용자가 직접 생성하고 관리하는 고객 관리형 키를 선택하거나 Amazon S3가 사용자의 AWS 계정에서 생성하고 관리하는 AWS 관리형 키를 선택할 수 있습니다. 고객 관리형 키와 같이 사용자의 AWS 관리형 키는 사용자의 AWS 계정 및 리전에 고유합니다. Amazon S3만 사용자 대신 이 KMS 키를 사용할 수 있습니다. Amazon S3는 대칭 KMS 키만 지원합니다.

  • AWS KMS 콘솔에서 감사 가능한 고객 관리형 키를 생성, 교체 및 비활성화할 수 있습니다.

  • 응답의 ETag은(는) 객체 데이터의 MD5가 아닙니다.

  • 데이터를 암호화하는 데 사용되는 데이터 키도 암호화되어 보호 대상인 데이터와 함께 저장됩니다.

  • AWS KMS 내 보안 관리가 암호화 관련 규정 준수 요구 사항을 충족하는 데 도움이 될 수 있습니다.

서버 측 암호화 필요

특정 Amazon S3 버킷의 모든 객체에 대한 서버 측 암호화를 요구하려면 정책을 사용하면 됩니다. 예를 들어, 다음 버킷 정책은 요청에 SSE-KMS를 사용한 서버 측 암호화를 요청하는 s3:PutObject 헤더가 포함되지 않을 경우 모든 사용자에게 객체 업로드(x-amz-server-side-encryption) 권한을 거부합니다.

{ "Version":"2012-10-17", "Id":"PutObjectPolicy", "Statement":[{ "Sid":"DenyUnEncryptedObjectUploads", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::awsexamplebucket1/*", "Condition":{ "StringNotEquals":{ "s3:x-amz-server-side-encryption":"aws:kms" } } } ] }

버킷의 객체를 암호화하는 데 특정 AWS KMS key를 사용하도록 하려면 s3:x-amz-server-side-encryption-aws-kms-key-id 조건 키를 사용합니다. KMS 키를 지정하려면 "arn:aws:kms:region:acct-id:key/key-id" 형식의 키 Amazon 리소스 이름(ARN)을 사용해야 합니다.

참고

객체를 업로드할 때 x-amz-server-side-encryption-aws-kms-key-id 헤더를 사용하여 KMS 키를 지정할 수 있습니다. 요청에 헤더가 없는 경우 Amazon S3는 AWS 관리형 키를 사용합니다. 이와 관계없이 Amazon S3가 객체 암호화에 사용하는 AWS KMS 키 ID는 정책의 AWS KMS 키 ID와 일치해야 합니다. 그렇지 않으면 Amazon S3는 요청을 거부합니다.

Amazon S3 전용 조건 키의 전체 목록과 조건 키 지정에 대한 자세한 내용은 Amazon S3 조건 키 예 단원을 참조하세요.

암호화 컨텍스트

Amazon S3는 x-amz-server-side-encryption-context 헤더가 있는 암호화 컨텍스트를 지원합니다. 암호화 컨텍스트는 데이터에 대한 추가 컨텍스트 정보를 포함할 수 있는 선택적 키-값 페어 집합입니다.

Amazon S3의 암호화 컨텍스트에 대한 자세한 내용은 암호화 컨텍스트 단원을 참조하세요. 암호화 컨텍스트에 대한 일반 내용은 AWS Key Management Service 개발자 안내서AWS Key Management Service 개념 - 암호화 컨텍스트를 참조하세요.

헤더가 Base64로 인코딩된 JSON 형식을 준수한다면 암호화 컨텍스트는 원하는 어떤 값이든 될 수 있습니다. 하지만 암호화 컨텍스트는 암호화되지 않으며 AWS CloudTrail 로깅이 켜진 경우 로깅되기 때문에 암호화 컨텍스트에 중요한 정보가 포함되면 안 됩니다. 또한, AWS KMS에서 생성된 CloudTrail 이벤트를 더 잘 이해할 수 있도록 컨텍스트에서 암호화되거나 복호화된 데이터를 설명하는 것이 좋습니다.

Amazon S3에서 객체 또는 버킷 Amazon 리소스 이름(ARN)은 암호화 컨텍스트로 흔히 사용됩니다. S3 버킷 키를 활성화하지 않고 SSE-KMS를 사용하는 경우 객체 ARN을 암호화 컨텍스트로 사용합니다. 예: arn:aws:s3:::object_ARN. 그러나 SSE-KMS를 사용하고 S3 버킷 키를 활성화하는 경우 암호화 컨텍스트에 버킷 ARN을 사용합니다. 예: arn:aws:s3:::bucket_ARN. S3 버킷 키에 대한 자세한 내용은 Amazon S3 버킷 키를 사용하여 SSE-KMS 비용 절감 단원을 참조하세요.

aws:s3:arn 키가 암호화 컨텍스트에 없는 경우, Amazon S3는 사용자가 제공하는 암호화 컨텍스트에 aws:s3:arn의 사전 정의된 키를 추가할 수 있습니다. Amazon S3는 사용자 요청을 처리할 때 이 사전 정의된 키를 추가합니다. S3 버킷 키 없이 SSE-KMS를 사용하는 경우 값은 객체 ARN과 같습니다. S3 버킷 키가 활성화된 SSE-KMS를 사용하는 경우 값은 버킷 ARN과 동일합니다.

이 사전 정의된 키를 사용하여 CloudTrail에서 관련 요청을 추적할 수 있습니다. 따라서 어떤 Amazon S3 ARN이 어떤 암호화 키와 함께 사용되었는지 항상 확인할 수 있습니다. CloudTrail 로그를 사용하여 다른 Amazon S3 객체 및 버킷 간에 암호화 컨텍스트가 동일하지 않은지를 확인할 수 있으므로, 추가적인 보안 기능이 제공됩니다. 객체 또는 버킷 ARN과 같은 값이 있는지 전체 암호화 컨텍스트가 확인됩니다.