Amazon EMR에서 AWS KMS 사용 방법 - AWS Key Management Service

Amazon EMR에서 AWS KMS 사용 방법

Amazon EMR 클러스터를 사용하는 경우에는 영구 스토리지 위치에 저장하기 전에 저장된 데이터를 암호화하도록 클러스터를 구성할 수 있습니다. EMR 파일 시스템(EMRFS), 클러스터 노드의 스토리지 볼륨 또는 두 곳에 저장된 데이터를 모두 암호화할 수 있습니다. 저장된 데이터를 암호화하기 위해 AWS KMS key를 사용할 수 있습니다. 다음 주제에서는 Amazon EMR 클러스터가 어떻게 KMS 키를 이용해 저장된 데이터를 암호화하는지 설명합니다.

중요

Amazon EMR은 대칭 KMS 키만 지원합니다. 비대칭 KMS 키를 사용하여 Amazon EMR 클러스터의 저장된 데이터를 암호화할 수 없습니다. KMS 키가 대칭 또는 비대칭인지 여부를 확인하는 방법에 대한 도움말은 비대칭 KMS 키 식별 단원을 참조하십시오.

Amazon EMR 클러스터는 전송 중인 데이터도 암호화할 수 있습니다. 그러면 클러스터가 네트워크를 통해 데이터를 보내기 전에 암호화합니다. KMS 키를 이용해 전송 중인 데이터를 암호화할 수 없습니다. 자세한 내용은 Amazon EMR 관리 안내서전송 중 데이터 암호화를 참조하세요.

Amazon EMR에서 사용할 수 있는 모든 암호화 옵션에 대한 자세한 내용은 Amazon EMR 관리 가이드암호화 옵션을 참조하십시오.

EMR 파일 시스템(EMRFS)에서 데이터 암호화

Amazon EMR 클러스터는 배포된 두 파일 시스템을 사용합니다.

  • Hadoop 분산 파일 시스템(HDFS) HDFS 암호화는 AWS KMS에서 KMS 키를 사용하지 않습니다.

  • EMR 파일 시스템(EMRFS). EMRFS는 Amazon EMR 클러스터가 Amazon Simple Storage Service(Amazon S3)에 데이터를 저장할 수 있도록 하는 HDFS 구현입니다. EMRFS는 네 가지 암호화 옵션을 지원하는데, 그 중 두 개가 AWS KMS의 KMS 키를 사용합니다. EMRFS에서 사용할 수 있는 4가지 암호화 옵션에 대한 자세한 내용은 Amazon EMR 관리 가이드암호화 옵션을 참조하십시오.

KMS 키를 사용하는 두 가지 EMRFS 암호화 옵션은 Amazon S3이 제공하는 다음 암호화 기능을 사용합니다.

KMS 키를 사용하여 EMRFS에서 데이터를 암호화하도록 Amazon EMR 클러스터를 구성할 때 Amazon S3 또는 Amazon EMR 클러스터가 사용할 KMS 키를 선택합니다. SSE-KMS를 사용하면 별칭이 aws/s3인 Amazon S3에 대해 AWS 관리형 키를 선택하거나 직접 생성한 대칭 고객 관리형 키를 선택할 수 있습니다. 클라이언트 측 암호화를 사용하는 경우 사용자가 생성한 대칭 고객 관리형 키를 선택해야 합니다. 고객 관리형 키를 선택하는 경우 Amazon EMR 클러스터에 KMS 키를 사용할 권한이 있는지 확인해야 합니다. 자세한 내용은 Amazon EMR 관리 가이드암호화에 AWS KMS keys 사용을 참조하십시오.

서버 측 암호화와 클라이언트 측 암호화 모두 공통적으로, 선택하는 KMS 키는 envelope 암호화 워크플로의 루트 키입니다. 데이터는 AWS KMS에서 KMS 키로 암호화된 고유한 데이터 키를 사용하여 암호화됩니다. 암호화된 데이터와 그 데이터 키의 암호화된 사본이 S3 버킷에서 암호화된 단일 객체로 저장됩니다. 이 과정에 대한 자세한 내용은 다음 주제를 참조하십시오.

SSE-KMS를 통해 EMRFS에 데이터를 암호화하는 프로세스

Amazon EMR 클러스터가 SSE-KMS를 사용하도록 구성하면 암호화 프로세스가 다음과 같이 작동합니다.

  1. 클러스터는 S3 버킷에 저장하기 위해 Amazon S3로 데이터를 보냅니다.

  2. Amazon S3는 SSE-KMS를 사용하도록 클러스터를 구성할 때 선택한 KMS 키의 키 ID를 지정하여 GenerateDataKey 요청을 AWS KMS에 전송합니다. 요청에는 암호화 컨텍스트가 포함됩니다. 자세한 내용은 암호화 컨텍스트 단원을 참조하십시오.

  3. AWS KMS는 고유한 데이터 암호화 키(데이터 키)를 생성한 후 이 데이터 키의 사본 두 개를 Amazon S3로 보냅니다. 사본 하나는 암호화되지 않고(일반 텍스트), 다른 하나는 KMS 키 하에서 암호화됩니다.

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

  5. Amazon S3는 암호화된 데이터와 그 데이터 키의 암호화된 사본을 S3 버킷에서 암호화된 단일 객체로 저장합니다.

복호화 프로세스는 다음과 같습니다.

  1. 클러스터가 S3 버킷에서 암호화된 데이터 객체를 요청합니다.

  2. Amazon S3는 S3 객체에서 암호화된 데이터 키를 추출한 후, Decrypt 요청과 함께 암호화된 데이터 키를 모두 AWS KMS로 보냅니다. 이 요청은 암호화 컨텍스트를 포함합니다.

  3. AWS KMS는 암호화에 사용했던 KMS 키를 사용해 암호화된 데이터 키를 복호화한 후 복호화된(일반 텍스트) 데이터 키를 Amazon S3로 보냅니다.

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

  5. Amazon S3는 복호화한 데이터를 클러스터로 보냅니다.

CSE-KMS를 통해 EMRFS에 데이터를 암호화하는 프로세스

Amazon EMR 클러스터가 CSE-KMS를 사용하도록 구성하면 암호화 프로세스가 다음과 같이 작동합니다.

  1. Amazon S3에 데이터를 저장할 준비가 되면 클러스터는 CSE-KMS를 사용하도록 클러스터를 구성할 때 선택한 KMS 키의 키 ID를 지정하여 GenerateDataKey 요청을 AWS KMS로 보냅니다. 요청에는 암호화 컨텍스트가 포함됩니다. 자세한 내용은 암호화 컨텍스트 단원을 참조하십시오.

  2. AWS KMS는 고유한 데이터 암호화 키(데이터 키)를 생성한 후 이 데이터 키의 사본 두 개를 클러스터로 보냅니다. 사본 하나는 암호화되지 않고(일반 텍스트), 다른 하나는 KMS 키 하에서 암호화됩니다.

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

  4. 클러스터는 암호화된 데이터와 그 데이터 키의 암호화된 사본을 암호화된 단일 객체로 결합합니다.

  5. 클러스터는 저장을 위해 Amazon S3로 암호화된 객체를 보냅니다.

복호화 프로세스는 다음과 같습니다.

  1. 클러스터가 S3 버킷에서 암호화된 데이터 객체를 요청합니다.

  2. Amazon S3는 클러스터로 암호화된 객체를 보냅니다.

  3. 클러스터는 암호화된 객체에서 암호화된 데이터 키를 추출한 후, Decrypt 요청과 함께 암호화된 데이터 키를 모두 AWS KMS로 보냅니다. 이 요청은 암호화 컨텍스트를 포함합니다.

  4. AWS KMS는 암호화에 사용했던 KMS 키를 사용해 암호화된 데이터 키를 해독한 후 해독한(일반 텍스트) 데이터 키를 클러스터로 보냅니다.

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

클러스터 노드의 스토리지 볼륨에서 데이터 암호화

Amazon EMR 클러스터는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 모음입니다. 클러스터에 있는 각 인스턴스를 클러스터 노드 또는 노드라고 합니다. 각 노드에는 인스턴스 스토어 볼륨과 Amazon Elastic Block Store(Amazon EBS) 볼륨 등 두 가지 유형의 스토리지 볼륨이 있을 수 있습니다. LUKS(Linux Unified Key Setup)를 사용해 노드에서 두 가지 유형의 스토리지 볼륨을 모두 암호화하도록(각 노드의 부팅 볼륨은 제외) 클러스터를 구성할 수 있습니다. 이를 로컬 디스크 암호화라고 합니다.

클러스터에 로컬 디스크 암호화를 활성화하면 AWS KMS에서 KMS 키로 LUKS 키를 암호화할 수 있습니다. 직접 생성한 고객 관리형 키를 선택해야 합니다. AWS 관리형 키는 사용할 수 없습니다. 고객 관리형 키를 선택하는 경우 Amazon EMR 클러스터에 KMS 키를 사용할 권한이 있는지 확인해야 합니다. 자세한 내용은 Amazon EMR 관리 가이드암호화에 AWS KMS keys 사용을 참조하세요.

KMS 키를 사용해 로컬 디스크 암호화를 활성화하면 암호화 프로세스가 다음과 같이 작동합니다.

  1. 각 클러스터 노드가 시작되면 클러스터에 대해 로컬 디스크 암호화를 활성화할 때 선택한 KMS 키의 키 ID를 지정하여 GenerateDataKey 요청을 AWS KMS로 보냅니다.

  2. AWS KMS는 고유한 데이터 암호화 키(데이터 키)를 생성한 후 이 데이터 키의 사본 두 개를 노드로 보냅니다. 사본 하나는 암호화되지 않고(일반 텍스트), 다른 하나는 KMS 키 하에서 암호화됩니다.

  3. 노드는 LUKS 키를 보호하는 암호로 일반 텍스트 데이터 키의 base64 인코딩된 버전을 사용합니다. 노드는 부팅 볼륨에 데이터 키의 암호화된 사본을 저장합니다.

  4. 노드가 재부팅되면 재부팅된 노드는 암호화된 데이터 키를 AWS KMS에게 Decrypt 요청과 함께 보냅니다.

  5. AWS KMS는 암호화에 사용했던 KMS 키를 사용해 암호화된 데이터 키를 복호화한 후 복호화한(일반 텍스트) 데이터 키를 노드로 보냅니다.

  6. 노드는 LUKS 키의 잠금을 해제하는 암호로 일반 텍스트 데이터 키의 base64 인코딩된 버전을 사용합니다.

암호화 컨텍스트

AWS KMS와 통합된 각 AWS 서비스는 서비스가 AWS KMS를 사용하여 데이터 키를 생성하거나 데이터를 암호화 또는 복호화할 때 암호화 컨텍스트를 지정할 수 있습니다. 암호화 컨텍스트는 데이터 무결성 확인을 위해 AWS KMS에서 사용하는 추가적인 인증 정보입니다. 서비스가 암호화 작업에 대해 암호화 컨텍스트를 지정할 때 해당 해독 작업에 대해서 동일한 암호화 컨텍스트를 지정해야 합니다. 그렇지 않으면 해독이 실패합니다. 암호화 컨텍스트는 AWS CloudTrail 로그 파일에도 기록되어, 특정 KMS 키가 사용된 이유를 이해하는 데 도움을 줍니다.

다음 섹션에서는 KMS 키를 사용하는 각 Amazon EMR 암호화 시나리오에 사용되는 암호화 컨텍스트를 설명합니다.

SSE-KMS를 이용한 EMRFS 암호화를 위한 암호화 컨텍스트

SSE-KMS를 통해 Amazon EMR 클러스터가 Amazon S3로 데이터를 보내면 Amazon S3가 S3 버킷에 데이터를 저장하기 전에 KMS 키를 이용해 암호화합니다. 이 경우 Amazon S3는 S3 객체의 Amazon 리소스 이름(ARN)을 AWS KMS에 보내는 각 GenerateDataKeyDecrypt 요청과 함께 암호화 컨텍스트로 사용합니다. 다음 예는 Amazon S3가 사용하는 암호화 컨텍스트의 JSON 표시를 보여줍니다.

{ "aws:s3:arn" : "arn:aws:s3:::S3_bucket_name/S3_object_key" }

CSE-KMS를 이용한 EMRFS 암호화를 위한 암호화 컨텍스트

CSE-KMS에서는 Amazon EMR 클러스터가 데이터를 Amazon S3로 보내 저장하기 전에 KMS 키를 이용해 암호화합니다. 이 경우 클러스터는 KMS 키의 Amazon 리소스 이름(ARN)을 AWS KMS에 보내는 각 GenerateDataKeyDecrypt 요청과 함께 암호화 컨텍스트로 사용합니다. 다음 예는 클러스터가 사용하는 암호화 컨텍스트의 JSON 표시를 보여줍니다.

{ "kms_cmk_id" : "arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef" }

LUKS를 이용한 로컬 디스크 암호화를 위한 암호화 컨텍스트

Amazon EMR 클러스터가 LUKS로 로컬 디스크 암호화를 사용하는 경우 클러스터 노드는 AWS KMS로 보내는 GenerateDataKeyDecrypt 요청으로 암호화 컨텍스트를 지정하지 않습니다.