메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

AWS KMS 관리형 키(SSE-KMS)를 사용하는 서버 측 암호화로 데이터 보호

서버 측 암호화는 저장된 데이터를 보호하기 위한 것입니다. AWS Key Management Service(AWS KMS)는 클라우드에 맞게 확장된 키 관리 시스템을 제공하기 위해 안전하고 가용성이 높은 하드웨어 및 소프트웨어를 결합합니다. AWS KMS는 사용자 지정 마스터 키(CMK)를 사용하여 Amazon S3 객체를 암호화합니다. IAM 콘솔에서 암호화 키 섹션을 통해 또는 AWS KMS API를 통해 AWS KMS를 사용하여 중앙 집중식으로 암호화 키를 생성하고, 키가 사용되는 방식을 제어하는 정책을 정의하고, 키 사용을 감사하여 키가 올바로 사용되는지 검증합니다. 이러한 키를 사용하여 Amazon S3 버킷에서 데이터를 보호할 수 있습니다.

리전에서 SSE-KMS 암호화된 객체를 처음 버킷에 추가할 때 사용자를 위한 기본 CMK가 자동으로 생성됩니다. AWS Key Management Service를 사용하여 별도로 생성한 CMK를 선택하는 경우를 제외하고 이 키가 SSE-KMS 암호화에 사용됩니다. CMK를 직접 생성하면 액세스 제어를 생성, 교체, 비활성화, 정의하고 데이터를 보호하는 데 사용된 암호화 키를 감사하는 등 보다 폭넓은 작업이 가능합니다.

자세한 내용은 AWS Key Management Service란 무엇입니까?(출처: AWS Key Management Service Developer Guide)를 참조하십시오. AWS KMS를 사용할 경우 AWS-KMS 키 사용에 대한 추가 비용이 발생합니다. 자세한 내용은 AWS Key Management Service 요금을 참조하십시오.

참고

SSE-KMS로 암호화된 객체를 업로드 또는 액세스하는 경우 강화된 보안을 위해 AWS 서명 버전 4를 사용해야 합니다. AWS SDK를 사용하여 이 작업을 수행하는 방법에 대한 자세한 내용은 Specifying Signature Version in Request Authentication 단원을 참조하십시오.

SSE-KMS의 주요 기능은 다음과 같습니다.

  • 사용자가 직접 암호화 키를 생성 및 관리할 수도 있고, 리전 수준별 및 서비스별로 고객에 대해 고유하게 생성되는 기본 서비스 키를 사용할 수도 있습니다.

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

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

  • IAM 콘솔에서 감사 가능한 마스터 키를 생성, 교체 및 비활성화할 수 있습니다.

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

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

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

Amazon S3는 s3:x-amz-server-side-encryption-aws-kms-key-id 조건 키도 지원합니다. 이것으로 객체를 암호화할 때 특정 KMS 키를 사용하도록 요구할 수 있습니다. 정책에 지정하는 KMS 키는 "arn:aws:kms:region:acct-id:key/key-id" 형식을 사용해야 합니다.

참고

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

중요

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

SSE-KMS는 객체 데이터만 암호화합니다. 객체 메타데이터는 암호화되지 않습니다.

Amazon S3 관리 콘솔에서 AWS Key Management Service 사용

Amazon S3 관리 콘솔에서 KMS 관리형 암호화 키를 사용하는 방법에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서S3 객체 업로드를 참조하십시오.

Amazon S3에서 AWS Key Management Service를 위한 API 지원

객체 생성 REST API(REST API를 사용하여 Amazon S3에서 AWS Key Management Service 지정 참조)는 aws:kms 값의 SSE-KMS를 요청하는 데 사용할 수 있는 요청 헤더(x-amz-server-side-encryption)를 제공합니다. 또한 객체에 대해 사용된 AWS KMS 마스터 암호화 키의 ID를 지정하는 x-amz-server-side-encryption-aws-kms-key-id도 있습니다. Amazon S3 API는 x-amz-server-side-encryption-context 헤더가 있는 암호화 컨텍스트도 지원합니다.

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

또한 Amazon S3에서는 사용자가 제공한 암호화 컨텍스트에 대해 객체의 ARN과 같은 값이 있는 미리 정의된 aws:s3:arn 키가 추가될 수 있습니다. 이 상황은 사용자가 제공한 암호화 컨텍스트에 aws:s3:arn 키가 아직 없는 경우만 해당됩니다. 이 경우 Amazon S3에서 Put 요청을 처리할 때 이 미리 정의된 키가 추가됩니다. 사용자의 암호화 컨텍스트에 이 aws:s3:arn 키가 이미 있는 경우에는 암호화 컨텍스트에 키가 중복 추가되지 않습니다.

이 미리 정의된 키가 암호화 컨텍스트의 부분으로 포함되면 CloudTrail에서 관련 요청을 추적할 수 있으므로, 어떤 S3 객체의 ARN이 어떤 암호화 키와 함께 사용되는지 항상 확인할 수 있습니다. 또한 이 미리 정의된 키가 암호화 컨텍스트의 부분으로 포함되면 다른 S3 객체에 동일한 암호화 컨텍스트가 사용되지 않도록 보장되므로 객체에 대한 추가 보안이 제공됩니다. 객체의 ARN과 같은 값이 있는지 전체 암호화 컨텍스트가 확인됩니다.

다음 Amazon S3 API는 이러한 요청 헤더를 지원합니다.

  • PUT 작업 - PUT API(PUT Object 참조)를 사용하여 데이터를 업로드할 때 이러한 요청 헤더를 지정할 수 있습니다.

  • 멀티파트 업로드 시작 — 멀티파트 업로드 API를 사용하여 대형 객체를 업로드할 때 이 헤더를 지정할 수 있습니다. 시작 요청에서 이 헤더를 지정합니다(멀티파트 업로드 시작 참조).

  • POST 작업 - POST 작업(POST Object 참조)을 사용하여 객체를 업로드할 경우에는 요청 헤더 대신 양식 필드에 동일한 정보를 제공합니다.

  • COPY 작업 - 객체를 복사(PUT Object - Copy 참조)하려면 원본 객체 및 대상 객체가 있어야 합니다. COPY 작업을 사용하여 SSE-KMS 헤더를 전달할 경우 헤더가 대상 객체에만 적용됩니다.

AWS SDK는 Amazon S3를 사용하여 SSE-KMS를 요청할 수 있도록 래퍼 API도 지원합니다.