AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS) 지정하기

AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS) 지정하기 (Specifying dual-layer server-side encryption with AWS KMS keys (DSSE-KMS))

Amazon S3 콘솔, Amazon S3 REST API, AWS Command Line Interface(AWS CLI)로 객체의 암호화 유형을 AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)로 설정하거나 변경할 수 있어요.

출처: 문서

본문

새 객체를 업로드하거나 기존 객체를 복사할 때 암호화를 적용할 수 있어요.

Amazon S3 콘솔, Amazon S3 REST API, AWS Command Line Interface(AWS CLI)로 DSSE-KMS를 지정할 수 있어요. 자세한 내용은 다음 주제를 참고하세요.

참고 Amazon S3에서 다중 리전 AWS KMS 키를 사용할 수 있어요. 그러나 Amazon S3는 현재 다중 리전 키를 단일 리전 키처럼 취급하며 키의 다중 리전 기능을 사용하지 않아요. 자세한 내용은 AWS Key Management Service 개발자 안내서의 다중 리전 키 사용을 참고하세요.

참고 다른 계정이 소유한 KMS 키를 사용하려면 해당 키를 사용할 권한이 있어야 해요. KMS 키의 교차 계정 권한에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 다른 계정이 사용할 수 있는 KMS 키 만들기를 참고하세요.

이 섹션에서는 Amazon S3 콘솔을 사용해 객체의 암호화 유형을 AWS Key Management Service(AWS KMS) 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)로 설정하거나 변경하는 방법을 설명해요.

참고

  • 객체가 5GB 미만이면 객체의 암호화를 변경할 수 있어요. 객체가 5GB보다 크면 AWS CLI 또는 AWS SDK를 사용해 객체의 암호화를 변경해야 해요.
  • 객체의 암호화 변경에 필요한 추가 권한 목록은 Amazon S3 API 작업에 필요한 권한을 참고하세요. 이 권한을 부여하는 예시 정책은 Amazon S3 아이덴티티 기반 정책 예시를 참고하세요.
  • 객체의 암호화를 변경하면 새 객체가 생성되어 기존 객체를 대체해요. S3 버전 관리가 활성화되어 있으면 객체의 새 버전이 생성되고 기존 객체는 이전 버전이 돼요. 속성을 변경하는 역할이 새 객체(또는 객체 버전)의 소유자가 돼요.

객체에 암호화를 추가하거나 변경하려면

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 열어요.
  2. 탐색 창에서 **버킷(Buckets)**을 선택한 다음 범용 버킷(General purpose buckets) 탭을 선택해요. 변경할 객체가 들어 있는 Amazon S3 버킷이나 폴더로 이동해요.
  3. 변경할 객체의 확인란을 선택해요.
  4. 작업(Actions) 메뉴에서 나타나는 옵션 목록 중 **서버 측 암호화 편집(Edit server-side encryption)**을 선택해요.
  5. 서버 측 암호화(Server-side encryption) 섹션까지 스크롤해요.
  6. 암호화 설정(Encryption settings) 아래에서 기본 암호화에 버킷 설정 사용(Use bucket settings for default encryption) 또는 **기본 암호화에 버킷 설정 재정의(Override bucket settings for default encryption)**를 선택해요.
  7. **기본 암호화에 버킷 설정 재정의(Override bucket settings for default encryption)**를 선택했다면 다음 암호화 설정을 구성해요. 암호화 유형(Encryption type) 아래에서 **AWS Key Management Service 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)**를 선택해요. AWS KMS key 아래에서 다음 중 하나를 수행해 KMS 키를 선택해요. 사용 가능한 KMS 키 목록에서 선택하려면 **내 AWS KMS 키에서 선택(Choose from your AWS KMS keys)**을 선택한 다음 사용 가능한 키 목록에서 KMS 키를 선택해요. AWS 관리 키(aws/s3)와 고객 관리 키 모두 이 목록에 나타나요. 고객 관리 키에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 고객 키와 AWS 키를 참고하세요. KMS 키 ARN을 입력하려면 **AWS KMS 키 ARN 입력(Enter AWS KMS key ARN)**을 선택한 다음 나타나는 필드에 KMS 키 ARN을 입력해요. AWS KMS 콘솔에서 새 고객 관리 키를 만들려면 **KMS 키 만들기(Create a KMS key)**를 선택해요. AWS KMS 키 생성에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 키 생성을 참고하세요. > 중요 버킷과 같은 AWS 리전에서 사용할 수 있는 KMS 키만 사용할 수 있어요. Amazon S3 콘솔은 버킷과 같은 리전의 처음 100개 KMS 키만 나열해요. 나열되지 않은 KMS 키를 사용하려면 KMS 키 ARN을 입력해야 해요. 다른 계정이 소유한 KMS 키를 사용하려면 먼저 해당 키를 사용할 권한이 있어야 하고 KMS 키 ARN을 입력해야 해요. Amazon S3는 대칭 암호화 KMS 키만 지원하며 비대칭 KMS 키는 지원하지 않아요. 자세한 내용은 AWS Key Management Service 개발자 안내서의 비대칭 KMS 키 식별을 참고하세요.
  8. Bucket Key에서 **비활성화(Disable)**를 선택해요. S3 Bucket Keys는 DSSE-KMS에서 지원되지 않아요.
  9. 추가 복사 설정(Additional copy settings) 아래에서 원본 설정 복사(Copy source settings), 설정 지정 안 함(Don't specify settings), 또는 설정 지정(Settings specified) 중 선택해요. **원본 설정 복사(Copy source settings)**가 기본 옵션이에요. 원본 설정 속성 없이 객체만 복사하려면 **설정 지정 안 함(Don't specify settings)**을 선택해요. 스토리지 클래스, ACL, 객체 태그, 메타데이터, 서버 측 암호화 및 추가 체크섬에 대한 설정을 지정하려면 **설정 지정(Settings specified)**을 선택해요.
  10. **변경 사항 저장(Save changes)**을 선택해요.

참고 이 작업은 지정된 모든 객체에 암호화를 적용해요. 폴더를 암호화할 때는 저장 작업이 끝날 때까지 폴더에 새 객체를 추가하지 마세요.

객체를 만들 때 — 즉 새 객체를 업로드하거나 기존 객체를 복사할 때 — 데이터를 암호화하기 위해 AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS) 사용을 지정할 수 있어요. 이렇게 하려면 요청에 x-amz-server-side-encryption 헤더를 추가해요. 헤더 값을 암호화 알고리즘인 aws:kms:dsse로 설정해요. Amazon S3는 객체가 DSSE-KMS 암호화로 저장되었음을 x-amz-server-side-encryption 응답 헤더를 반환해 확인해요.

값이 aws:kms:dsse인 x-amz-server-side-encryption 헤더를 지정하면 다음 요청 헤더도 사용할 수 있어요.

  • x-amz-server-side-encryption-aws-kms-key-id: SSEKMSKeyId
  • x-amz-server-side-encryption-context: SSEKMSEncryptionContext

관련 주제

DSSE-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 요청 헤더를 수락해요.

  • PutObject – PUT API 작업으로 데이터를 업로드할 때 이러한 요청 헤더를 지정할 수 있어요.
  • CopyObject – 객체를 복사할 때 원본 객체와 대상 객체가 모두 있어요. CopyObject 작업으로 DSSE-KMS 헤더를 전달하면 대상 객체에만 적용돼요. 기존 객체를 복사할 때는 원본 객체가 암호화되었는지와 관계없이 서버 측 암호화를 명시적으로 요청하지 않으면 대상 객체가 암호화되지 않아요.
  • POST Object – POST 작업으로 객체를 업로드할 때 요청 헤더 대신 양식 필드에 같은 정보를 제공해요.
  • CreateMultipartUpload – 멀티파트 업로드로 대용량 객체를 업로드할 때 CreateMultipartUpload 요청에서 이러한 헤더를 지정할 수 있어요.

다음 REST API 작업의 응답 헤더는 서버 측 암호화를 사용해 객체가 저장되면 x-amz-server-side-encryption 헤더를 반환해요.

  • PutObject
  • CopyObject
  • POST Object
  • CreateMultipartUpload
  • UploadPart
  • UploadPartCopy
  • CompleteMultipartUpload
  • GetObject
  • HeadObject

중요

  • AWS KMS로 보호되는 객체에 대한 모든 GET 및 PUT 요청은 SSL(Secure Sockets Layer), TLS(Transport Layer Security) 또는 Signature Version 4를 사용하지 않으면 실패해요.
  • 객체가 DSSE-KMS를 사용하는 경우 GET 요청과 HEAD 요청에 암호화 요청 헤더를 보내지 마세요. 그렇지 않으면 HTTP 400(Bad Request) 오류가 발생해요.

암호화 컨텍스트(x-amz-server-side-encryption-context)

x-amz-server-side-encryption:aws:kms:dsse를 지정하면 Amazon S3 API는 x-amz-server-side-encryption-context 헤더와 함께 암호화 컨텍스트를 지원해요. 암호화 컨텍스트는 데이터에 대한 추가 컨텍스트 정보를 포함하는 키-값 쌍의 집합이에요.

Amazon S3는 객체 ARN을 암호화 컨텍스트 쌍으로 자동 사용해요. 예를 들어 arn:aws:s3:::object_ARN과 같아요.

x-amz-server-side-encryption-context 헤더를 사용해 추가 암호화 컨텍스트 쌍을 선택적으로 제공할 수 있어요. 그러나 암호화 컨텍스트는 암호화되지 않으므로 민감한 정보를 포함하지 않도록 해야 해요. Amazon S3는 이 추가 키 쌍을 기본 암호화 컨텍스트와 함께 저장해요.

Amazon S3의 암호화 컨텍스트에 대한 정보는 암호화 컨텍스트를 참고하세요. 암호화 컨텍스트에 대한 일반 정보는 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를 지정할 수 있어요. x-amz-server-side-encryption:aws:kms:dsse 헤더를 지정하지만 x-amz-server-side-encryption-aws-kms-key-id 헤더를 제공하지 않으면 Amazon S3는 AWS 관리 키(aws/s3)를 사용해 데이터를 보호해요. 고객 관리 키를 사용하려면 고객 관리 키의 x-amz-server-side-encryption-aws-kms-key-id 헤더를 제공해야 해요.

중요 Amazon S3에서 서버 측 암호화에 AWS KMS 키를 사용할 때는 대칭 암호화 KMS 키를 선택해야 해요. Amazon S3는 대칭 암호화 KMS 키만 지원해요. 이러한 키에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 대칭 암호화 KMS 키를 참고하세요.

새 객체를 업로드하거나 기존 객체를 복사할 때 데이터를 암호화하기 위해 DSSE-KMS 사용을 지정할 수 있어요. 이렇게 하려면 요청에 --server-side-encryption aws:kms:dsse 매개 변수를 추가해요. --ssekms-key-id example-key-id 매개 변수를 사용해 만든 고객 관리 AWS KMS 키를 추가해요. --server-side-encryption aws:kms:dsse를 지정하지만 AWS KMS 키 ID를 제공하지 않으면 Amazon S3는 AWS 관리 키(aws/s3)를 사용해요.

aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms:dsse --ssekms-key-id example-key-id --body filepath

객체를 제자리에 다시 복사해 암호화되지 않은 객체를 DSSE-KMS를 사용하도록 암호화할 수 있어요.

aws s3api copy-object --bucket amzn-s3-demo-bucket --key example-object-key --copy-source amzn-s3-demo-bucket/example-object-key --server-side-encryption aws:kms:dsse --ssekms-key-id example-key-id

더 알아보기 (Learn more)