AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS) 사용 - Amazon Simple Storage Service

AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS) 사용

중요

이제 Amazon S3가 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)를 Amazon S3 내 모든 버킷 암호화의 기본 수준으로 적용합니다. 2023년 1월 5일부터 Amazon S3로의 모든 새 객체 업로드는 추가 비용 없이 성능에 영향을 미치지 않고 자동으로 암호화됩니다. S3 버킷 기본 암호화 구성에 및 신규 객체 업로드에 대한 자동 암호화 상태는 AWS CloudTrail 로그, S3 인벤토리, S3 스토리지 렌즈, Amazon S3 콘솔에서 사용할 수 있으며, AWS Command Line Interface 및 AWS SDK에서 추가 Amazon S3 API 응답 헤더로도 사용할 수 있습니다. 자세한 내용은 기본 암호화 관련 FAQ를 참조하십시오.

서버 측 암호화는 데이터를 받는 애플리케이션 또는 서비스에 의해 해당 대상에서 데이터를 암호화하는 것입니다.

Amazon S3는 새 객체 업로드에 대해 Amazon S3 관리형 키(SSE-S3)를 통한 서버 측 암호화를 자동으로 활성화합니다.

달리 지정하지 않는 한 버킷은 기본적으로 SSE-S3를 사용하여 객체를 암호화합니다. 하지만 AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 통한 서버 측 암호화를 사용하도록 버킷을 구성할 수도 있습니다. 자세한 내용은 AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정 단원을 참조하십시오.

AWS KMS는 클라우드에 맞게 확장된 키 관리 시스템을 제공하기 위해 안전하고 가용성이 높은 하드웨어 및 소프트웨어를 결합하는 서비스입니다. Amazon S3는 AWS KMS를 사용한 서버 측 암호화(SSE-KMS)를 사용하여 S3 객체 데이터를 암호화합니다. 또한, 객체에 SSE-KMS를 요청하면 S3 체크섬(객체 메타데이터의 일부)이 암호화된 형식으로 저장됩니다. 체크섬에 대한 자세한 내용은 객체 무결성 확인 페이지를 참조하십시오.

KMS 키를 사용하는 경우 AWS Management Console 또는 AWS KMS API를 통해 AWS KMS를 사용하여 다음을 수행할 수 있습니다.

  • KMS 키를 중앙에서 생성, 조회, 편집, 모니터링, 활성화/비활성화, 순환, 예약 삭제할 수 있습니다.

  • KMS 키를 사용할 수 있는 방법 및 주체를 제어하는 정책을 정의합니다.

  • KMS 키 사용량을 감사하여 올바르게 사용되고 있는지 입증합니다. 감사는 AWS KMSAWS Management Console이 아닌 AWS KMS API가 지원합니다.

AWS 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:GenerateDataKey 권한이 필요합니다. AWS KMS key을 사용하여 암호화된 객체를 다운로드하려면 kms:Decrypt 권한이 필요합니다. –멀티파트 업로드에 필요한 AWS KMS 권한에 대한 자세한 내용은 멀티파트 업로드 API 및 권한 섹션을 참조하십시오.

AWS KMS keys

AWS KMS를 통한 서버 측 암호화(SSE-KMS)를 사용하는 경우 기본 AWS 관리형 키를 사용하거나 이미 생성한 고객 관리형 키를 지정할 수 있습니다. AWS KMS는 봉투 암호화를 사용합니다. S3는 봉투 암호화에 AWS KMS 기능을 사용하여 데이터를 추가로 보호합니다. 봉투 암호화는 데이터 키로 일반 텍스트 데이터를 암호화한 후 KMS 키로 데이터 키를 암호화하는 방법입니다. 봉투 암호화에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서에서 봉투 암호화를 참조하십시오.

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

참고

AWS 관리형 키로 SSE-KMS를 사용하여 암호화된 객체는 계정 간에 공유할 수 없습니다. 계정 간 SSE-KMS 데이터를 공유해야 하는 경우 AWS KMS의 고객 관리형 키를 사용해야 합니다.

SSE-KMS에 고객 관리형 키를 사용하려는 경우 SSE-KMS를 구성하기 전에 대칭 암호화 고객 관리형 키를 생성합니다. 그런 다음 버킷에 대해 SSE-KMS를 구성할 때 기존 고객 관리형 키를 지정합니다. 대칭 암호화 키에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서대칭 암호화 KMS 키를 참조하십시오.

고객 관리형 키를 생성하면 보다 유연하게 제어할 수 있습니다. 예를 들어, 고객 관리형 키를 생성, 교체 및 사용 중지할 수 있습니다. 또한 액세스 제어를 정의하고 데이터를 보호하는 데 사용하는 고객 관리형 키를 감사할 수 있습니다. 고객 관리형 및 AWS 관리형 키에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서고객 키 및 AWS 키를 참조하십시오.

참고

외부 키 스토어에 저장된 고객 관리형 키로 서버 측 암호화를 사용하면, 표준 KMS 키를 사용할 때와는 달리, 키 구성 요소의 가용성과 내구성을 직접 담보할 책임이 있습니다. 외부 키 스토어와 이들이 공유 책임 모델을 전환하는 방법에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서External key stores(외부 키 스토어)를 참조하십시오.

AWS 관리형 키 또는 고객 관리형 키를 사용하여 데이터를 암호화하도록 선택하면, AWS KMS 및 Amazon S3가 다음 봉투 암호화 작업을 수행합니다.

  1. Amazon S3는 일반 텍스트 데이터 키와 지정된 KMS 키로 암호화된 키의 사본을 요청합니다.

  2. AWS KMS가 데이터 키를 생성하고 KMS 키 하에서 암호화한 후, 일반 텍스트 데이터 키와 암호화된 데이터 키를 모두 Amazon S3로 보냅니다.

  3. Amazon S3는 데이터 키를 사용해 데이터를 암호화하고, 사용 후 가급적 빨리 메모리에서 일반 텍스트 키를 제거합니다.

  4. Amazon S3는 암호화한 데이터 키를 암호화한 데이터와 함께 메타데이터로 저장합니다.

사용자가 데이터 복호화를 요청하면 Amazon S3와 AWS KMS가 다음 작업을 수행합니다.

  1. Amazon S3가 Decrypt 요청 내 AWS KMS로 암호화된 데이터 키를 보냅니다.

  2. AWS KMS가 동일한 KMS 키를 사용하여 암호화된 데이터 키를 복호화하고 일반 텍스트 데이터 키를 Amazon S3에 반환합니다.

  3. Amazon S3가 암호화된 데이터를 일반 텍스트 데이터 키를 사용해 복호화하고, 가급적 신속하게 일반 텍스트 데이터 키를 메모리에서 제거합니다.

중요

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

SSE-KMS를 지정하는 요청을 식별하려면 Amazon S3 스토리지 렌즈 지표 내에서 All SSE-KMS requests(모든 SSE-KMS 요청) 및 % all SSE-KMS requests(모든 SSE-KMS 요청 비율) 지표를 사용하면 됩니다. S3 스토리지 렌즈는 조직 전반에서 객체 스토리지 사용 및 활동에 대한 가시성을 확보하는 데 사용할 수 있는 클라우드 스토리지 분석 기능입니다. 자세한 내용은 S3 스토리지 렌즈를 사용한 스토리지 활동 및 사용량 평가를 참조하십시오. 지표의 전체 목록은 S3 스토리지 렌즈 지표 용어집을 참조하십시오.

Amazon S3 버킷 키

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

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

서버 측 암호화 필요

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

{ "Version":"2012-10-17", "Id":"PutObjectPolicy", "Statement":[{ "Sid":"DenyObjectsThatAreNotSSEKMS", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "Condition":{ "Null":{ "s3:x-amz-server-side-encryption-aws-kms-key-id":"true" } } } ] }

버킷의 객체를 암호화하는 데 특정 AWS KMS key를 사용하도록 하려면 s3:x-amz-server-side-encryption-aws-kms-key-id 조건 키를 사용합니다. arn:aws:kms:region:acct-id:key/key-id 형식의 Amazon 리소스 이름(ARN) 키를 사용해야 합니다. AWS Identity and Access Management은 문자열이 존재하는지 유효성을 검사하지 않습니다.

참고

객체를 업로드할 때 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가 복호화 작업에 대해 동일한 암호화 컨텍스트를 지정해야 합니다. 그렇지 않으면 암호화 해제가 실패합니다. AWS KMS는 암호화 컨텍스트를 추가 인증 데이터(AAD)로 사용하여 인증된 암호화를 지원합니다. 암호화 컨텍스트에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서암호화 컨텍스트를 참조하십시오.

기본적으로 Amazon S3는 객체 또는 버킷의 Amazon 리소스 이름(ARN)을 암호화 컨텍스트 쌍으로 사용합니다.

  • S3 버킷 키를 활성화하지 않고 SSE-KMS를 사용하는 경우 객체 ARN이 암호화 컨텍스트로 사용됩니다.

    arn:aws:s3:::object_ARN
  • S3 버킷 키를 활성화하고 SSE-KMS를 사용하는 경우 버킷 ARN이 암호화 컨텍스트로 사용됩니다. S3 버킷 키에 대한 자세한 내용은 Amazon S3 버킷 키를 사용하여 SSE-KMS 비용 절감 단원을 참조하십시오.

    arn:aws:s3:::bucket_ARN

필요한 경우 s3:PutObject 요청에서 x-amz-server-side-encryption-context 헤더를 사용하여 추가 암호화 컨텍스트 쌍을 제공할 수 있습니다. 그러나 암호화 컨텍스트는 암호화되지 않으므로 민감한 정보를 포함하지 않도록 해야 합니다. Amazon S3는 기본 암호화 컨텍스트와 함께 이 추가 키 페어를 저장합니다. PUT 요청을 처리할 때 Amazon S3는 의 기본 암호화 컨텍스트를 사용자가 제공한 aws:s3:arn 암호화 컨텍스트에 추가합니다.

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

CloudTrail 로그 파일의 requestParameters 필드에서 암호화 컨텍스트는 다음과 비슷하게 표시됩니다.

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/file_name" }

S3 버킷 키 기능과 함께 SSE-KMS를 사용하는 경우 암호화 컨텍스트 값은 버킷의 ARN입니다.

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" }

AWS KMS 암호화된 객체에 대한 요청 전송

  • 중요

    AWS KMS 암호화된 객체에 대한 모든 GETPUT 요청은 Secure Sockets Layer(SSL) 또는 전송 계층 보안(TLS)을 사용하여 이루어져야 합니다. 또한 AWS 서명 버전 4(또는 AWS 서명 버전 2)와 같은 유효한 보안 인증 정보를 사용하여 요청에 서명해야 합니다.

    AWS Signature 버전 4는 HTTP로 전송된 AWS 요청에 인증 정보를 추가하는 프로세스입니다. 보안을 위해 대부분의 AWS 요청은 액세스 키 ID와 보안 액세스 키로 구성된 액세스 키로 서명해야 합니다. 이 두 키는 일반적으로 보안 자격 증명이라고 합니다. 자세한 내용은 요청 인증(AWS 서명 버전 4)서명 버전 4 서명 프로세스를 참조하십시오.

  • 중요

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