디렉터리 버킷에서 AWS KMS 키(SSE-KMS)를 사용한 서버 측 암호화 사용 - Amazon Simple Storage Service

디렉터리 버킷에서 AWS KMS 키(SSE-KMS)를 사용한 서버 측 암호화 사용

AWS KMS 내 보안 관리가 암호화 관련 규정 준수 요구 사항을 충족하는 데 도움이 될 수 있습니다. AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 사용한 서버 측 암호화를 사용하도록 디렉터리 버킷을 구성하고, 이러한 KMS 키를 사용하여 Amazon S3 디렉터리 버킷의 데이터를 보호하도록 선택할 수 있습니다. SSE-KMS에 대한 자세한 내용은 AWS KMS 키를 사용한 서버 측 암호화(SSE-KMS) 사용 단원을 참조하십시오.

권한

AWS KMS key로 암호화된 객체를 Amazon S3에 업로드하거나 다운로드하려면 키에 대한 kms:GenerateDataKey 권한과 kms:Decrypt 권한이 있어야 합니다. 자세한 내용은 AWS Key Management Service 개발자 안내서의 키 사용자가 암호화 작업에 KMS를 사용하도록 허용을 참조하세요. –멀티파트 업로드에 필요한 AWS KMS 권한에 대한 자세한 내용은 멀티파트 업로드 API 및 권한 섹션을 참조하십시오.

SSE-KMS용 KMS 키에 대한 자세한 내용은 AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정 섹션을 참조하세요.

AWS KMS keys

SSE-KMS 구성은 버킷 수명 기간 동안 디렉터리 버킷당 고객 관리형 키 1개만 지원할 수 있습니다. AWS 관리형 키(aws/s3)는 지원되지 않습니다. 또한, SSE-KMS에 고객 관리형 키를 지정한 후에는 버킷의 SSE-KMS 구성을 위한 고객 관리형 키를 재정의할 수 없습니다.

다음과 같은 방법으로 버킷의 SSE-KMS 구성에 대해 지정한 고객 관리형 키를 식별할 수 있습니다.

  • 응답에서 x-amz-server-side-encryption-aws-kms-key-id의 값을 찾기 위해 HeadObject API 작업을 요청합니다.

데이터에 새 고객 관리형 키를 사용하려면 최신 고객 관리형 키가 있는 새 디렉터리 버킷에 기존 객체를 복사하는 것이 좋습니다.

디렉터리 버킷에서 암호화를 위한 AWS KMS 고객 관리형 키를 지정할 때는 키 ID 또는 키 ARN만 사용하세요. KMS 키의 키 별칭 형식은 지원되지 않습니다.

SSE-KMS용 KMS 키에 대한 자세한 내용은 AWS KMS keys 섹션을 참조하세요.

교차 계정 작업에 SSE-KMS 사용

디렉터리 버킷에서 교차 계정 작업에 암호화를 사용하는 경우 다음 사항에 유의하세요.

  • S3 객체에 대한 교차 계정 액세스 권한을 부여하는 경우 다른 계정에서 액세스할 수 있도록 고객 관리형 키 정책을 구성합니다.

  • 고객 관리형 키를 지정하려면 정규화된 KMS 키 ARN을 사용해야 합니다.

Amazon S3 버킷 키

S3 버킷 키는 디렉터리 버킷의 GETPUT 작업에 대해 항상 활성화되며 비활성화할 수 없습니다. CopyObject, UploadPartCopy, 배치 운영의 Copy 작업 또는 import 작업을 통해 SSE-KMS로 암호화된 객체를 범용 버킷에서 디렉터리 버킷으로, 디렉터리 버킷에서 범용 버킷으로 또는 디렉터리 버킷 간에 복사하는 경우 S3 버킷 키는 지원되지 않습니다. 이 경우 Amazon S3는 KMS 암호화 개체에 대한 사본 요청이 있을 때마다 AWS KMS를 직접적으로 호출합니다.

CopyObjectUploadPartCopy를 제외한 영역 엔드포인트(객체 수준) API 작업의 경우 지연 시간이 짧도록 CreateSession을 통해 요청을 인증하고 권한을 부여합니다. 버킷의 기본 암호화는 원하는 암호화 구성을 사용하고 CreateSession 요청 또는 PUT 객체 요청에서 버킷 기본 암호화를 재정의하지 않는 것이 좋습니다. 그러면 새 객체가 원하는 암호화 설정으로 자동 암호화됩니다. SSE-KMS로 디렉터리 버킷의 새 객체를 암호화하려면 KMS 키(특히 고객 관리형 키)를 사용하여 디렉터리 버킷의 기본 암호화 구성으로 SSE-KMS를 지정해야 합니다. 그런 다음 영역 엔드포인트 API 작업을 위한 세션이 생성되면 세션 중에 SSE-KMS 및 S3 버킷 키를 사용하여 새 객체가 자동으로 암호화되고 해독됩니다. 디렉터리 버킷의 암호화 재정의 동작에 대한 자세한 내용은 Specifying server-side encryption with AWS KMS for new object uploads를 참조하세요.

S3 버킷 키는 Amazon S3 내에서 제한된 기간 동안 사용되므로, Amazon S3가 암호화 작업을 완료하기 위해 AWS KMS에 요청할 필요성이 추가적으로 줄어듭니다. S3 버킷 키 사용에 대한 자세한 내용은 Amazon S3 버킷 키Amazon S3 버킷 키를 사용하여 SSE-KMS 비용 절감 섹션을 참조하세요.

SSE-KMS 필요

특정 디렉터리 버킷의 모든 객체에 대해 SSE-KMS를 요구하려면 버킷 정책을 사용하면 됩니다. 예를 들어, CreateSession API 작업을 사용하여 새 객체(PutObject, CopyObject, CreateMultipartUpload)를 업로드할 수 있는 권한을 부여하는 경우, CreateSession 요청에 SSE-KMS를 요청하는 x-amz-server-side-encryption-aws-kms-key-id 헤더가 포함되지 않는다면 다음 버킷 정책은 모든 사람에 대한 업로드 객체 권한(s3express:CreateSession)을 거부합니다.

{ "Version":"2012-10-17", "Id":"UploadObjectPolicy", "Statement":[{ "Sid":"DenyObjectsThatAreNotSSEKMS", "Effect":"Deny", "Principal":"*", "Action":"s3express:CreateSession", "Resource":"arn:aws:s3express:region:account-id:bucket/bucket-base-name--zone-id--x-s3/*", "Condition":{ "Null":{ "s3express:x-amz-server-side-encryption-aws-kms-key-id":"true" } } } ] }

버킷의 객체를 암호화하는 데 특정 AWS KMS key를 사용하도록 하려면 s3express: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은 문자열이 존재하는지 유효성을 검사하지 않습니다. Amazon S3가 객체 암호화에 사용하는 AWS KMS 키 ID는 정책의 AWS KMS 키 ID와 일치해야 합니다. 그렇지 않으면 Amazon S3는 요청을 거부합니다.

새 객체 업로드에 SSE-KMS를 사용하는 방법에 대한 자세한 내용은 디렉터리 버킷의 새 객체 업로드에 AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정 섹션을 참조하세요.

디렉터리 버킷에 대한 특정 조건 키의 전체 목록을 보려면 IAM을 사용한 리전 엔드포인트 API 권한 부여 섹션을 참조하세요.

암호화 컨텍스트

디렉터리 버킷의 경우 암호화 컨텍스트는 데이터에 대한 컨텍스트 정보를 포함하는 키-값 페어 집합입니다. 추가 암호화 컨텍스트 값은 지원되지 않습니다. 암호화 컨텍스트에 대한 자세한 정보는 암호화 컨텍스트 섹션을 참조하십시오.

기본적으로 디렉터리 버킷에서 SSE-KMS를 사용하는 경우 Amazon S3는 버킷의 Amazon 리소스 이름(ARN)을 암호화 컨텍스트 페어로 사용합니다.

arn:aws:s3express:region:account-id:bucket/bucket-base-name--zone-id--x-s3

IAM 정책 또는 AWS KMS 키 정책에서 버킷 ARN을 암호화 컨텍스트로 사용하는지 확인하세요.

필요한 경우 CreateSession과 같은 영역 엔드포인트 API 요청의 x-amz-server-side-encryption-context 헤더를 사용하여 명시적 암호화 컨텍스트 페어를 제공할 수 있습니다. 이 헤더의 값은 암호화 컨텍스트를 키-값 페어로 포함하는 UTF-8 인코딩 JSON의 Base64로 인코딩된 문자열입니다. 디렉터리 버킷의 경우 암호화 컨텍스트는 기본 암호화 컨텍스트인 버킷의 Amazon 리소스 이름(ARN)과 일치해야 합니다. 또한, 암호화 컨텍스트는 암호화되지 않으므로 민감한 정보를 포함하지 않도록 해야 합니다.

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

CloudTrail 로그 파일 requestParameters 필드에서, 디렉터리 버킷에서 SSE-KMS를 사용하는 경우 암호화 컨텍스트 값은 버킷의 ARN입니다.

"encryptionContext": { "aws:s3express:arn": "arn:aws:s3:::arn:aws:s3express:region:account-id:bucket/bucket-base-name--zone-id--x-s3" }

또한, 디렉터리 버킷에서 SSE-KMS를 사용하는 객체 암호화의 경우 AWS KMS CloudTrail 이벤트가 객체 ARN 대신 버킷 ARN을 로깅합니다.

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

디렉터리 버킷은 HTTPS(TLS)를 통해서만 액세스할 수 있습니다. 나아가 디렉터리 버킷은 AWS Signature Version 4(SigV4)를 사용하여 요청에 서명합니다. AWS KMS 암호화 객체의 요청 전송에 대한 자세한 내용은 AWS KMS 암호화된 객체에 대한 요청 전송 섹션을 참조하세요.

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

디렉터리 버킷의 SSE-KMS 암호화 감사

AWS CloudTrail 로그를 사용하여 SSE-KMS 암호화 데이터의 AWS KMS 키 사용을 감사할 수 있습니다. GenerateDataKeyDecrypt와 같은 암호화 작업에 대한 인사이트를 얻을 수 있습니다. CloudTrail은 이벤트 이름, 사용자 이름, 이벤트 소스 등 검색 필터링을 위한 다양한 속성 값을 지원합니다.