

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon EMR에서 데이터 보호
<a name="data-protection"></a>

 AWS [공동 책임 모델은](https://aws.amazon.com/compliance/shared-responsibility-model/) Amazon EMR의 데이터 보호에 적용됩니다. 이 모델에 설명된 대로 AWS 는 모든 AWS 클라우드를 실행하는 글로벌 인프라를 보호할 책임이 있습니다. 사용자는 이 인프라에 호스팅되는 콘텐츠에 대한 통제 권한을 유지할 책임이 있습니다. 이 콘텐츠에는 AWS 사용하는에 대한 보안 구성 및 관리 작업이 포함됩니다. 데이터 프라이버시에 대한 자세한 내용은 [데이터 프라이버시 FAQ](https://aws.amazon.com/compliance/data-privacy-faq/)를 참조하세요. 유럽의 데이터 보호에 대한 자세한 내용은 AWS 보안 블로그[의 Amazon 공동 책임 모델 및 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 블로그 게시물을 참조하세요.

데이터 보호를 위해 AWS 계정 자격 증명을 보호하고를 사용하여 개별 계정을 설정하는 것이 좋습니다 AWS Identity and Access Management. 이러한 방식에서는 각 사용자에게 자신의 직무를 충실히 이행하는 데 필요한 권한만 부여됩니다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다.
+ 각 계정에 다중 인증(MFA)을 사용합니다.
+ TLS를 사용하여 AWS 리소스와 통신합니다. TLS 1.2가 필요합니다.
+ 를 사용하여 API 및 사용자 활동 로깅을 설정합니다 AWS CloudTrail.
+  AWS 암호화 솔루션을 AWS 서비스 내의 모든 기본 보안 제어와 함께 사용합니다.
+ Amazon S3에 저장된 개인 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리형 보안 서비스를 사용합니다.
+ 명령줄 인터페이스 또는 API를 통해 AWS 에 액세스할 때 FIPS 140-2 검증된 암호화 모듈이 필요한 경우 FIPS 엔드포인트를 사용합니다. 사용 가능한 FIPS 엔드포인트에 대한 자세한 내용은 [Federal Information Processing Standard(FIPS) 140-2](https://aws.amazon.com/compliance/fips/) 섹션을 참조하세요.

**명칭** 필드와 같은 자유 형식 필드에 고객 계정 번호와 같은 중요 식별 정보를 절대 입력하지 마세요. 여기에는 Amazon EMR 또는 기타 AWS 서비스에서 콘솔, API AWS CLI, 또는 AWS SDKs를 사용하여 작업하는 경우가 포함됩니다. Amazon EMR 또는 기타 서비스에 입력하는 모든 데이터를 진단 로그에 포함할 수 있습니다. 외부 서버에 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 자격 증명 정보를 URL에 포함시키지 마세요.

# Amazon EMR에서 저장 데이터 및 전송 중 데이터 암호화
<a name="emr-data-encryption"></a>

데이터 암호화는 권한 없는 사용자가 클러스터 및 관련 데이터 스토리지 시스템에서 데이터를 읽는 것을 방지하는 데 도움이 됩니다. 여기에는 영구 미디어에 저장된 데이터인 *유휴* 데이터와 네트워크를 이동하는 동안 가로챌 수 있는 데이터인 *전송 중* 데이터가 포함됩니다.

Amazon EMR 버전 4.8.0부터 Amazon EMR 보안 구성을 사용하여 클러스터의 데이터 암호화 설정을 더욱 쉽게 구성할 수 있습니다. 보안 구성은 Amazon S3의 EMRFS 및 Amazon Elastic Block Store(Amazon EBS) 볼륨의 전송 중 데이터와 저장 데이터에 대한 보안을 활성화하는 설정을 제공합니다.

Amazon EMR 릴리스 버전 4.1.0 이상부터 HDFS에서 투명한 암호화의 구성 여부를 선택할 수 있습니다. 투명한 암호화는 보안 구성을 사용하여 구성할 수 없습니다. 자세한 내용은 *Amazon EMR 릴리스 안내서*에서 [Amazon EMR에서 HDFS의 투명한 암호화](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-encryption-tdehdfs.html)를 참조하세요.

**Topics**
+ [

# Amazon EMR에 대한 암호화 옵션
](emr-data-encryption-options.md)
+ [

# EMR WAL 서비스에 대한 고객 KMS 키를 사용한 저장 데이터 암호화
](encryption-at-rest-kms.md)
+ [

# Amazon EMR에서 데이터 암호화를 위해 키 및 자격 증명 생성
](emr-encryption-enable.md)
+ [

# 전송 중 암호화 이해
](emr-encryption-support-matrix.md)

# Amazon EMR에 대한 암호화 옵션
<a name="emr-data-encryption-options"></a>

Amazon EMR 버전 4.8.0 이상에서는 보안 구성을 사용하여 저장 데이터나 전송 중 데이터 또는 둘 모두의 암호화 설정을 지정할 수 있습니다. 저장 데이터 암호화를 활성화할 때 Amazon S3의 EMRFS 데이터, 로컬 디스크의 데이터 또는 양쪽 데이터 모두에 대한 암호화 여부를 선택할 수 있습니다. 생성된 각 보안 구성은 클러스터 구성이 아니라 Amazon EMR에 저장되므로, 클러스터를 생성할 때마다 간편하게 구성을 재사용하여 데이터 암호화 설정을 지정할 수 있습니다. 자세한 내용은 [Amazon EMR 콘솔 또는를 사용하여 보안 구성 생성 AWS CLI](emr-create-security-configuration.md) 단원을 참조하십시오.

다음 다이어그램에서는 보안 구성에 사용할 수 있는 다양한 데이터 암호화 옵션을 보여 줍니다.

![\[Amazon EMR에는 여러 저장 데이터 및 전송 중 데이터 암호화 옵션이 있습니다.\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ManagementGuide/images/emr-encryption-options.png)


다음과 같은 암호화 옵션도 제공되지만, 보안 구성을 사용하여 구성할 수 없습니다.
+ Amazon EMR 버전 4.1.0 이상부터 HDFS에서 투명한 암호화의 구성 여부를 선택할 수 있습니다. 자세한 내용은 *Amazon EMR 릴리스 안내서*에서 [Amazon EMR에서 HDFS의 투명한 암호화](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-encryption-tdehdfs.html)를 참조하세요.
+ 보안 구성을 지원하지 않는 Amazon EMR 릴리스 버전을 사용하고 있는 경우에는 Amazon S3의 EMRFS 데이터에 대해 수동으로 보안을 구성할 수 있습니다. 자세한 내용은 [EMRFS 속성을 사용하여 Amazon S3 암호화 지정](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-emrfs-encryption.html)을 참조하세요.
+  Amazon EMR 5.24.0 이전 버전을 사용하는 경우, 암호화된 EBS 루트 디바이스 볼륨은 사용자 지정 AMI를 사용하는 경우에만 지원됩니다. 자세한 내용은 *Amazon EMR 관리 안내서*에서 [암호화된 Amazon EBS 루트 디바이스 볼륨을 사용하여 사용자 지정 AMI 생성](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-custom-ami.html#emr-custom-ami-encrypted)을 참조하세요.

**참고**  
Amazon EMR 버전 5.24.0부터를 키 공급자 AWS KMS 로 지정할 때 보안 구성 옵션을 사용하여 EBS 루트 디바이스 및 스토리지 볼륨을 암호화할 수 있습니다. 자세한 내용은 [로컬 디스크 암호화](#emr-encryption-localdisk) 단원을 참조하십시오.

데이터 암호화에는 키와 인증서가 필요합니다. 보안 구성을 사용하면에서 관리하는 키, Amazon S3에서 관리하는 AWS Key Management Service키, 사용자가 제공하는 사용자 지정 공급자의 키 및 인증서를 비롯한 여러 옵션 중에서 유연하게 선택할 수 있습니다. 를 키 공급자 AWS KMS 로 사용하는 경우 암호화 키의 저장 및 사용에 요금이 부과됩니다. 자세한 내용은 [AWS KMS 요금](https://aws.amazon.com/kms/pricing/)을 참조하십시오.

암호화 옵션을 지정하기 전에 사용할 키 및 인증서 관리 시스템을 설정합니다. 그러면 암호화 설정의 일부로 지정하는 키 및 인증서 또는 사용자 지정 공급자를 먼저 생성할 수 있습니다.

## Amazon S3에서 EMRFS 데이터에 대한 유휴 데이터 암호화
<a name="emr-encryption-s3"></a>

Amazon S3 암호화는 Amazon S3에서 읽고 쓰는 Amazon EMR 파일 시스템(EMRFS) 객체와 함께 작동합니다. 유휴 데이터 암호화를 활성화할 때 Amazon S3 서버 측 암호화(SSE) 또는 클라이언트 측 암호화(CSE)를 **기본 암호화 모드**로 지정합니다. 선택적으로 **버킷별 암호화 재정의**를 사용하여 개별 버킷에 서로 다른 암호화 방법을 지정할 수 있습니다. Amazon S3 암호화가 활성화되어 있는지 여부와 상관없이 전송 계층 보안(TLS)은 EMR 클러스터 노드 및 Amazon S3 간에 전송 중인 EMRFS 객체를 암호화합니다. Amazon S3의 암호화에 대한 내용은 Amazon Simple Storage Service 사용 설명서의 [암호화를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html)를 참조하세요.**

**참고**  
를 사용하면 암호화 키의 저장 및 사용에 요금이 AWS KMS부과됩니다. 자세한 내용은 [AWS KMS 요금](https://aws.amazon.com/kms/pricing/)을 참조하세요.

### Amazon S3 서버 측 암호화
<a name="emr-encryption-s3-sse"></a>

모든 Amazon S3 버킷에는 기본적으로 암호화가 구성되어 있으며, Amazon S3 버킷에 업로드되는 모든 새 객체는 저장 시 자동으로 암호화됩니다. Amazon S3는 데이터를 디스크에 쓸 때 객체 수준에서 데이터를 암호화하고 액세스 시 데이터를 해독합니다. SSE에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*에서 [서버 측 암호화를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)를 참조하세요.

Amazon EMR에서 SSE를 지정할 때 다음 두 가지 키 관리 시스템 중에서 선택할 수 있습니다.
+ **SSE-S3** - Amazon S3에서 자동으로 키를 관리합니다.
+ **SSE-KMS** - AWS KMS key 를 사용하여 Amazon EMR에 적합한 정책을 설정합니다. Amazon EMR의 키 요구 사항에 대한 자세한 내용은 [암호화 AWS KMS keys 에 사용을](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-enable.html#emr-awskms-keys) 참조하세요.

고객 제공 키를 사용하는 SSE(SSE-C)는 Amazon EMR에서 사용할 수 없습니다.

### Amazon S3 클라이언트 측 암호화
<a name="emr-encryption-s3-cse"></a>

Amazon S3 클라이언트 측 암호화를 사용하면 클러스터의 EMRFS 클라이언트에서 Amazon S3 암호화 및 암호 해독이 수행됩니다. 객체는 Amazon S3에 업로드되기 전에 암호화되고 다운로드된 후 암호 해독됩니다. 지정하는 공급자는 클라이언트가 사용하는 암호화 키를 제공합니다. 클라이언트는 AWS KMS 에서 제공하는 키(CSE-KMS) 또는 클라이언트 측 루트 키(CSE-C)를 제공하는 사용자 지정 Java 클래스를 사용할 수 있습니다. 암호화 세부 사항은 지정된 공급자 및 암호 해독되거나 암호화되는 객체의 메타데이터에 따라 CSE-KMS 및 CSE-C 간에 약간 다릅니다. 이러한 차이에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [클라이언트 측 암호화를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)를 참조하세요.

**참고**  
Amazon S3 CSE는 Amazon S3와 교환하는 EMRFS 데이터만 암호화하며, 클러스터 인스턴스 볼륨에 있는 모든 데이터를 암호화하지는 않습니다. 뿐만 아니라, Hue에서 EMRFS가 사용되지 않으므로 Hue S3 파일 검색기를 사용하여 Amazon S3에 작성된 객체는 암호화되지 않습니다.

## Amazon EMR WAL에서 저장 데이터 암호화
<a name="emr-encryption-wal"></a>

미리 쓰기 로깅(WAL)을 위해 서버 측 암호화(SSE)를 설정하면 Amazon EMR에서 저장 데이터를 암호화합니다. Amazon EMR에서 SSE를 지정하는 경우 다음 두 가지 키 관리 시스템 중에서 선택할 수 있습니다.

**SSE-EMR-WAL**  
Amazon EMR은 키를 자동으로 관리합니다. 기본적으로 Amazon EMR은 SSE-EMR-WAL을 사용하여 Amazon EMR WAL에 저장한 데이터를 암호화합니다.

**SSE-KMS-WAL**  
 AWS KMS 키를 사용하여 Amazon EMR WAL에 적용되는 정책을 설정합니다. 고객 KMS 키를 사용하여 EMR WAL에 대한 저장 시 암호화를 구성하는 방법에 대한 자세한 내용은 [EMR WAL 서비스에 대한 고객 KMS 키를 사용하여 저장 시 암호화](https://docs.aws.amazon.com/emr/latest/ManagementGuide/encryption-at-rest-kms.html)를 참조하세요.

**참고**  
Amazon EMR에서 WAL을 활성화하면 SSE에서 자체 키를 사용할 수 없습니다. 자세한 내용은 [Amazon EMR에 대한 미리 쓰기 로그(WAL)](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hbase-wal.html)를 참조하세요.

## 로컬 디스크 암호화
<a name="emr-encryption-localdisk"></a>

Amazon EMR 보안 구성을 사용하여 로컬 디스크 암호화를 활성화할 때 다음 메커니즘이 함께 작동하여 로컬 디스크를 암호화합니다.

### 오픈 소스 HDFS 암호화
<a name="w2aac30c19c13c11c23b5"></a>

HDFS는 분산 처리 중에 클러스터 인스턴스 간에 데이터를 교환합니다. 또한 인스턴스 스토어 볼륨과 인스턴스에 연결된 EBS 볼륨에서 데이터를 읽고 씁니다. 로컬 디스크 암호화를 활성화하면 다음 오픈 소스 Hadoop 암호화 옵션이 활성화됩니다.
+ [보안 Hadoop RPC](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_RPC)는 `Privacy`로 설정되며, 이를 통해 SASL(Simple Authentication Security Layer)을 사용하게 됩니다.
+ [HDFS 블록 데이터 전송의 데이터 암호화](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_Block_data_transfer.)는 `true`로 설정되며 AES 256 암호화를 사용하도록 구성됩니다.

**참고**  
전송 중 데이터 암호화를 활성화하여 추가 Apache Hadoop 암호화를 활성화할 수 있습니다. 자세한 내용은 [전송 중 암호화](#emr-encryption-intransit) 단원을 참조하십시오. 이러한 암호화 설정은 HDFS 투명한 암호화를 활성화하지 않으며, 이 암호화는 수동으로 구성할 수 있습니다. 자세한 내용은 *Amazon EMR 릴리스 안내서*에서 [Amazon EMR에서 HDFS의 투명한 암호화](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-encryption-tdehdfs.html)를 참조하세요.

### 인스턴스 스토어 암호화
<a name="w2aac30c19c13c11c23b7"></a>

NVMe 기반 SSD를 인스턴스 스토어 볼륨으로 사용하는 EC2 인스턴스 유형의 경우, Amazon EMR 암호화 설정과 관계없이 NVMe 암호화가 사용됩니다. 자세한 내용은 **Amazon EC2 사용 설명서에서 [NVMe SSD 볼륨](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html#nvme-ssd-volumes)을 참조하세요. 다른 인스턴스 스토어 볼륨의 경우, EBS 볼륨이 EBS 암호화를 사용하여 암호화되는지 LUKS를 사용하여 암호화되는지와 관계없이 로컬 디스크 암호화가 활성화된 경우 Amazon EMR은 LUKS를 사용하여 인스턴스 스토어 볼륨을 암호화합니다.

### EBS 볼륨 암호화
<a name="w2aac30c19c13c11c23b9"></a>

EBS 볼륨의 Amazon EC2 암호화가 계정에서 기본적으로 활성화된 리전에서 클러스터를 만들면, 로컬 디스크 암호화가 활성화되지 않은 경우에도 EBS 볼륨이 암호화됩니다. 자세한 내용은 *Amazon EC2 사용 설명서*에서 [기본적으로 암호화](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default)를 참조하세요. 보안 구성에서 로컬 디스크 암호화를 활성화하면 Amazon EMR 설정이 클러스터 EC2 인스턴스에 대한 Amazon EC2 암호화 기본 설정보다 우선합니다.

보안 구성을 사용하여 EBS 볼륨을 암호화하는 데 다음 옵션을 사용할 수 있습니다.
+ **EBS 암호화** - Amazon EMR 버전 5.24.0부터 EBS 암호화를 활성화하도록 선택할 수 있습니다. EBS 암호화 옵션은 EBS 루트 디바이스 볼륨 및 연결된 스토리지 볼륨을 암호화합니다. EBS 암호화 옵션은를 키 공급자 AWS Key Management Service 로 지정한 경우에만 사용할 수 있습니다. EBS 암호화 사용을 권장합니다.
+ **LUKS 암호화** - Amazon EBS 볼륨에 LUKS 암호화를 사용하도록 선택하는 경우 LUKS 암호화는 연결된 스토리지 볼륨에만 적용되고 루트 디바이스 볼륨에는 적용되지 않습니다. LUKS 암호화에 대한 자세한 내용은 [LUKS 온-디스크 사양](https://gitlab.com/cryptsetup/cryptsetup/wikis/Specification) 섹션을 참조하세요.

  키 공급자의 경우 Amazon EMR에 적합한 정책을 AWS KMS key 사용하여 또는 암호화 아티팩트를 제공하는 사용자 지정 Java 클래스를 설정할 수 있습니다. 를 사용하면 암호화 키의 저장 및 사용에 요금이 AWS KMS부과됩니다. 자세한 내용은 [AWS KMS 요금](https://aws.amazon.com/kms/pricing/)을 참조하세요.

**참고**  
클러스터에 EBS 암호화가 활성화되어 있는지 확인하는 경우에는 `DescribeVolumes` API 호출을 사용하는 것이 좋습니다. 자세한 내용은 [DescribeVolumes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVolumes.html)를 참조하세요. 클러스터에서 `lsblk`를 실행하면 EBS 암호화 대신 LUKS 암호화 상태만 확인할 수 있습니다.

## 전송 중 암호화
<a name="emr-encryption-intransit"></a>

전송 중 데이터 암호화와 함께 여러 가지 암호화 메커니즘이 활성화됩니다. 이러한 메커니즘은 오픈 소스 기능이고, 애플리케이션에 특정하며, Amazon EMR 릴리스에 따라 다를 수 있습니다. 전송 중 데이터 암호화를 활성화하려면 Amazon EMR에서 [Amazon EMR 콘솔 또는를 사용하여 보안 구성 생성 AWS CLI](emr-create-security-configuration.md)을 사용합니다. 전송 중 데이터 암호화가 활성화된 EMR 클러스터의 경우 Amazon EMR은 전송 중 데이터 암호화를 활성화하도록 오픈 소스 애플리케이션 구성을 자동으로 구성합니다. 고급 사용 사례의 경우 Amazon EMR의 기본 동작을 재정의하도록 오픈 소스 애플리케이션 구성을 직접 구성할 수 있습니다. 자세한 내용은 [전송 중 데이터 암호화 지원 매트릭스](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-support-matrix.html) 및 [애플리케이션 구성](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)을 참조하세요.

전송 중 데이터 암호화와 관련된 오픈 소스 애플리케이션에 대한 자세한 내용은 다음을 참조하세요.
+ 보안 구성을 통해 전송 중 데이터 암호화를 활성화하면 Amazon EMR은 전송 중 데이터 암호화를 지원하는 모든 오픈 소스 애플리케이션 엔드포인트에 대해 전송 중 데이터 암호화를 활성화합니다. 다양한 애플리케이션 엔드포인트에 대한 전송 중 데이터 암호화 지원은 Amazon EMR 릴리스 버전에 따라 다릅니다. 자세한 내용은 [전송 중 데이터 암호화 지원 매트릭스](https://docs.aws.amazon.com/)를 참조하세요.
+ 오픈 소스 구성을 재정의하여 다음을 수행할 수 있습니다.
  + 사용자 제공 TLS 인증서가 요구 사항을 충족하지 않는 경우 TLS 호스트 이름 확인 비활성화
  + 성능 및 호환성 요구 사항에 따라 특정 엔드포인트에 대한 전송 중 데이터 암호화 비활성화
  + 사용할 TLS 버전 및 암호 제품군을 제어합니다.

  [전송 중 데이터 암호화 지원 매트릭스](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-support-matrix.html)에서 애플리케이션별 구성에 대한 자세한 내용을 확인할 수 있습니다.
+ 보안 구성을 통해 전송 중 데이터 암호화를 활성화하는 것 외에도 일부 통신 채널에서는 전송 중 데이터 암호화를 활성화하기 위해 추가 보안 구성이 필요합니다. 예를 들어, 일부 오픈 소스 애플리케이션 엔드포인트는 전송 중 데이터 암호화를 위해 Simple Authentication and Security Layer(SASL)를 사용하므로, EMR 클러스터의 보안 구성에서 Kerberos 인증을 활성화해야 합니다. 이러한 엔드포인트에 대해 자세히 알아보려면 [전송 중 암호화 지원 매트릭스](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-encryption-support-matrix.html)를 참조하세요.
+ TLS v1.2 이상을 지원하는 소프트웨어를 사용하는 것이 좋습니다. Amazon EMR on EC2는 Java에서 실행되는 오픈 소스 네트워크에서 허용되는 TLS 버전, 암호 제품군 및 키 크기를 결정하는 기본 Corretto JDK 배포를 제공합니다. 현재 대부분의 오픈 소스 프레임워크는 Amazon EMR 7.0.0 이상 릴리스에 대해 TLS v1.2 이상을 적용합니다. 대부분의 오픈 소스 프레임워크가 Amazon EMR 7.0.0 이상의 경우 Java 17에서 실행되기 때문입니다. 이전 Amazon EMR 릴리스 버전은 이전 Java 버전을 사용하기 때문에 TLS v1.0 및 v1.1을 지원할 수 있지만, Corretto JDK는 Java가 지원하는 TLS 버전을 변경할 수 있으며, 이는 기존 Amazon EMR 릴리스에 영향을 미칠 수 있습니다.

다음 두 가지 방법 중 하나로 전송 중 암호화에 사용되는 암호화 아티팩트를 지정합니다. 즉, Amazon S3에 업로드하는 인증서의 압축 파일을 제공하거나, 암호화 아티팩트를 제공하는 사용자 지정 Java 클래스를 참조합니다. 자세한 내용은 [Amazon EMR 암호화를 사용하여 전송 중 데이터 암호화에 대한 인증서 제공](emr-encryption-enable.md#emr-encryption-certificates) 단원을 참조하십시오.

# EMR WAL 서비스에 대한 고객 KMS 키를 사용한 저장 데이터 암호화
<a name="encryption-at-rest-kms"></a>

EMR 미리 쓰기 로그(WAL)는 고객 KMS 키 encryption-at-rest를 지원합니다. Amazon EMR WAL이 AWS KMS와 통합되는 방법에 대한 자세한 내용은 다음과 같습니다.

EMR 미리 쓰기 로그(WAL)는 `EMR_EC2_DefaultRole` 기본적으로 `AppendEdit`를 `TrimWAL` 통해 `CreateWAL`, , `ArchiveWALCheckPoint`, `DeleteWAL`, `CompleteWALFlush``ReplayEdits`, `GetCurrentWALTime`, AWS 와 상호 작용합니다. 나열된 이전 작업이 호출되면 EMR WAL은 KMS 키에 `GenerateDataKey` 대해 `Decrypt` 및를 생성합니다.

## 고려 사항
<a name="encryption-at-rest-considerations"></a>

EMR WAL에 AWS KMS 기반 암호화를 사용할 때는 다음 사항을 고려하세요.
+ EMR WAL이 생성된 후에는 암호화 구성을 변경할 수 없습니다.
+ 자체 KMS 키로 KMS 암호화를 사용하는 경우, 해당 키는 Amazon EMR 클러스터와 동일한 리전에 있어야 합니다.
+ 필요한 모든 IAM 권한을 유지할 책임이 있으며 WAL 기간 동안 필요한 권한을 취소하지 않는 것이 좋습니다. 그렇지 않으면 연결된 암호화 키가 존재하지 않으므로 EMR WAL을 삭제할 수 없는 등 예기치 않은 장애 시나리오가 발생합니다.
+  AWS KMS 키 사용과 관련된 비용이 있습니다. 자세한 내용은 [AWS Key Management Service 요금](https://aws.amazon.com/kms/pricing/)을 참조하세요.

## 필수 IAM 권한
<a name="encryption-at-rest-required-iam-permissions"></a>

고객 KMS 키를 사용하여 미사용 시 EMR WAL을 암호화하려면 EMR WAL 클라이언트 역할 및 EMR WAL 서비스 보안 주체에 대한 적절한 권한을 설정합니다`emrwal.amazonaws.com`.

### EMR WAL 클라이언트 역할에 대한 권한
<a name="encryption-at-rest-permissions-client-role"></a>

다음은 EMR WAL 클라이언트 역할에 필요한 IAM 정책입니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey*"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowKMSDecrypt"
    }
  ]
}
```

------

EMR 클러스터의 EMR WAL 클라이언트는 `EMR_EC2_DefaultRole`을 기본적으로 사용합니다. EMR 클러스터의 인스턴스 프로파일에 다른 역할을 사용하는 경우 각 역할에 적절한 권한이 있는지 확인합니다.

역할 정책 관리에 대한 자세한 내용은 [IAM 자격 증명 권한 추가 및 제거](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)를 참조하세요.

### KMS 키 정책에 대한 권한
<a name="encryption-at-rest-permissions-kms-key-policy"></a>

KMS 정책에서 EMR WAL 클라이언트 역할과 EMR WAL 서비스 `Decrypt` 및 `GenerateDataKey*` 권한을 부여합니다. 키 정책 관리에 대한 자세한 내용은 [KMS 키 정책](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)을 참조하세요.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey*"
      ],
      "Resource": [
        "arn:aws:kms:*:123456789012:key/*"
      ],
      "Sid": "AllowKMSDecrypt"
    }
  ]
}
```

------

기본 역할을 변경하면 코드 조각에 지정된 역할이 변경될 수 있습니다.

## 와의 Amazon EMR WAL 상호 작용 모니터링 AWS KMS
<a name="encryption-at-rest-monitoring-emr-wal-kms"></a>

### Amazon EMR WAL 암호화 컨텍스트
<a name="encryption-at-rest-encryption-context"></a>

암호화 컨텍스트는 보안되지 않은 임의의 데이터를 포함하는 키-값 페어 세트입니다. 데이터 암호화 요청에 암호화 컨텍스트를 포함하면 암호화 컨텍스트가 암호화된 데이터에 AWS KMS 암호화 방식으로 바인딩됩니다. 따라서 동일한 암호화 컨텍스트로 전달해야 이 데이터를 해독할 수 있습니다.

[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 및 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 요청에서 AWS KMS Amazon EMR WAL은 EMR WAL 이름을 식별하는 하나의 이름-값 페어가 있는 암호화 컨텍스트를 사용합니다.

```
"encryptionContext": {
    "aws:emrwal:walname": "111222333444555-testworkspace-emrwalclustertest-emrwaltestwalname"
}
```

암호화 컨텍스트를 사용하여 AWS CloudTrail 및 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)와 같은 감사 레코드 및 로그에서 이러한 암호화 작업을 식별하고 정책 및 권한 부여의 권한 부여 조건으로 식별할 수 있습니다.

# Amazon EMR에서 데이터 암호화를 위해 키 및 자격 증명 생성
<a name="emr-encryption-enable"></a>

보안 구성을 사용해 암호화 옵션을 지정하기 전에 키 및 암호화 아티팩트에 사용하고 싶은 공급자를 결정합니다. 예를 들어 또는 생성한 사용자 지정 공급자 AWS KMS 를 사용할 수 있습니다. 그런 다음 이 섹션에 설명된 대로 키 또는 키 공급자를 생성합니다.

## 저장 데이터 암호화를 위한 키 제공
<a name="emr-encryption-create-keys"></a>

Amazon EMR에서 저장 데이터 암호화에 AWS Key Management Service (AWS KMS) 또는 사용자 지정 키 공급자를 사용할 수 있습니다. 를 사용하면 암호화 키의 저장 및 사용에 요금이 AWS KMS부과됩니다. 자세한 내용은 [AWS KMS 요금](https://aws.amazon.com/kms/pricing/)을 참조하십시오.

이 주제에서는 Amazon EMR에서 사용할 KMS 키의 키 정책 세부 정보를 제공하고, Amazon S3 암호화에 대한 사용자 지정 키 제공업체 클래스를 작성하기 위한 지침과 코드 예제도 제공합니다. 키 생성에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [Creating keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)를 참조하세요.

### 암호화 AWS KMS keys 에 사용
<a name="emr-awskms-keys"></a>

 AWS KMS 암호화 키는 Amazon EMR 클러스터 인스턴스 및 EMRFS와 함께 사용되는 Amazon S3 버킷과 동일한 리전에서 생성해야 합니다. 지정하는 키가 클러스터를 구성하는 데 사용하는 계정이 아닌 다른 계정에 있는 경우 ARN을 사용하여 해당 키를 지정해야 합니다.

Amazon EC2 인스턴스 프로파일의 역할에는 사용자가 지정하는 KMS를 사용할 수 있는 권한이 있어야 합니다. Amazon EMR에 있는 인스턴스 프로파일의 기본 역할은 `EMR_EC2_DefaultRole`입니다. 인스턴스 프로파일에 다른 역할을 사용하거나 Amazon S3에 대한 EMRFS 요청에 IAM 역할을 사용하는 경우 각 역할이 키 사용자로 적절히 추가되도록 해야 합니다. 이렇게 하면 해당 역할에 KMS 키를 사용할 수 있는 권한이 부여됩니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [Using Key Policies](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users) 및 [Amazon S3에 대한 EMRFS 요청의 IAM 역할 구성](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-emrfs-iam-roles.html)을 참조하세요.

 AWS Management Console 를 사용하여 지정된 KMS 키의 키 사용자 목록에 인스턴스 프로파일 또는 EC2 인스턴스 프로파일을 추가하거나 AWS CLI 또는 AWS SDK를 사용하여 적절한 키 정책을 연결할 수 있습니다.

Amazon EMR은 [대칭 KMS 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks)만 지원합니다. [비대칭 KMS 키](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html#asymmetric-cmks)를 사용하여 Amazon EMR 클러스터의 저장된 데이터를 암호화할 수 없습니다. KMS 키가 대칭인지 비대칭인지 확인하는 것과 관련된 도움말은 [Identifying symmetric and asymmetric KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html)를 참조하세요.

아래 절차에서는 AWS Management Console을 사용하여 기본 Amazon EMR 인스턴스 프로파일(`EMR_EC2_DefaultRole`)을 *키 사용자*로 추가하는 방법을 설명합니다. 이때 KMS 키를 이미 생성했다고 가정합니다. 새 KMS 키를 생성하려면 *AWS Key Management Service 개발자 안내서*에서 [Creating Keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)를 참조하세요.

**Amazon EMR의 EC2 인스턴스 프로파일을 암호화 키 사용자 목록에 추가하는 방법**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) AWS Key Management Service (AWS KMS) 콘솔을 엽니다.

1. 를 변경하려면 페이지 오른쪽 상단에 있는 리전 선택기를 AWS 리전사용합니다.

1. 수정할 KMS 키의 별칭을 선택합니다.

1. 키 세부 정보 페이지의 **Key Users(키 사용자)**에서 **Add(추가)**를 선택합니다.

1. **Add key users(키 사용자 추가)** 대화 상자에서 적절한 역할을 선택합니다. 기본 역할의 이름은 `EMR_EC2_DefaultRole`입니다.

1. **추가**를 선택합니다.

### KMS 키에 대한 추가 권한을 제공하여 EBS 암호화 활성화
<a name="emr-awskms-ebs-encryption"></a>

Amazon EMR 버전 5.24.0부터 보안 구성 옵션을 사용하여 EBS 루트 디바이스 및 스토리지 볼륨을 암호화할 수 있습니다. 이러한 옵션을 활성화하려면를 키 공급자 AWS KMS 로 지정해야 합니다. 또한 지정한를 사용할 수 `EMR_DefaultRole` 있는 권한을 서비스 역할에 부여 AWS KMS key 해야 합니다.

 AWS Management Console 를 사용하여 지정된 KMS 키의 키 사용자 목록에 서비스 역할을 추가하거나 AWS CLI 또는 AWS SDK를 사용하여 적절한 키 정책을 연결할 수 있습니다.

다음 절차에서는 AWS Management Console 를 사용하여 기본 Amazon EMR 서비스 역할을 *키 사용자*`EMR_DefaultRole`로 추가하는 방법을 설명합니다. 이때 KMS 키를 이미 생성했다고 가정합니다. 새 KMS 키를 생성하려면 *AWS Key Management Service 개발자 안내서*에서 [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)을 참조하세요.

**암호화 키 사용자 목록에 Amazon EMR 서비스 역할을 추가하는 방법**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) AWS Key Management Service (AWS KMS) 콘솔을 엽니다.

1. 를 변경하려면 페이지 오른쪽 상단에 있는 리전 선택기를 AWS 리전사용합니다.

1. 왼쪽 사이드바에서 **고객 관리형 키**를 선택합니다.

1. 수정할 KMS 키의 별칭을 선택합니다.

1. 키 세부 정보 페이지의 **Key Users(키 사용자)**에서 **Add(추가)**를 선택합니다.

1. **키 사용자 추가** 대화 상자에서 적절한 역할을 선택합니다. Amazon EMR에 대한 기본 서비스 역할의 이름은 `EMR_DefaultRole`입니다.

1. **추가**를 선택합니다.

### 사용자 지정 키 공급자 생성
<a name="emr-custom-keys"></a>

보안 구성을 사용할 때는 로컬 디스크 암호화와 Amazon S3 암호화에 서로 다른 공급자 클래스를 지정해야 합니다. 사용자 지정 키 제공업체의 요구 사항은 로컬 디스크 암호화 및 Amazon S3 암호화 사용 여부와 Amazon EMR 릴리스 버전에 따라 달라집니다.

사용자 지정 키 제공업체를 생성할 때 사용하는 암호화 유형에 따라 애플리케이션은 서로 다른 EncryptionMaterialsProvider 인터페이스도 구현해야 합니다. 두 인터페이스 모두 AWS SDK for Java 버전 1.11.0 이상에서 사용할 수 있습니다.
+ Amazon S3 암호화를 구현하려면 [ com.amazonaws.services.s3.model.EncryptionMaterialsProvider 인터페이스](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/EncryptionMaterialsProvider.html)를 사용합니다.
+ 로컬 디스크 암호화를 구현하려면 [ com.amazonaws.services.elasticmapreduce.spi.security.EncryptionMaterialsProvider 인터페이스](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/spi/security/EncryptionMaterialsProvider.html)를 사용합니다.

이 구현을 위해 암호화 구성 요소를 제공하도록 임의의 모든 전략을 사용할 수 있습니다. 예를 들어, 정적 암호화 구성 요소를 제공하거나 더 복잡한 키 관리 시스템과 통합하도록 선택할 수 있습니다.

Amazon S3 암호화를 사용하는 경우 사용자 지정 암호화 구성 요소에 대해 암호화 알고리즘 **AES/GCM/NoPadding**을 사용해야 합니다.

로컬 디스크 암호화를 사용하는 경우 사용자 지정 암호화 구성 요소에 사용할 암호화 알고리즘은 EMR 릴리스에 따라 다릅니다. Amazon EMR 7.0.0 이하의 경우 **AES/GCM/NoPadding**을 사용해야 합니다. Amazon EMR 7.1.0 이상의 경우 **AES**를 사용해야 합니다.

EncryptionMaterialsProvider 클래스는 암호화 컨텍스트별로 암호화 자료를 가져옵니다. Amazon EMR은 직접 호출자가 반환할 올바른 암호화 자료를 결정하는 데 도움이 되도록 런타임에 암호화 컨텍스트 정보를 채웁니다.

**Example 예: EMRFS에서 Amazon S3 암호화를 위해 사용자 지정 키 공급자 사용**  
Amazon EMR이 EncryptionMaterialsProvider 클래스에서 암호화 구성 요소를 가져와서 암호화를 수행할 때 EMRFS는 선택적으로 materialsDescription 인수를 객체의 Amazon S3 URI 및 클러스터의 JobFlowId라는 두 개의 필드로 채웁니다. 이러한 필드는 EncryptionMaterialsProvider 클래스에서 암호화 구성 요소를 선택적으로 반환하기 위해 사용할 수 있습니다.  
예를 들어, 공급자는 Amazon S3 URI 접두사마다 다른 키를 반환할 수 있습니다. Amazon S3 객체에 저장되는 것은 EMRFS에서 생성되어 공급자에게 전달되는 materialsDescription 값이 아니라 반환되는 암호화 구성 요소에 대한 설명입니다. Amazon S3 객체를 암호 해독하는 동안, 암호화 구성 요소 설명이 EncryptionMaterialsProvider 클래스에 전달되므로, 이 경우에도 일치하는 키를 반환하여 객체를 암호 해독할 수 있습니다.  
EncryptionMaterialsProvider 참조 구현은 아래에 제공됩니다. 또 다른 사용자 지정 공급자인 [EMRFSRSAEncryptionMaterialsProvider](https://github.com/awslabs/emr-sample-apps/tree/master/emrfs-plugins/EMRFSRSAEncryptionMaterialsProvider)는 GitHub에서 사용할 수 있습니다.  

```
import com.amazonaws.services.s3.model.EncryptionMaterials;
import com.amazonaws.services.s3.model.EncryptionMaterialsProvider;
import com.amazonaws.services.s3.model.KMSEncryptionMaterials;
import org.apache.hadoop.conf.Configurable;
import org.apache.hadoop.conf.Configuration;

import java.util.Map;

/**
 * Provides KMSEncryptionMaterials according to Configuration
 */
public class MyEncryptionMaterialsProviders implements EncryptionMaterialsProvider, Configurable{
  private Configuration conf;
  private String kmsKeyId;
  private EncryptionMaterials encryptionMaterials;

  private void init() {
    this.kmsKeyId = conf.get("my.kms.key.id");
    this.encryptionMaterials = new KMSEncryptionMaterials(kmsKeyId);
  }

  @Override
  public void setConf(Configuration conf) {
    this.conf = conf;
    init();
  }

  @Override
  public Configuration getConf() {
    return this.conf;
  }

  @Override
  public void refresh() {

  }

  @Override
  public EncryptionMaterials getEncryptionMaterials(Map<String, String> materialsDescription) {
    return this.encryptionMaterials;
  }

  @Override
  public EncryptionMaterials getEncryptionMaterials() {
    return this.encryptionMaterials;
  }
}
```

## Amazon EMR 암호화를 사용하여 전송 중 데이터 암호화에 대한 인증서 제공
<a name="emr-encryption-certificates"></a>

Amazon EMR 릴리스 버전 4.8.0 이상에서 보안 구성을 사용한 전송 중 데이터 암호화를 위해 두 가지 옵션 중 하나를 선택하여 아티팩트를 지정할 수 있습니다.
+ 수동으로 PEM 인증서를 생성하여 .zip 파일에 포함한 다음 Amazon S3에서 .zip 파일을 참조할 수 있습니다.
+ 사용자 지정 인증서 공급자를 Java 클래스로 구현할 수 있습니다. Amazon S3에서 애플리케이션의 JAR 파일을 지정한 다음 애플리케이션에서 선언된 공급자의 전체 클래스 이름을 제공합니다. 클래스는 AWS SDK for Java 버전 1.11.0부터 사용할 수 있는 [TLSArtifactsProvider](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/spi/security/TLSArtifactsProvider.html) 인터페이스를 구현해야 합니다.

Amazon EMR은 아티팩트를 클러스터의 각 노드에 자동으로 다운로드하고 나중에 해당 아티팩트를 사용하여 오픈 소스 전송 중 암호화 기능을 구현합니다. 사용 가능한 옵션에 대한 자세한 내용은 [전송 중 암호화](emr-data-encryption-options.md#emr-encryption-intransit) 섹션을 참조하세요.

### PEM 인증서 사용
<a name="emr-encryption-pem-certificate"></a>

전송 중 데이터 암호화를 위해 .zip 파일을 지정할 때 보안 구성은 .zip 파일 내의 PEM 파일의 이름이 아래 표시된 것과 똑같이 지정될 것으로 예상합니다.


**전송 중 데이터 암호화 인증서**  

| 파일 이름 | 필수/선택 | 세부 정보 | 
| --- | --- | --- | 
| privateKey.pem | 필수 | 프라이빗 키 | 
| certificateChain.pem | 필수 | 인증서 체인 | 
| trustedCertificates.pem | 선택 사항 | Java의 신뢰할 수 있는 기본 루트 인증 기관(CA) 또는 Java의 신뢰할 수 있는 기본 루트 CA에 연결할 수 있는 중간 CA에서 서명하지 않는 인증서를 제공하는 것이 좋습니다. 와일드카드 인증서를 사용하거나 호스트 이름 확인을 비활성화하는 경우 퍼블릭 CA를 사용하지 않는 것이 좋습니다. | 

프라이빗 키 PEM 파일을 클러스터 인스턴스가 상주하는 Amazon VPC 도메인에 액세스하기 위한 와일드카드 인증서로 구성해야 할 수 있습니다. 예를 들어, 클러스터가 us-east-1(북부 버지니아)에 상주하는 경우 인증서 제목 정의에서 `CN=*.ec2.internal`을 지정하여 클러스터에 대한 액세스를 허용하는 인증서 구성에서 공통적인 이름을 지정하도록 선택할 수 있습니다. 클러스터가 us-west-2(오리건)에 있는 경우 `CN=*.us-west-2.compute.internal`을 지정할 수 있습니다.

암호화 아티팩트에 제공된 PEM 파일에 일반 이름의 도메인에 대한 와일드카드 문자가 없는 경우의 값을 `hadoop.ssl.hostname.verifier`로 변경해야 합니다`ALLOW_ALL`. Amazon EMR 릴리스 7.3.0 이상에서 이를 수행하려면 클러스터에 구성을 제출할 때 `core-site` 분류를 추가합니다. 7.3.0 이전 릴리스에서는 `core-site.xml` 파일에 `"hadoop.ssl.hostname.verifier": "ALLOW_ALL"` 구성을 직접 추가합니다. 클러스터의 모든 호스트가 이를 사용하므로 기본 호스트 이름 검증자에는 와일드카드 없이 호스트 이름을 사용하기 때문에 이와 같이 변경해야 합니다. Amazon VPC의 EMR 클러스터 구성에 대한 자세한 내용은 [Amazon EMR에 대해 VPC에서 네트워킹 구성](emr-plan-vpc-subnet.md) 섹션을 참조하세요.

다음 예제는 [OpenSSL](https://www.openssl.org/)을 사용하여 2,048비트 RSA 프라이빗 키가 있는 자체 서명된 X.509 인증서를 생성하는 방법을 보여줍니다. 이 키를 사용하면 `us-west-2`(오리건) 리전에서 `*.us-west-2.compute.internal` 도메인 이름에서 일반 이름으로 지정된 발급자의 Amazon EMR 클러스터 인스턴스에 액세스할 수 있습니다.

그 밖에 국가(C), 주(S), 로캘(L)과 같은 다른 선택적 제목 항목도 지정됩니다. 자체 서명된 인증서가 생성되기 때문에 예제의 두 번째 명령은 `certificateChain.pem` 파일을 `trustedCertificates.pem` 파일에 복사합니다. 세 번째 명령은 `zip` 명령을 사용하여 인증서가 포함된 `my-certs.zip` 파일을 생성합니다.



**중요**  
이 예제는 개념 증명 데모로만 제공됩니다. 자체 서명된 인증서는 사용하지 않는 것이 좋으며 이러한 인증서를 사용하면 보안 위험이 발생할 수 있습니다. 프로덕션 시스템에서는 신뢰할 수 잇는 인증 기관(CA)을 사용하여 인증서를 발행하세요.

```
$ openssl req -x509 -newkey rsa:2048 -keyout privateKey.pem -out certificateChain.pem -days 365 -nodes -subj '/C=US/ST=Washington/L=Seattle/O=MyOrg/OU=MyDept/CN=*.us-west-2.compute.internal'
$ cp certificateChain.pem trustedCertificates.pem
$ zip -r -X my-certs.zip certificateChain.pem privateKey.pem trustedCertificates.pem
```

# 전송 중 암호화 이해
<a name="emr-encryption-support-matrix"></a>

[Apache Spark](https://aws.amazon.com/emr/features/spark/), [Apache Hive](https://aws.amazon.com/emr/features/hive/) 및 [Presto](https://aws.amazon.com/emr/features/presto/)와 같은 오픈 소스 프레임워크를 실행하도록 EMR 클러스터를 구성할 수 있습니다. 이러한 각 오픈 소스 프레임워크에는 클러스터의 EC2 인스턴스에서 실행되는 프로세스 세트가 있습니다. 이러한 각 프로세스는 네트워크 통신을 위해 네트워크 엔드포인트를 호스팅할 수 있습니다.

EMR 클러스터에서 전송 중 데이터 암호화가 활성화된 경우 네트워크 엔드포인트마다 서로 다른 암호화 메커니즘을 사용합니다. 전송 중 암호화로 지원되는 특정 오픈 소스 프레임워크 네트워크 엔드포인트, 관련 암호화 메커니즘 및 해당 지원을 추가한 Amazon EMR 릴리스에 대해 자세히 알아보려면 다음 섹션을 참조하세요. 각 오픈 소스 애플리케이션에는 변경할 수 있는 오픈 소스 프레임워크 구성과 다양한 모범 사례가 있을 수 있습니다.

 전송 중 데이터 암호화 적용 범위를 최대한으로 보장하려면 전송 중 데이터 암호화 및 Kerberos를 모두 활성화하는 것이 좋습니다. 전송 중 데이터 암호화만 활성화하면 전송 중 데이터 암호화는 TLS를 지원하는 네트워크 엔드포인트에서만 사용할 수 있습니다. 일부 오픈 소스 프레임워크 네트워크 엔드포인트가 전송 중 데이터 암호화를 위해 Simple Authentication and Security Layer(SASL)를 사용하기 때문에 Kerberos가 필요합니다.

Amazon EMR 7.x.x 릴리스에서 지원되지 않는 오픈 소스 프레임워크는 포함되지 않습니다.

## Spark
<a name="emr-encryption-support-matrix-spark"></a>

보안 구성에서 전송 중 데이터 암호화를 활성화하면 `spark.authenticate`가 `true`로 자동 설정되고 RPC 연결에 AES 기반 암호화를 사용합니다.

Amazon EMR 7.3.0부터 전송 중 데이터 암호화 및 Kerberos 인증을 사용하는 경우 Hive 메타스토어에 의존하는 Spark 애플리케이션을 사용할 수 없습니다. Hive 3은 [HIVE-16340](https://issues.apache.org/jira/browse/HIVE-16340)에서 이 문제를 수정합니다. [HIVE-44114](https://issues.apache.org/jira/browse/SPARK-44114)는 오픈 소스 Spark에서 Hive 3으로 업그레이드할 수 있을 때 이 문제를 완전히 해결합니다. 그동안 `hive.metastore.use.SSL`을 `false`로 설정하여 이 문제를 해결할 수 있습니다. 자세한 내용은 [애플리케이션 구성](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)을 참조하세요.

자세한 내용은 Apache Spark 설명서의 [Spark security](https://spark.apache.org/docs/latest/security)를 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  Spark 기록 서버  |  spark.ssl.history.port  |  18480  |  TLS  |  emr-5.3.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  Spark UI  |  spark.ui.port  |  4440  |  TLS  |  emr-5.3.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  Spark 드라이버  |  spark.driver.port  |  동적  |  Spark AES 기반 암호화  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  Spark 실행기  |  실행기 포트(명명된 구성 없음)  |  동적  |  Spark AES 기반 암호화  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  YARN NodeManager  |  spark.shuffle.service.port1  |  7337  |  Spark AES 기반 암호화  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 

1 `spark.shuffle.service.port`는 YARN NodeManager에서 호스팅되지만 Apache Spark에서만 사용됩니다.

**알려진 문제**

전송 중 활성화된 클러스터에서 `spark.yarn.historyServer.address` 구성은 현재 포트 `18080`을 사용하므로 YARN 추적 URL을 사용하여 애플리케이션 UI에 액세스할 수 없습니다. **영향을 받는 버전:** EMR - 7.3.0 \$1 EMR - 7.9.0.

다음 해결 방법을 사용할 수 있습니다.

1. 실행 중인 클러스터에서 `HTTPS` 포트 번호 `18480`을(를) 사용하도록 `/etc/spark/conf/spark-defaults.conf`의 `spark.yarn.historyServer.address` 구성을 수정했습니다.

1. 이는 클러스터를 시작하는 동안 구성을 재정의하여 제공할 수도 있습니다.

구성 예제:

```
[
                               {
                                 "Classification": "spark-defaults",
                                 "Properties": {
                                     "spark.yarn.historyServer.address": "${hadoopconf-yarn.resourcemanager.hostname}:18480"
                                 }
                               }
  
                               ]
```

## Hadoop YARN
<a name="emr-encryption-support-matrix-hadoop-yarn"></a>

[보안 Hadoop RPC](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_RPC)는 `privacy`로 설정되며, SASL 기반 전송 중 데이터 암호화를 사용합니다. 이렇게 하려면 보안 구성에서 Kerberos 인증을 활성화해야 합니다. Hadoop RPC에 대한 전송 중 암호화를 원하지 않는 경우 `hadoop.rpc.protection = authentication`을 구성합니다. 보안을 극대화하려면 기본 구성을 사용하는 것이 좋습니다.

TLS 인증서가 TLS 호스트 이름 확인 요구 사항을 충족하지 못하는 경우 `hadoop.ssl.hostname.verifier = ALLOW_ALL`을 구성할 수 있습니다. TLS 호스트 이름 확인을 적용하는 `hadoop.ssl.hostname.verifier = DEFAULT`의 기본 구성을 사용하는 것이 좋습니다.

YARN 웹 애플리케이션 엔드포인트에 대한 HTTPS를 비활성화하려면 `yarn.http.policy = HTTP_ONLY`를 구성합니다. 이 경우 이러한 엔드포인트에 대한 트래픽이 암호화되지 않은 상태로 유지됩니다. 보안을 극대화하려면 기본 구성을 사용하는 것이 좋습니다.

자세한 내용은 Apache Hadoop 설명서에서 [Hadoop in secure mode](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html)를 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
| ResourceManager |  yarn.resourcemanager.webapp.address  |  8088  |  TLS  |  emr-7.3.0 이상  | 
| ResourceManager |  yarn.resourcemanager.resource-tracker.address  |  8025  |  SASL \$1 Kerberos  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
| ResourceManager |  yarn.resourcemanager.scheduler.address  |  8030  |  SASL \$1 Kerberos  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
| ResourceManager |  yarn.resourcemanager.address  |  8032  |  SASL \$1 Kerberos  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
| ResourceManager |  yarn.resourcemanager.admin.address  |  8033  |  SASL \$1 Kerberos  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
| TimelineServer |  yarn.timeline-service.address  |  10200  |  SASL \$1 Kerberos  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
| TimelineServer |  yarn.timeline-service.webapp.address  |  8188  |  TLS  |  emr-7.3.0 이상  | 
|  WebApplicationProxy  |  yarn.web-proxy.address  |  20888  |  SASL \$1 Kerberos  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  NodeManager  |  yarn.nodemanager.address  |  8041  |  SASL \$1 Kerberos  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  NodeManager  |  yarn.nodemanager.localizer.address  |  8040  |  SASL \$1 Kerberos  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  NodeManager  |  yarn.nodemanager.webapp.address  |  8044  |  TLS  |  emr-7.3.0 이상  | 
|  NodeManager  |  mapreduce.shuffle.port1  |  13562  |  TLS  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  NodeManager  |  spark.shuffle.service.port2  |  7337  |  Spark AES 기반 암호화  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 

1 `mapreduce.shuffle.port`는 YARN NodeManager에서 호스팅되지만 Hadoop MapReduce 에서만 사용됩니다.

2 `spark.shuffle.service.port`는 YARN NodeManager에서 호스팅되지만 Apache Spark에서만 사용됩니다.

**알려진 문제**

`yarn.log.server.url` 구성은 현재 포트 19888과 함께 HTTP를 사용 중이므로 Resource Manager UI에서 애플리케이션 로그에 액세스할 수 없습니다. **영향을 받는 버전:** EMR - 7.3.0 \$1 EMR - 7.8.0.

다음 해결 방법을 사용할 수 있습니다.

1. `HTTPS` 프로토콜 및 포트 번호 `19890`을 사용하려면 `yarn-site.xml`에서 `yarn.log.server.url` 구성을 수정하세요.

1. YARN Resource Manager 재시작: `sudo systemctl restart hadoop-yarn-resourcemanager.service`.

## Hadoop HDFS
<a name="emr-encryption-support-matrix-hadoop-hdfs"></a>

전송 중 데이터 암호화가 EMR 클러스터에서 활성화된 경우 Hadoop 이름 노드, 데이터 노드 및 저널 노드 모두 기본적으로 TLS를 지원합니다.

[보안 Hadoop RPC](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_RPC)는 `privacy`로 설정되며, SASL 기반 전송 중 데이터 암호화를 사용합니다. 이렇게 하려면 보안 구성에서 Kerberos 인증을 활성화해야 합니다.

HTTPS 엔드포인트에 사용되는 기본 포트는 변경하지 않는 것이 좋습니다.

[HDFS 블록 데이터 전송의 데이터 암호화](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_Block_data_transfer.)는 AES 256을 사용하며, 보안 구성에서 저장 데이터 암호화를 활성화해야 합니다.

자세한 내용은 Apache Hadoop 설명서에서 [Hadoop in secure mode](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html)를 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  Namenode  |  dfs.namenode.https-address  |  9871  |  TLS  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  Namenode  |  dfs.namenode.rpc-address  |  8020  |  SASL \$1 Kerberos  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  Datanode  |  dfs.datanode.https.address  |  9865  |  TLS  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  Datanode  |  dfs.datanode.address  |  9866  |  SASL \$1 Kerberos  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  저널 노드  |  dfs.journalnode.https-address  |  8481  |  TLS  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  저널 노드  |  dfs.journalnode.rpc-address  |  8485  |  SASL \$1 Kerberos  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  DFSZKFailoverController  |  dfs.ha.zkfc.port  |  8019  |  없음  |  ZKFC용 TLS는 Hadoop 3.4.0에서만 지원됩니다. 자세한 내용은 [HADOOP-18919](https://issues.apache.org/jira/browse/HADOOP-18919)를 참조하세요. Amazon EMR 릴리스 7.1.0은 현재 Hadoop 3.3.6에서 지원됩니다. 상위 Amazon EMR 릴리스는 향후 Hadoop 3.4.0에서 지원됩니다.  | 

## Hadoop MapReduce
<a name="emr-encryption-support-matrix-hadoop-mapreduce"></a>

EMR 클러스터에서 전송 중 데이터 암호화가 활성화된 경우 Hadoop MapReduce, 작업 기록 서버 및 MapReduce 셔플은 모두 기본적으로 TLS를 지원합니다.

[Hadoop MapReduce 암호화 셔플](https://hadoop.apache.org/docs/r2.7.1/hadoop-mapreduce-client/hadoop-mapreduce-client-core/EncryptedShuffle.html)은 TLS를 사용합니다.

HTTPS 엔드포인트의 기본 포트는 변경하지 않는 것이 좋습니다.

자세한 내용은 Apache Hadoop 설명서에서 [Hadoop in secure mode](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html)를 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  JobHistoryServer  |  mapreduce.jobhistory.webapp.https.address  |  19890  |  TLS  |  emr-7.3.0 이상  | 
|  YARN NodeManager  |  mapreduce.shuffle.port1  |  13562  |  TLS  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 

1 `mapreduce.shuffle.port`는 YARN NodeManager에서 호스팅되지만 Hadoop MapReduce 에서만 사용됩니다.

## Presto
<a name="emr-encryption-support-matrix-presto"></a>

Amazon EMR 릴리스 5.6.0 이상에서 Presto 조정자와 작업자 간 내부 통신은 TLS Amazon EMR을 사용하여 Presto에서 [보안 내부 통신](https://prestodb.io/docs/current/security/internal-communication.html)을 활성화하는 데 필요한 모든 구성을 설정합니다.

커넥터가 Hive 메타스토어를 메타데이터 저장소로 사용하는 경우 통신기와 Hive 메타스토어 간 통신도 TLS로 암호화됩니다.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  Presto 코디네이터  |  http-server.https.port  |  8446  |  TLS  |  emr-5.6.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 
|  Presto 작업자  |  http-server.https.port  |  8446  |  TLS  |  emr-5.6.0 이상, emr-6.0.0 이상, emr-7.0.0 이상  | 

## Trino
<a name="emr-encryption-support-matrix-trino"></a>

Amazon EMR 릴리스 6.1.0 이상에서 Presto 조정자와 작업자 간 내부 통신은 TLS Amazon EMR을 사용하여 Trino에서 [보안 내부 통신](https://trino.io/docs/current/security/internal-communication.html)을 활성화하는 데 필요한 모든 구성을 설정합니다.

커넥터가 Hive 메타스토어를 메타데이터 저장소로 사용하는 경우 통신기와 Hive 메타스토어 간 통신도 TLS로 암호화됩니다.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  Trino 코디네이터  |  http-server.https.port  |  8446  |  TLS  |  emr-6.1.0 이상, emr-7.0.0 이상  | 
|  Trino 작업자  |  http-server.https.port  |  8446  |  TLS  |  emr-6.1.0 이상, emr-7.0.0 이상  | 

## Hive 및 Tez
<a name="emr-encryption-support-matrix-hive-tez"></a>

기본적으로 Hive 서버 2, Hive 메타스토어 서버, Hive LLAP 대몬 웹 UI 및 Hive LLAP 셔플은 EMR 클러스터에서 전송 중 데이터 암호화가 활성화된 경우 모두 TLS를 지원합니다. Hive 구성에 대한 자세한 내용은 [Configuration properties](https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties)를 참조하세요.

EMR 클러스터에서 전송 중 데이터 암호화가 활성화되면 Tomcat 서버에서 호스팅되는 Tez UI에서도 HTTPS가 활성화됩니다. 그러나 Tez AM 웹 UI 서비스에서는 HTTPS가 비활성화되어 있으므로 AM 사용자는 열린 SSL 리스너의 키 저장소 파일에 액세스할 수 없습니다. 부울 구성 `tez.am.tez-ui.webservice.enable.ssl` 및 `tez.am.tez-ui.webservice.enable.client.auth`를 사용하여 이 동작을 활성화할 수도 있습니다.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  HiveServer2  |  hive.server2.thrift.port  |  10000  |  TLS  |  emr-6.9.0 이상, emr-7.0.0 이상  | 
|  HiveServer2  |  hive.server2.thrift.http.port  |  10001  |  TLS  |  emr-6.9.0 이상, emr-7.0.0 이상  | 
|  HiveServer2  |  hive.server2.webui.port  |  10002  |  TLS  |  emr-7.3.0 이상  | 
|  HiveMetastoreServer  |  hive.metastore.port  |  9083  |  TLS  |  emr-7.3.0 이상  | 
|  LLAP 대몬  |  hive.llap.daemon.yarn.shuffle.port  |  15551  |  TLS  |  emr-7.3.0 이상  | 
|  LLAP 대몬  |  hive.llap.daemon.web.port  |  15002  |  TLS  |  emr-7.3.0 이상  | 
|  LLAP 대몬  |  hive.llap.daemon.output.service.port  |  15003  |  없음  |  Hive는 이 엔드포인트에 대해 전송 중 암호화를 지원하지 않습니다.  | 
|  LLAP 대몬  |  hive.llap.management.rpc.port  |  15004  |  없음  |  Hive는 이 엔드포인트에 대해 전송 중 암호화를 지원하지 않습니다.  | 
|  LLAP 대몬  |  hive.llap.plugin.rpc.port  |  동적  |  없음  |  Hive는 이 엔드포인트에 대해 전송 중 암호화를 지원하지 않습니다.  | 
|  LLAP 대몬  |  hive.llap.daemon.rpc.port  |  동적  |  없음  |  Hive는 이 엔드포인트에 대해 전송 중 암호화를 지원하지 않습니다.  | 
|  WebHCat  |  templeton.port  |  50111  |  TLS  |  emr-7.3.0 이상  | 
|  Tez 애플리케이션 마스터  |  tez.am.client.am.port-range tez.am.task.am.port-range  |  동적  |  없음  |  Tez는 이 엔드포인트에 대해 전송 중 암호화를 지원하지 않습니다.  | 
|  Tez 애플리케이션 마스터  |  tez.am.tez-ui.webservice.port-range  |  동적  |  없음  |  기본 설정은 “Disable”입니다. emr-7.3.0 이상에서 Tez 구성을 사용하여 활성화할 수 있습니다.  | 
|  Tez 태스크  |  해당 없음 - 구성할 수 없음  |  동적  |  없음  |  Tez는 이 엔드포인트에 대해 전송 중 암호화를 지원하지 않습니다.  | 
|  Tez UI  |  Tez UI가 호스팅되는 Tomcat 서버를 통해 구성 가능  |  8080  |  TLS  |  emr-7.3.0 이상  | 

## Flink
<a name="emr-encryption-support-matrix-flink"></a>

 Apache Flink REST 엔드포인트와 Flink 프로세스 간 내부 통신은 EMR 클러스터에서 전송 중 데이터 암호화를 활성화할 때 기본적으로 TLS를 지원합니다.

 [https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-internal-enabled](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-internal-enabled)를 `true`로 설정하며, Flink 프로세스 간 내부 통신을 위해 전송 중 데이터 암호화를 사용합니다. 내부 통신에 전송 중 데이터 암호화를 사용하지 않으려면 해당 구성을 비활성화합니다. 보안을 극대화하려면 기본 구성을 사용하는 것이 좋습니다.

 Amazon EMR은 [https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-rest-enabled](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-rest-enabled)를 `true`로 설정하고 REST 엔드포인트에 전송 중 데이터 암호화를 사용합니다. 또한 Amazon EMR은 Flink 기록 서버와의 TLS 통신을 사용하기 위해 [https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#historyserver-web-ssl-enabled](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#historyserver-web-ssl-enabled)를 true로 설정합니다. REST 포인트에 대한 전송 중 데이터 암호화를 원하지 않는 경우 이러한 구성을 비활성화합니다. 보안을 극대화하려면 기본 구성을 사용하는 것이 좋습니다.

Amazon EMR은 [https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-algorithms](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/#security-ssl-algorithms)를 사용하여 AES 기반 암호화를 사용하는 암호 목록을 지정합니다. 원하는 암호를 사용하려면 이 구성을 재정의합니다.

자세한 내용은 Flink 설명서의 [SSL Setup](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/security/security-ssl/)을 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  Flink 기록 서버  |  historyserver.web.port  |  8082  |  TLS  |  emr-7.3.0 이상  | 
|  작업 관리자 Rest Server  |  rest.bind-port rest.port  |  동적  |  TLS  |  emr-7.3.0 이상  | 

## HBase
<a name="emr-encryption-support-matrix-hbase"></a>

 Amazon EMR은 [보안 Hadoop RPC](https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html#Data_Encryption_on_RPC)를 `privacy`로 설정합니다. HMaster 및 RegionServer는 SASL 기반 전송 중 데이터 암호화를 사용합니다. 이렇게 하려면 보안 구성에서 Kerberos 인증을 활성화해야 합니다.

Amazon EMR은 `hbase.ssl.enabled`를 true로 설정하고 UI 엔드포인트에 대해 TLS를 사용합니다. UI 엔드포인트에 대해 TLS를 사용하지 않으려면 이 구성을 비활성화합니다. 보안을 극대화하려면 기본 구성을 사용하는 것이 좋습니다.

Amazon EMR은 REST 및 Thirft 서버 엔드포인트에 각각 `hbase.rest.ssl.enabled` 및 `hbase.thrift.ssl.enabled`를 설정하고 TLS를 사용합니다. 이러한 엔드포인트에 대해 TLS를 사용하지 않으려면 이 구성을 비활성화합니다. 보안을 극대화하려면 기본 구성을 사용하는 것이 좋습니다.

EMR 7.6.0부터, TLS는 HMaster 및 RegionServer 엔드포인트에서 지원됩니다. Amazon EMR은 `hbase.server.netty.tls.enabled` 및 `hbase.client.netty.tls.enabled`도 설정합니다. 이러한 엔드포인트에 대해 TLS를 사용하지 않으려면 이 구성을 비활성화합니다. 암호화를 제공하여 보안을 강화하는 기본 구성을 사용하는 것이 좋습니다. 자세한 내용은 *Apache HBase 참조 안내서*의[ HBase RPC 통신의 전송 수준 보안(TLS)](https://hbase.apache.org/book.html#_transport_level_security_tls_in_hbase_rpc_communication)을 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  HMaster  |  HMaster  |  16000  |  SASL \$1 Kerberos TLS  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상의 SASL \$1 Kerberos emr-7.6.0\$1의 TLS  | 
|  HMaster  |  HMaster UI  |  16010  |  TLS  |  emr-7.3.0 이상  | 
|  RegionServer  |  RegionServer  |  16020  |  SASL \$1 Kerberos TLS  |  emr-4.8.0 이상, emr-5.0.0 이상, emr-6.0.0 이상, emr-7.0.0 이상의 SASL \$1 Kerberos emr-7.6.0\$1의 TLS  | 
|  RegionServer  |  RegionServer 정보  |  16030  |  TLS  |  emr-7.3.0 이상  | 
|  HBase Rest Server  |  Rest Server  |  8070  |  TLS  |  emr-7.3.0 이상  | 
|  HBase Rest Server  |  REST UI  |  8085  |  TLS  |  emr-7.3.0 이상  | 
|  Hbase Thrift 서버  |  Thrift 서버  |  9090  |  TLS  |  emr-7.3.0 이상  | 
|  Hbase Thrift 서버  |  Thrift 서버 UI  |  9095  |  TLS  |  emr-7.3.0 이상  | 

## 피닉스
<a name="emr-encryption-support-matrix-phoenix"></a>

 EMR 클러스터에서 전송 중 데이터 암호화를 활성화한 경우 Phoenix Query Server는 TLS 속성 `phoenix.queryserver.tls.enabled`를 지원합니다. 기본적으로 `true`로 설정되어 있습니다.

자세한 내용은 Phoenix 쿼리 서버 설명서의 [Configurations relating to HTTPS](https://phoenix.apache.org/server.html#Configuration)를 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  쿼리 서버  |  phoenix.queryserver.http.port  |  8765  |  TLS  |  emr-7.3.0 이상  | 

## Oozie
<a name="emr-encryption-support-matrix-oozie"></a>

Amazon EMR 7.3.0 이상에서 Oozie를 실행하는 경우 Amazon EMR에서 [OOZIE-3673](https://issues.apache.org/jira/browse/OOZIE-3673)을 사용할 수 있습니다. 이메일 작업을 실행할 때 사용자 지정 SSL 또는 TLS 프로토콜을 구성해야 하는 경우 `oozie-site.xml` 파일 `oozie.email.smtp.ssl.protocols` 속성을 설정할 수 있습니다. 기본적으로 전송 중 데이터 암호화를 활성화한 경우 Amazon EMR은 TLS v1.3 프로토콜을 사용합니다.

또한 Amazon EMR 7.3.0 이상에서 Oozie를 실행하는 경우 Amazon EMR에서 [OOZIE-3677](https://issues.apache.org/jira/browse/OOZIE-3677) 및 [OOZIE-3674](https://issues.apache.org/jira/browse/OOZIE-3674)를 사용할 수 있습니다. 이를 통해 `oozie-site.xml`에서 `keyStoreType` 및 `trustStoreType` 속성을 지정할 수 있습니다. OOZIE-3674는 인증서 오류를 무시할 수 있도록 Oozie 클라이언트에 `--insecure` 파라미터를 추가합니다.

Oozie는 TLS 호스트 이름 확인을 적용합니다. 즉, 전송 중 데이터 암호화에 사용하는 모든 인증서가 호스트 이름 확인 요구 사항을 충족해야 합니다. 인증서가 기준을 충족하지 않으면 Amazon EMR이 클러스터를 프로비저닝할 때 클러스터가 `oozie share lib update` 단계에서 멈출 수 있습니다. 호스트 이름 확인을 준수하도록 인증서를 업데이트하는 것이 좋습니다. 그러나 인증서를 업데이트할 수 없는 경우 클러스터 구성에서 `oozie.https.enabled` 속성을 `false`로 설정하여 Oozie용 SSL을 비활성화할 수 있습니다.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  EmbeddedOozieServer  |  oozie.https.port  |  11443  |  TLS  |  emr-7.3.0 이상  | 
|  EmbeddedOozieServer  |  oozie.email.smtp.port  |  25  |  TLS  |  emr-7.3.0 이상  | 

## Hue
<a name="emr-encryption-support-matrix-hue"></a>

기본적으로 Hue는 Amazon EMR 클러스터에서 전송 중 암호화가 활성화된 경우 TLS를 지원합니다. Hue 구성에 대한 자세한 내용은 [HTTPS/SSL을 사용한 Hue 구성](https://gethue.com/configure-hue-with-https-ssl/)을 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  Hue  |  http\$1port  |  8888  |  TLS  |  emr-7.4.0 이상  | 

## Livy
<a name="emr-encryption-support-matrix-livy"></a>

기본적으로 Livy는 Amazon EMR 클러스터에서 전송 중 암호화가 활성화된 경우 TLS를 지원합니다. Livy 구성에 대한 자세한 내용은 [Apache Livy를 사용한 HTTPS 활성화](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/enabling-https.html)를 참조하세요.

Amazon EMR 7.3.0부터 전송 중 데이터 암호화 및 Kerberos 인증을 사용하는 경우 Hive 메타스토어에 의존하는 Spark 애플리케이션용 Livy 서버를 사용할 수 없습니다. 이 문제는 [HIVE-16340](https://issues.apache.org/jira/browse/HIVE-16340)에서 수정되었으며, 오픈 소스 Spark 애플리케이션을 Hive 3으로 업그레이드할 수 있는 경우 [SPARK-44114](https://issues.apache.org/jira/browse/SPARK-44114)에서 완전히 해결됩니다. 그동안 `hive.metastore.use.SSL`을 `false`로 설정하여 이 문제를 해결할 수 있습니다. 자세한 내용은 [애플리케이션 구성](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)을 참조하세요.

자세한 내용은 [Apache Livy를 사용한 HTTPS 활성화](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/enabling-https.html)를 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  livy-server  |  livy.server.port  |  8998  |  TLS  |  emr-7.4.0 이상  | 

## JupyterEnterpriseGateway
<a name="emr-encryption-matrix-jupyter-enterprise"></a>

기본적으로 Jupyter Enterprise Gateway는 Amazon EMR 클러스터에서 전송 중 데이터 암호화가 활성화된 경우 TLS를 지원합니다. Jupyter Enterprise Gateway 구성에 대한 자세한 내용은 [Enterprise Gateway 서버 보호](https://jupyter-enterprise-gateway.readthedocs.io/en/v1.2.0/getting-started-security.html#securing-enterprise-gateway-server)를 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  jupyter\$1enterprise\$1gateway  |  c.EnterpriseGatewayApp.port  |  9547  |  TLS  |  emr-7.4.0 이상  | 

## JupyterHub
<a name="emr-encryption-matrix-jupyter-hub"></a>

기본적으로 JupyterHub는 Amazon EMR 클러스터에서 전송 중 암호화가 활성화된 경우 TLS를 지원합니다. 자세한 내용은 JupyterHub 설명서의 [SSL 암호화 활성화](https://jupyterhub.readthedocs.io/en/latest/tutorial/getting-started/security-basics.html#enabling-ssl-encryption)를 참조하세요. 암호화를 비활성화하는 것은 권장되지 않습니다.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  jupyter\$1hub  |  c.JupyterHub.port  |  9443  |  TLS  |  emr-5.14.0\$1, emr-6.0.0\$1, emr-7.0.0\$1  | 

## Zeppelin
<a name="emr-encryption-matrix-zeppelin"></a>

 기본적으로 Zeppelin은 EMR 클러스터에서 전송 중 데이터 암호화를 활성화할 때 TLS를 지원합니다. Zeppelin 구성에 대한 자세한 내용은 Zeppelin 설명서의 [SSL Configuration](https://zeppelin.apache.org/docs/0.11.1/setup/operation/configuration.html#ssl-configuration)을 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  zeppelin  |  zeppelin.server.ssl.port  |  8890  |  TLS  |  7.3.0\$1  | 

## Zookeeper
<a name="emr-encryption-matrix-zookeeper"></a>

Amazon EMR은 `serverCnxnFactory`를 `org.apache.zookeeper.server.NettyServerCnxnFactory`로 설정하여 Zookeeper 쿼럼 및 클라이언트 통신을 위한 TLS를 활성화합니다.

`secureClientPort`는 TLS 연결을 수신하는 포트를 지정합니다. 클라이언트가 Zookeeper에 대한 TLS 연결을 지원하지 않는 경우, 클라이언트는 `clientPort`에 지정된 2181의 안전하지 않은 포트에 연결할 수 있습니다. 이 두 포트를 재정의하거나 비활성화할 수 있습니다.

Amazon EMR은 쿼럼 및 관리자 서버에 대해 TLS 통신을 활성화하기 위해 `sslQuorum` 및 `admin.forceHttps`를 모두 `true`로 설정합니다. 쿼럼 및 관리자 서버에 대한 전송 중 데이터 암호화를 원하지 않는 경우 이러한 구성을 비활성화할 수 있습니다. 보안을 극대화하려면 기본 구성을 사용하는 것이 좋습니다.

자세한 내용은 Zookeeper 설명서의 [암호화, 인증, 권한 부여 옵션](https://zookeeper.apache.org/doc/r3.9.2/zookeeperAdmin.html#sc_authOptions)을 참조하세요.


| 구성 요소 | 엔드포인트 | 포트 | 전송 중 암호화 메커니즘 | 릴리스에서 지원 | 
| --- | --- | --- | --- | --- | 
|  Zookeeper 서버  |  secureClientPort  |  2281  |  TLS  |  emr-7.4.0 이상  | 
|  Zookeeper 서버  |  쿼럼 포트  |  2개가 있습니다. 팔로워는 2888을 사용하여 리더에 연결합니다. 리더 선출에서 3888 사용  |  TLS  |  emr-7.4.0 이상  | 
|  Zookeeper 서버  |  admin.serverPort  |  8341  |  TLS  |  emr-7.4.0 이상  | 