

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

# Amazon EMR을 통한 인증에 Kerberos 사용
<a name="emr-kerberos"></a>

Amazon EMR 릴리스 5.10.0 이상에서는 Kerberos를 지원합니다. Kerberos는 네트워크에서 암호화되지 않은 형식으로 암호나 다른 보안 인증이 전송되지 않도록 비밀 키 암호화를 사용하여 강력한 인증을 제공하는 네트워크 인증 프로토콜입니다.

Kerberos에서는 인증이 필요한 서비스 및 사용자를 *보안 주체*라고 합니다. 보안 주체는 Kerberos *영역* 내에 존재합니다. 영역 내에서 *KDC(키 배포 센터)*라는 Kerberos 서버는 보안 주체가 인증을 수행할 수 있는 수단을 제공합니다. KDC는 보안 주체 인증을 위해 *티켓*을 발급합니다. KDC는 영역 내의 보안 주체, 그들의 암호 및 각 보안 주체에 대한 기타 관리자 정보가 저장된 데이터베이스를 유지합니다. 또한 KDC는 다른 영역의 보안 주체로부터 인증 자격 증명을 수락할 수 있는데, 이를 *교차 영역 신뢰*라고 합니다. 또한 EMR 클러스터는 외부 KDC를 사용하여 보안 주체를 인증할 수 있습니다.

교차 영역 신뢰를 구축하거나 외부 KDC를 사용하는 일반적인 시나리오는 Active Directory 도메인에서 사용자를 인증하는 것입니다. 이를 통해 사용자는 SSH를 사용하여 클러스터에 연결하거나 빅 데이터 애플리케이션으로 작업할 때 도메인 계정으로 EMR 클러스터에 액세스할 수 있습니다.

Kerberos 인증을 사용할 때 Amazon EMR은 상호 인증이 가능하도록 클러스터의 애플리케이션, 구성 요소 및 서브시스템에 대해 Kerberos를 구성합니다.

**중요**  
Amazon EMR은 AWS Directory Service for Microsoft Active Directory 교차 영역 신뢰 또는 외부 KDC로를 지원하지 않습니다.

Amazon EMR을 사용해 Kerberos를 구성하기 앞서 Kerberos 개념과 KDC에서 실행되는 서비스 및 Kerberos 서비스를 관리하는 도구에 대해 숙지하는 것이 좋습니다. 자세한 내용은 [Kerberos 컨소시엄](http://kerberos.org/)에 게시된 [MIT Kerberos 설명서](http://web.mit.edu/kerberos/krb5-latest/doc/)를 참조하세요.

**Topics**
+ [

# Amazon EMR에서 지원되는 애플리케이션
](emr-kerberos-principals.md)
+ [

# Amazon EMR에서 Kerberos 아키텍처 옵션
](emr-kerberos-options.md)
+ [

# Amazon EMR에서 Kerberos 구성
](emr-kerberos-configure.md)
+ [

# SSH를 사용하여 Amazon EMR에서 Kerberos 클러스터에 연결
](emr-kerberos-connect-ssh.md)
+ [

# 자습서: Amazon EMR을 사용하여 클러스터 전용 KDC 구성
](emr-kerberos-cluster-kdc.md)
+ [

# 자습서: Active Directory 도메인과 교차 영역 신뢰 구성
](emr-kerberos-cross-realm.md)

# Amazon EMR에서 지원되는 애플리케이션
<a name="emr-kerberos-principals"></a>

EMR 클러스터 내에서 Kerberos 보안 주체는 모든 클러스터 노드에서 실행되는 빅 데이터 애플리케이션 서비스 및 서브시스템입니다. Amazon EMR은 Kerberos를 사용하도록 아래 나열된 애플리케이션 및 구성 요소를 구성할 수 있습니다. 각 애플리케이션에 Kerberos 사용자 보안 주체가 연결이 됩니다.

Amazon EMR은 AWS Directory Service for Microsoft Active Directory를 사용하는 교차 영역 신뢰를 지원하지 않습니다.

Amazon EMR은 아래 나열된 애플리케이션 및 구성 요소에 대해 오픈 소스 Kerberos 인증 기능만 구성합니다. 설치된 다른 애플리케이션들은 Kerberos 인증을 사용하지 않기 때문에 Kerberos 인증을 사용하는 구성 요소와 통신을 할 수 없으며 애플리케이션 오류를 유발할 수 있습니다. Kerberos 인증을 사용하지 않는 애플리케이션 및 구성 요소는 인증을 활성화하지 않습니다. 지원되는 애플리케이션 및 구성 요소는 Amazon EMR 릴리스에 따라 다를 수 있습니다.

Livy 사용자 인터페이스는 클러스터에 호스팅되는 유일한 Kerberos 지원 웹 사용자 인터페이스입니다.
+ **Hadoop MapReduce**
+ **Hbase**
+ **HCatalog**
+ **HDFS**
+ **Hive**
  + LDAP 인증에서 Hive를 활성화하지 마세요. 활성화를 할 경우 Kerberos 인증을 사용하는 YARN과의 통신에 문제가 발생할 수 있기 때문입니다.
+ **Hue**
  + Hue 사용자 인증은 자동으로 설정되지 않으며 구성 API를 사용하여 구성할 수 있습니다.
  + Hue 서버는 Kerberos 인증을 사용합니다. Hue 프런트 엔드(UI)는 인증을 위해 구성되지 않습니다. LDAP 인증은 Hue UI에서 구성할 수 있습니다.
+ **Livy**
  + Kerberos 지원 클러스터를 사용한 Livy 위장 기능은 Amazon EMR 릴리스 5.22.0 이상에서 지원됩니다.
+ **Oozie**
+ **피닉스**
+ **Presto**
  + Presto는 Amazon EMR 릴리스 6.9.0 이상에서 Kerberos 인증을 지원합니다.
  + Presto에 Kerberos 인증을 사용하려면 [전송 중 암호화](emr-data-encryption-options.md#emr-encryption-intransit)를 활성화해야 합니다.
+ **Spark**
+ **Tez**
+ **Trino**
  + Trino는 Amazon EMR 릴리스 6.11.0 이상에서 Kerberos 인증을 지원합니다.
  + Trino에 Kerberos 인증을 사용하려면 [전송 중 암호화](emr-data-encryption-options.md#emr-encryption-intransit)를 활성화해야 합니다.
+ **YARN**
+ **Zeppelin**
  + Zeppelin은 오직 Spark 인터프리터에서만 Kerberos를 사용하도록 구성됩니다. 다른 인터프리터에 대해서는 구성되지 않습니다.
  + Spark 이외의 Kerberized Zeppelin 인터프리터에서는 사용자 위장이 지원되지 않습니다.
+ **Zookeeper**
  + Zookeeper 클라이언트는 지원되지 않습니다.

# Amazon EMR에서 Kerberos 아키텍처 옵션
<a name="emr-kerberos-options"></a>

Amazon EMR과 함께 Kerberos를 사용할 때 이 섹션에 나열된 아키텍처 중에서 선택할 수 있습니다. 선택하는 아키텍처에 관계없이 동일한 단계를 사용하여 Kerberos를 구성합니다. 보안 구성을 생성하고, 클러스터를 생성할 때 보안 구성 및 호환 가능한 클러스터별 Kerberos 옵션을 지정하며, KDC의 사용자 보안 주체와 일치하는 클러스터의 Linux 사용자를 위한 HDFS 디렉터리를 생성합니다. 각 아키텍처의 구성 옵션 및 예제 구성에 대한 설명은 [Amazon EMR에서 Kerberos 구성](emr-kerberos-configure.md) 섹션을 참조하세요.

## 클러스터 전용 KDC(프라이머리 노드의 KDC)
<a name="emr-kerberos-localkdc-summary"></a>

이 구성은 Amazon EMR 릴리스 5.10.0 이상에서 사용할 수 있습니다.

![\[Amazon EMR클러스터 architecture with master node, core nodes, and task node within a Kerberos realm.\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ManagementGuide/images/kerb-cluster-dedicated-kdc.png)


**장점**
+ Amazon EMR은 KDC의 완전한 소유권을 가집니다.
+ EMR 클러스터의 KDC는 Microsoft Active Directory 또는 AWS Managed Microsoft AD와 같은 중앙 집중식 KDC 구현으로부터 독립적입니다.
+ KDC는 클러스터 내의 로컬 노드에 대해서만 인증을 관리하기 때문에 성능에 미치는 영향은 최소화됩니다.
+ 선택적으로 다른 Kerberos 인증을 사용하는 클러스터는 KDC를 외부 KDC로 참조할 수 있습니다. 자세한 내용은 [외부 KDC - 서로 다른 클러스터의 프라이머리 노드](#emr-kerberos-extkdc-cluster-summary) 단원을 참조하십시오.

**고려 사항 및 제한 사항**
+ Kerberos 인증을 사용하는 클러스터는 서로 인증할 수 없으므로 애플리케이션은 상호 작용할 수 없습니다. 클러스터 애플리케이션이 상호 작용해야 하는 경우 클러스터 간에 교차 영역 신뢰를 구축하거나 하나의 클러스터를 다른 클러스터의 외부 KDC로 구축해야 합니다. 교차 영역 신뢰가 구축된 경우 KDC에는 다른 Kerberos 영역이 있어야 합니다.
+ 각 사용자에 대한 HDFS 디렉터리와 함께 KDC 사용자 보안 주체에 해당하는 프라이머리 노드의 EC2 인스턴스에서 Linux 사용자를 생성해야 합니다.
+ 사용자 보안 주체는 EC2 프라이빗 키 파일 및 `kinit` 자격 증명을 사용하여 SSH를 사용하는 클러스터에 연결해야 합니다.

## 교차 영역 신뢰
<a name="emr-kerberos-crossrealm-summary"></a>

교차 영역 신뢰에서 다른 Kerberos 영역의 보안 주체(주로 사용자들)는 자체 KDC를 소유한 Kerberos 기반 EMR 클러스터의 애플리케이션 구성 요소를 인증합니다. 프라이머리 노드의 KDC는 두 KDC에 모두 존재하는 *교차 영역 보안 주체*를 사용하여 다른 KDC와 신뢰 관계를 구축합니다. 보안 주체의 이름과 암호가 각 KDC에서 정확하게 일치합니다. 다음 다이어그램과 같이 교차 영역 신뢰는 Active Directory 구현에 가장 일반적입니다. 외부 MIT KDC 또는 다른 Amazon EMR 클러스터의 KDC에 대한 교차 영역 신뢰도 지원됩니다.

![\[Amazon EMR clusters in different Kerberos realms with cross-realm trust to Active Directory.\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ManagementGuide/images/kerb-cross-realm-trust.png)


**장점**
+ KDC가 설치된 EMR 클러스터는 KDC의 완전한 소유권을 유지합니다.
+ Active Directory를 통해 Amazon EMR은 KDC의 사용자 보안 주체에 해당하는 Linux 사용자를 자동으로 생성합니다. 각 사용자에 대해 HDFS 디렉터리를 여전히 생성해야 합니다. 또한 Active Directory 도메인의 사용자 보안 주체는 EC2 프라이빗 키 파일 없이 `kinit` 자격 증명을 사용하여 Kerberos 인증을 사용하는 클러스터에 액세스할 수 있습니다. 따라서 클러스터 사용자 간에 프라이빗 키 파일을 공유할 필요가 없습니다.
+ 각 클러스터 KDC는 클러스터의 노드에 대한 인증을 관리하기 때문에 클러스터 전반에서 많은 수의 노드에 대한 네트워크 지연 시간 및 처리 오버헤드의 영향이 최소화됩니다.

**고려 사항 및 제한 사항**
+ Active Directory 영역을 통해 신뢰를 구축하는 경우 클러스터를 생성할 때 도메인에 보안 주체를 조인할 수 있는 권한이 있는 Active Directory 사용자 이름과 암호를 제공해야 합니다.
+ 동일한 이름의 Kerberos 영역 간에는 교차 영역 신뢰를 구축할 수 없습니다.
+ 교차 영역 신뢰는 명시적으로 구축되어야 합니다. 예를 들어, 클러스터 A와 클러스터 B가 모두 KDC와의 교차 영역 신뢰를 구축하는 경우 본질적으로는 서로를 신뢰하지 않으며 각자의 애플리케이션이 서로 인증하여 상호 작용할 수 없습니다.
+ 사용자 보안 주체의 자격 증명이 정확하게 일치하도록 KDC를 독립적으로 유지 관리하고 조정해야 합니다.

## 외부 KDC
<a name="emr-kerberos-extkdc-summary"></a>

외부 KDC가 있는 구성은 Amazon EMR 5.20.0 이상에서 지원됩니다.
+ [외부 KDC - MIT KDC](#emr-kerberos-extkdc-mit-summary)
+ [외부 KDC - 서로 다른 클러스터의 프라이머리 노드](#emr-kerberos-extkdc-cluster-summary)
+ [외부 KDC 클러스터 - Active Directory 교차 영역 신뢰가 있는 다른 클러스터의 KDC](#emr-kerberos-extkdc-ad-trust-summary)

### 외부 KDC - MIT KDC
<a name="emr-kerberos-extkdc-mit-summary"></a>

이 구성은 하나 이상의 EMR 클러스터가 MIT KDC 서버에서 정의되고 유지 관리되는 보안 주체를 사용할 수 있도록 허용합니다.

![\[Amazon EMR클러스터 architecture with Kerberos realm, showing master, core, and task nodes.\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ManagementGuide/images/kerb-external-kdc.png)


**장점**
+ 보안 주체 관리는 단일 KDC로 통합됩니다.
+ 여러 클러스터가 동일한 Kerberos 영역에서 동일한 KDC를 사용할 수 있습니다. 자세한 내용은 [동일한 KDC에서 여러 클러스터를 사용하기 위한 요구 사항](#emr-kerberos-multi-kdc) 단원을 참조하십시오.
+ Kerberos 인증을 사용하는 클러스터의 프라이머리 노드에는 KDC 유지 관리와 관련된 성능 부담이 없습니다.

**고려 사항 및 제한 사항**
+ 각 사용자에 대한 HDFS 디렉터리와 함께 KDC 사용자 보안 주체에 해당하는 Kerberos 인증을 사용하는 클러스터 프라이머리 노드의 EC2 인스턴스에서 Linux 사용자를 생성해야 합니다.
+ 사용자 보안 주체는 EC2 프라이빗 키 파일 및 `kinit` 자격 증명을 사용하여 SSH를 사용하는 Kerberos 인증을 사용하는 클러스터에 연결해야 합니다.
+ Kerberos 기반 EMR 클러스터의 각 노드에는 KDC에 대한 네트워크 경로가 있어야 합니다.
+ Kerberos 인증을 사용하는 클러스터의 각 노드는 외부 KDC에게 인증에 대한 책임을 부여하므로 KDC 구성은 클러스터 성능에 영향을 미칩니다. KDC 서버의 하드웨어를 구성할 때 동시에 지원할 최대 Amazon EMR 노드 수를 고려합니다.
+ 클러스터 성능은 Kerberos 클러스터의 노드와 KDC 간의 네트워크 지연 시간에 따라 다릅니다.
+ 상호 의존성으로 인해 문제 해결이 더 어려울 수 있습니다.

### 외부 KDC - 서로 다른 클러스터의 프라이머리 노드
<a name="emr-kerberos-extkdc-cluster-summary"></a>

이 구성은 KDC가 EMR 클러스터의 프라이머리 노드에 있다는 점을 제외하고는 위의 외부 MIT KDC 구현과 거의 동일합니다. 자세한 내용은 [클러스터 전용 KDC(프라이머리 노드의 KDC)](#emr-kerberos-localkdc-summary) 및 [자습서: Active Directory 도메인과 교차 영역 신뢰 구성](emr-kerberos-cross-realm.md) 섹션을 참조하세요.

![\[Diagram of Amazon EMR clusters with Kerberos realm, showing master and core nodes.\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ManagementGuide/images/kerb-external-cluster-kdc.png)


**장점**
+ 보안 주체 관리는 단일 KDC로 통합됩니다.
+ 여러 클러스터가 동일한 Kerberos 영역에서 동일한 KDC를 사용할 수 있습니다. 자세한 내용은 [동일한 KDC에서 여러 클러스터를 사용하기 위한 요구 사항](#emr-kerberos-multi-kdc) 단원을 참조하십시오.

**고려 사항 및 제한 사항**
+ 각 사용자에 대한 HDFS 디렉터리와 함께 KDC 사용자 보안 주체에 해당하는 Kerberos 인증을 사용하는 클러스터 프라이머리 노드의 EC2 인스턴스에서 Linux 사용자를 생성해야 합니다.
+ 사용자 보안 주체는 EC2 프라이빗 키 파일 및 `kinit` 자격 증명을 사용하여 SSH를 사용하는 Kerberos 인증을 사용하는 클러스터에 연결해야 합니다.
+ 각 EMR 클러스터의 각 노드에는 KDC에 대한 네트워크 경로가 있어야 합니다.
+ Kerberos 인증을 사용하는 클러스터의 각 Amazon EMR 노드는 외부 KDC에게 인증에 대한 책임을 부여하므로 KDC 구성은 클러스터 성능에 영향을 미칩니다. KDC 서버의 하드웨어를 구성할 때 동시에 지원할 최대 Amazon EMR 노드 수를 고려합니다.
+ 클러스터 성능은 클러스터의 노드와 KDC 간의 네트워크 지연 시간에 따라 다릅니다.
+ 상호 의존성으로 인해 문제 해결이 더 어려울 수 있습니다.

### 외부 KDC 클러스터 - Active Directory 교차 영역 신뢰가 있는 다른 클러스터의 KDC
<a name="emr-kerberos-extkdc-ad-trust-summary"></a>

이 구성에서는 먼저 Active Directory와의 단방향 교차 영역 신뢰가 있는 클러스터 전용 KDC를 통해 클러스터를 생성합니다. 자세한 자습서는 [자습서: Active Directory 도메인과 교차 영역 신뢰 구성](emr-kerberos-cross-realm.md)를 참조하세요. 그런 다음 추가 클러스터를 시작하고 외부 KDC의 신뢰를 가진 클러스터 KDC를 참조합니다. 예제는 [Active Directory 교차 영역 신뢰가 있는 외부 클러스터 KDC](emr-kerberos-config-examples.md#emr-kerberos-example-extkdc-ad-trust) 섹션을 참조하세요. 이를 통해 외부 KDC를 사용하는 각 Amazon EMR 클러스터가 Microsoft Active Directory 도메인에서 정의되고 유지 관리되는 보안 주체를 인증할 수 있습니다.

![\[Amazon EMR clusters with Kerberos authentication and Active Directory integration diagram.\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ManagementGuide/images/kerb-external-ad-trust-kdc.png)


**장점**
+ 보안 주체 관리는 Active Directory 도메인에 통합됩니다.
+ Amazon EMR은 Active Directory 영역에 조인하므로 Active Directory 사용자에 해당하는 Linux 사용자를 생성할 필요가 없습니다. 각 사용자에 대해 HDFS 디렉터리를 여전히 생성해야 합니다.
+ 여러 클러스터가 동일한 Kerberos 영역에서 동일한 KDC를 사용할 수 있습니다. 자세한 내용은 [동일한 KDC에서 여러 클러스터를 사용하기 위한 요구 사항](#emr-kerberos-multi-kdc) 단원을 참조하십시오.
+ Active Directory 도메인의 사용자 보안 주체는 EC2 프라이빗 키 파일 없이 `kinit` 자격 증명을 사용하여 Kerberos 인증을 사용하는 클러스터에 액세스할 수 있습니다. 따라서 클러스터 사용자 간에 프라이빗 키 파일을 공유할 필요가 없습니다.
+ 하나의 Amazon EMR 프라이머리 노드만 KDC를 유지 관리할 책임이 있으므로 KDC와 Active Directory 간의 교차 영역 신뢰에 대한 Active Directory 보안 인증을 통해 해당 클러스터만 생성해야 합니다.

**고려 사항 및 제한 사항**
+ 각 EMR 클러스터의 각 노드에는 KDC 및 Active Directory 도메인 컨트롤러에 대한 네트워크 경로가 있어야 합니다.
+ 각 Amazon EMR 노드는 외부 KDC에게 인증에 대한 책임을 부여하므로 KDC 구성은 클러스터 성능에 영향을 미칩니다. KDC 서버의 하드웨어를 구성할 때 동시에 지원할 최대 Amazon EMR 노드 수를 고려합니다.
+ 클러스터 성능은 클러스터의 노드와 KDC 서버 간의 네트워크 지연 시간에 따라 다릅니다.
+ 상호 의존성으로 인해 문제 해결이 더 어려울 수 있습니다.

## 동일한 KDC에서 여러 클러스터를 사용하기 위한 요구 사항
<a name="emr-kerberos-multi-kdc"></a>

여러 클러스터가 동일한 Kerberos 영역에서 동일한 KDC를 사용할 수 있습니다. 그러나 클러스터가 동시에 실행되는 경우 충돌하는 Kerberos ServicePrincipal 이름을 사용하면 클러스터가 실패할 수 있습니다.

동일한 외부 KDC를 사용하는 동시 클러스터가 여러 개 있는 경우 클러스터가 서로 다른 Kerberos 영역을 사용하는지 확인합니다. 클러스터가 동일한 Kerberos 영역을 사용해야 하는 경우 클러스터가 서로 다른 서브넷에 있고 CIDR 범위가 겹치지 않는지 확인합니다.

# Amazon EMR에서 Kerberos 구성
<a name="emr-kerberos-configure"></a>

이 섹션에서는 일반적인 아키텍처로 Kerberos를 설정하기 위한 구성 세부 정보와 예제를 제공합니다. 선택하는 아키텍처에 관계없이 구성 기본 사항은 동일하며 3단계로 수행됩니다. 외부 KDC를 사용하거나 교차 영역 신뢰를 설정하는 경우 인바운드 및 아웃바운드 Kerberos 트래픽을 허용하는 관련 보안 그룹의 구성을 포함하여 클러스터의 모든 노드에 외부 KDC에 대한 네트워크 경로가 있는지 확인해야 합니다.

## 1단계: Kerberos 속성을 통한 보안 구성 생성
<a name="emr-kerberos-step1-summary"></a>

보안 구성에서는 Kerberos KDC에 대한 세부 정보를 지정하며, 클러스터를 생성할 때마다 Kerberos 구성을 다시 사용하도록 허용합니다. Amazon EMR 콘솔 AWS CLI, 또는 EMR API를 사용하여 보안 구성을 생성할 수 있습니다. 보안 구성에는 암호화 같은 기타 보안 옵션들도 포함될 수 있습니다. 클러스터를 생성할 때 보안 구성을 생성하고 지정하는 방법에 대한 자세한 내용은 [보안 구성을 사용하여 Amazon EMR 클러스터 보안 설정](emr-security-configurations.md) 섹션을 참조하세요. 보안 구성의 Kerberos 속성에 대한 자세한 내용은 [보안 구성에 대한 Kerberos 설정](emr-kerberos-configure-settings.md#emr-kerberos-security-configuration) 섹션을 참조하세요.

## 2단계: 클러스터 생성 및 클러스터별 Kerberos 속성 지정
<a name="emr-kerberos-step2-summary"></a>

클러스터를 생성할 때 클러스터별 Kerberos 옵션과 함께 Kerberos 보안 구성을 지정합니다. Amazon EMR 콘솔을 사용할 때 지정된 보안 구성과 호환되는 Kerberos 옵션만 사용할 수 있습니다. AWS CLI 또는 Amazon EMR API를 사용하는 경우 지정된 보안 구성과 호환되는 Kerberos 옵션을 지정해야 합니다. 예를 들어, CLI를 사용하여 클러스터를 생성할 때 교차 영역 신뢰에 대한 보안 주체 암호를 지정하고 지정된 보안 구성이 교차 영역 신뢰 파라미터로 구성되지 않은 경우, 오류가 발생합니다. 자세한 내용은 [클러스터에 대한 Kerberos 설정](emr-kerberos-configure-settings.md#emr-kerberos-cluster-configuration) 단원을 참조하십시오.

## 3단계: 클러스터 프라이머리 노드 구성
<a name="emr-kerberos-step3-summary"></a>

아키텍처 및 구현 요구 사항에 따라 클러스터에 추가적인 설정이 필요할 수 있습니다. 생성 후 또는 생성 프로세스 중에 단계 또는 부트스트랩 작업을 통해 설정할 수 있습니다.

SSH를 사용하여 클러스터에 연결하는 각 Kerberos 인증 사용자의 경우 해당 Kerberos 사용자에 해당하는 Linux 계정이 생성되어 있는지 확인해야 합니다. 사용자 보안 주체가 외부 KDC 또는 교차 영역 신뢰를 통해 Active Directory 도메인 컨트롤러에서 제공되면 Amazon EMR은 Linux 계정을 자동으로 생성합니다. Active Directory를 사용하지 않는 경우 Linux 사용자에 해당하는 각 사용자의 보안 주체를 생성해야 합니다. 자세한 내용은 [Kerberos 인증 HDFS 사용자 및 SSH 연결을 위한 Amazon EMR 클러스터 구성](emr-kerberos-configuration-users.md) 단원을 참조하십시오.

또한 각 사용자에게는 자체적으로 소유한 HDFS 사용자 디렉터리가 있어야 합니다. 또한 Kerberos 인증 사용자의 연결을 허용하려면 GSSAPI를 통해 SSH를 구성해야 합니다. GSSAPI는 프라이머리 노드에서 활성화되어야 하며 클라이언트 SSH 애플리케이션은 GSSAPI를 사용하도록 구성되어야 합니다. 자세한 내용은 [Kerberos 인증 HDFS 사용자 및 SSH 연결을 위한 Amazon EMR 클러스터 구성](emr-kerberos-configuration-users.md) 단원을 참조하십시오.

# Amazon EMR에서 Kerberos 보안 구성 및 클러스터 설정
<a name="emr-kerberos-configure-settings"></a>

Kerberos 인증을 사용하는 클러스터를 생성할 때 클러스터 고유의 Kerberos 속성과 함께 보안 구성을 지정합니다. 반드시 둘을 함께 구성해야 하며, 그렇지 않을 경우 오류가 발생합니다.

이 주제에서는 보안 구성 및 클러스터를 생성할 때 Kerberos에 사용할 수 있는 구성 파라미터의 개요를 제공합니다. 또한 범용 아키텍처에 호환 가능한 보안 구성 및 클러스터를 생성하기 위한 CLI 예제가 제공됩니다.

## 보안 구성에 대한 Kerberos 설정
<a name="emr-kerberos-security-configuration"></a>

Amazon EMR 콘솔 AWS CLI, 또는 EMR API를 사용하여 Kerberos 속성을 지정하는 보안 구성을 생성할 수 있습니다. 보안 구성에는 암호화 같은 기타 보안 옵션들도 포함될 수 있습니다. 자세한 내용은 [Amazon EMR 콘솔 또는를 사용하여 보안 구성 생성 AWS CLI](emr-create-security-configuration.md) 단원을 참조하십시오.

다음 참조를 사용하여 선택하는 Kerberos 아키텍처의 사용 가능한 보안 구성 설정을 파악합니다. Amazon EMR 콘솔 설정이 표시됩니다. 해당되는 CLI 옵션은 [를 사용하여 Kerberos 설정 지정 AWS CLI](emr-create-security-configuration.md#emr-kerberos-cli-parameters) 또는 [구성 예제](emr-kerberos-config-examples.md) 섹션을 참조하세요.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ManagementGuide/emr-kerberos-configure-settings.html)

## 클러스터에 대한 Kerberos 설정
<a name="emr-kerberos-cluster-configuration"></a>

Amazon EMR 콘솔 AWS CLI, 또는 EMR API를 사용하여 클러스터를 생성할 때 Kerberos 설정을 지정할 수 있습니다.

다음 참조를 사용하여 선택하는 Kerberos 아키텍처의 사용 가능한 클러스터 구성 설정을 파악합니다. Amazon EMR 콘솔 설정이 표시됩니다. 해당되는 CLI 옵션은 [구성 예제](emr-kerberos-config-examples.md) 섹션을 참조하세요.


| 파라미터 | 설명 | 
| --- | --- | 
|  Realm  |  클러스터의 Kerberos 영역 이름. Kerberos 명명 규칙에 따르면 이 이름은 도메인 이름과 동일하되, 대문자로 설정됩니다. 예를 들어, 도메인 `ec2.internal`에서는 영역 이름으로 `EC2.INTERNAL`을 사용합니다.  | 
|  KDC 관리자 암호  |  `kadmin` 또는 `kadmin.local`에서 클러스터 내에서 사용되는 암호. 이들은 Kerberos 보안 주체, 암호 정책 및 클러스터의 키 탭이 포함된 Kerberos V5 관리 시스템에 대한 명령줄 인터페이스입니다.  | 
|  교차 영역 신뢰 보안 주체 암호(옵션)  |  교차 영역 신뢰를 구축할 때 필요합니다. 교차 영역 보안 주체 암호는 영역 전반에서 동일해야 합니다. 강력한 암호를 사용하세요.  | 
|  Active Directory 도메인 조인 사용자(선택 사항)  |  교차 영역 신뢰에서 Active Directory를 사용할 때 필요합니다. 컴퓨터를 도메인에 조인할 수 있는 권한을 가진 Active Directory 계정의 사용자 로그인 이름입니다. Amazon EMR은 이 ID를 사용하여 클러스터를 도메인에 조인합니다. 자세한 내용은 [3단계: EMR 클러스터에서 도메인에 사용자 계정 추가](emr-kerberos-cross-realm.md#emr-kerberos-ad-users) 단원을 참조하십시오.  | 
|  Active Directory 도메인 조인 암호(선택 사항)  |  Active Directory 도메인 조인 사용자용 암호입니다. 자세한 내용은 [3단계: EMR 클러스터에서 도메인에 사용자 계정 추가](emr-kerberos-cross-realm.md#emr-kerberos-ad-users) 단원을 참조하십시오.  | 

# 구성 예제
<a name="emr-kerberos-config-examples"></a>

다음 예제에서는 일반적인 scenarios. AWS CLI commands에 대한 보안 구성 및 클러스터 구성을 간결하게 보여줍니다.

## 로컬 KDC
<a name="emr-kerberos-example-local-kdc"></a>

다음 명령은 프라이머리 노드에서 실행 중인 클러스터 전용 KDC를 통해 클러스터를 생성합니다. 클러스터의 추가 구성이 필요합니다. 자세한 내용은 [Kerberos 인증 HDFS 사용자 및 SSH 연결을 위한 Amazon EMR 클러스터 구성](emr-kerberos-configuration-users.md) 단원을 참조하십시오.

**보안 구성 생성**

```
aws emr create-security-configuration --name LocalKDCSecurityConfig \
--security-configuration '{"AuthenticationConfiguration": \
{"KerberosConfiguration": {"Provider": "ClusterDedicatedKdc",\
"ClusterDedicatedKdcConfiguration": {"TicketLifetimeInHours": 24 }}}}'
```

**클러스터 생성**

```
aws emr create-cluster --release-label emr-7.12.0 \
--instance-count 3 --instance-type m5.xlarge \
--applications Name=Hadoop Name=Hive --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=MyEC2Key \
--service-role EMR_DefaultRole \
--security-configuration LocalKDCSecurityConfig \
--kerberos-attributes Realm=EC2.INTERNAL,KdcAdminPassword=MyPassword
```

## Active Directory 교차 영역 신뢰가 있는 클러스터 전용 KDC
<a name="emr-kerberos-example-crossrealm"></a>

다음 명령은 Active Directory 도메인에 대한 교차 영역 신뢰를 포함한 프라이머리 노드에서 실행 중인 클러스터 전용 KDC를 통해 클러스터를 생성합니다. 클러스터 및 Active Directory의 추가 구성이 필요합니다. 자세한 내용은 [자습서: Active Directory 도메인과 교차 영역 신뢰 구성](emr-kerberos-cross-realm.md) 단원을 참조하십시오.

**보안 구성 생성**

```
aws emr create-security-configuration --name LocalKDCWithADTrustSecurityConfig \
--security-configuration '{"AuthenticationConfiguration": \
{"KerberosConfiguration": {"Provider": "ClusterDedicatedKdc", \
"ClusterDedicatedKdcConfiguration": {"TicketLifetimeInHours": 24, \
"CrossRealmTrustConfiguration": {"Realm":"AD.DOMAIN.COM", \
"Domain":"ad.domain.com", "AdminServer":"ad.domain.com", \
"KdcServer":"ad.domain.com"}}}}}'
```

**클러스터 생성**

```
aws emr create-cluster --release-label emr-7.12.0 \
--instance-count 3 --instance-type m5.xlarge --applications Name=Hadoop Name=Hive \
--ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=MyEC2Key \
--service-role EMR_DefaultRole --security-configuration KDCWithADTrustSecurityConfig \
--kerberos-attributes Realm=EC2.INTERNAL,KdcAdminPassword=MyClusterKDCAdminPassword,\
ADDomainJoinUser=ADUserLogonName,ADDomainJoinPassword=ADUserPassword,\
CrossRealmTrustPrincipalPassword=MatchADTrustPassword
```

## 다른 클러스터의 외부 KDC
<a name="emr-kerberos-example-extkdc-cluster"></a>

다음 명령은 다른 클러스터의 프라이머리 노드에 있는 클러스터 전용 KDC를 참조하여 보안 주체를 인증하는 클러스터를 생성합니다. 클러스터의 추가 구성이 필요합니다. 자세한 내용은 [Kerberos 인증 HDFS 사용자 및 SSH 연결을 위한 Amazon EMR 클러스터 구성](emr-kerberos-configuration-users.md) 단원을 참조하십시오.

**보안 구성 생성**

```
aws emr create-security-configuration --name ExtKDCOnDifferentCluster \
--security-configuration '{"AuthenticationConfiguration": \
{"KerberosConfiguration": {"Provider": "ExternalKdc", \
"ExternalKdcConfiguration": {"KdcServerType": "Single", \
"AdminServer": "MasterDNSOfKDCMaster:749", \
"KdcServer": "MasterDNSOfKDCMaster:88"}}}}'
```

**클러스터 생성**

```
aws emr create-cluster --release-label emr-7.12.0 \
--instance-count 3 --instance-type m5.xlarge \
--applications Name=Hadoop Name=Hive \
--ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=MyEC2Key \
--service-role EMR_DefaultRole --security-configuration ExtKDCOnDifferentCluster \
--kerberos-attributes Realm=EC2.INTERNAL,KdcAdminPassword=KDCOnMasterPassword
```

## Active Directory 교차 영역 신뢰가 있는 외부 클러스터 KDC
<a name="emr-kerberos-example-extkdc-ad-trust"></a>

다음 명령은 KDC가 없는 클러스터를 생성합니다. 해당 클러스터는 다른 클러스터의 프라이머리 노드에서 실행 중인 클러스터 전용 KDC를 참조하여 보안 주체를 인증합니다. 해당 KDC에는 Active Directory 도메인 컨트롤러와의 교차 영역 신뢰가 있습니다. KDC가 있는 프라이머리 노드에 추가 구성이 필요합니다. 자세한 내용은 [자습서: Active Directory 도메인과 교차 영역 신뢰 구성](emr-kerberos-cross-realm.md) 단원을 참조하십시오.

**보안 구성 생성**

```
aws emr create-security-configuration --name ExtKDCWithADIntegration \
--security-configuration '{"AuthenticationConfiguration": \
{"KerberosConfiguration": {"Provider": "ExternalKdc", \
"ExternalKdcConfiguration": {"KdcServerType": "Single", \
"AdminServer": "MasterDNSofClusterKDC:749", \
"KdcServer": "MasterDNSofClusterKDC.com:88", \
"AdIntegrationConfiguration": {"AdRealm":"AD.DOMAIN.COM", \
"AdDomain":"ad.domain.com", \
"AdServer":"ad.domain.com"}}}}}'
```

**클러스터 생성**

```
aws emr create-cluster --release-label emr-7.12.0 \
--instance-count 3 --instance-type m5.xlarge --applications Name=Hadoop Name=Hive \
--ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=MyEC2Key \
--service-role EMR_DefaultRole --security-configuration ExtKDCWithADIntegration \
--kerberos-attributes Realm=EC2.INTERNAL,KdcAdminPassword=KDCOnMasterPassword,\
ADDomainJoinUser=MyPrivilegedADUserName,ADDomainJoinPassword=PasswordForADDomainJoinUser
```

# Kerberos 인증 HDFS 사용자 및 SSH 연결을 위한 Amazon EMR 클러스터 구성
<a name="emr-kerberos-configuration-users"></a>

Amazon EMR은 클러스터에서 실행되는 애플리케이션에 대해 Kerberos 인증 클라이언트를 생성합니다(예: `hadoop` 사용자, `spark` 사용자 등). Kerberos를 사용하여 클러스터 프로세스에 대해 인증을 받은 사용자를 추가할 수도 있습니다. 인증된 사용자는 Kerberos 자격 증명을 사용하여 클러스터를 연결한 다음 애플리케이션으로 작업할 수 있습니다. 사용자가 클러스터에 대해 인증하려면 다음 구성이 필요합니다.
+ KDC의 Kerberos 보안 주체와 일치하는 Linux 계정이 클러스터에 있어야 합니다. Amazon EMR은 Active Directory와 통합되는 아키텍처에서 이 작업을 자동으로 수행합니다.
+ 각 사용자에 대해 프라이머리 노드에 HDFS 사용자 디렉터리를 생성하고 사용자에게 디렉터리에 대한 권한을 부여해야 합니다.
+ 프라이머리 노드에서 GSSAPI가 활성화되도록 SSH 서비스를 구성해야 합니다. 또한 사용자에게 GSSAPI가 활성화된 SSH 클라이언트가 있어야 합니다.

## 프라이머리 노드에 Linux 사용자 및 Kerberos 보안 주체 추가
<a name="emr-kerberos-configure-linux-kdc"></a>

Active Directory를 사용하지 않는 경우 클러스터 프라이머리 노드에서 Linux 계정을 만들고 이러한 Linux 사용자의 보안 주체를 KDC에 추가해야 합니다. 여기에는 프라이머리 노드의 KDC에 보안 주체가 포함되어 있습니다. 사용자 보안 주체 외에도 프라이머리 노드에서 실행 중인 KDC에는 로컬 호스트에 대한 보안 주체가 있어야 합니다.

아키텍처에 Active Directory 통합이 포함되어 있으면 로컬 KDC의 Linux 사용자 및 보안 주체(해당되는 경우)가 자동으로 생성됩니다. 이 단계를 건너뛸 수 있습니다. 자세한 내용은 [교차 영역 신뢰](emr-kerberos-options.md#emr-kerberos-crossrealm-summary) 및 [외부 KDC 클러스터 - Active Directory 교차 영역 신뢰가 있는 다른 클러스터의 KDC](emr-kerberos-options.md#emr-kerberos-extkdc-ad-trust-summary) 섹션을 참조하세요.

**중요**  
KDC는 프라이머리 노드가 종료되면 보안 주체 데이터베이스와 함께 손실되는데, 이는 프라이머리 노드에서 휘발성 스토리지를 사용하기 때문입니다. SSH 연결을 위해 사용자를 생성하는 경우 고가용성을 위해 구성된 외부 KDC로 교차 영역 신뢰를 구축하는 것이 좋습니다. 또는 SSH 연결을 위해 Linux 계정을 사용하여 사용자를 생성하는 경우 부트스트랩 작업 및 스크립트를 사용하여 계정 생성 과정을 자동화함으로써 새 클러스터 생성 시 이 과정이 반복될 수 있게 합니다.

클러스터를 생성한 후 또는 클러스터를 생성할 때 클러스터에 대한 단계를 제출하는 것이 사용자와 KDC 보안 주체를 추가할 수 있는 가장 쉬운 방법입니다. 또는 기본 `hadoop` 사용자로 EC2 키 페어를 사용하여 프라이머리 노드를 연결하고 명령을 실행할 수 있습니다. 자세한 내용은 [SSH를 사용하여 Amazon EMR 클러스터 프라이머리 노드에 연결](emr-connect-master-node-ssh.md) 단원을 참조하십시오.

다음 예제는 이미 존재하는 클러스터에 bash 스크립트 `configureCluster.sh`를 제출하여 클러스터 ID를 참조합니다. 스크립트는 Amazon S3에 저장됩니다.

```
aws emr add-steps --cluster-id <j-2AL4XXXXXX5T9> \
--steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\
Jar=s3://region.elasticmapreduce/libs/script-runner/script-runner.jar,\
Args=["s3://amzn-s3-demo-bucket/configureCluster.sh"]
```

다음 예제는 `configureCluster.sh` 스크립트의 내용을 보여줍니다. 또한 이 스크립트는 다음 섹션에서 설명하는 HDFS 사용자 디렉터리 생성 및 SSH용 GSSAPI 활성화를 처리합니다.

```
#!/bin/bash
#Add a principal to the KDC for the primary node, using the primary node's returned host name
sudo kadmin.local -q "ktadd -k /etc/krb5.keytab host/`hostname -f`"
#Declare an associative array of user names and passwords to add
declare -A arr
arr=([lijuan]=pwd1 [marymajor]=pwd2 [richardroe]=pwd3)
for i in ${!arr[@]}; do
    #Assign plain language variables for clarity
     name=${i} 
     password=${arr[${i}]}

     # Create a principal for each user in the primary node and require a new password on first logon
     sudo kadmin.local -q "addprinc -pw $password +needchange $name"

     #Add hdfs directory for each user
     hdfs dfs -mkdir /user/$name

     #Change owner of each user's hdfs directory to that user
     hdfs dfs -chown $name:$name /user/$name
done

# Enable GSSAPI authentication for SSH and restart SSH service
sudo sed -i 's/^.*GSSAPIAuthentication.*$/GSSAPIAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i 's/^.*GSSAPICleanupCredentials.*$/GSSAPICleanupCredentials yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
```

## 사용자 HDFS 디렉터리 추가
<a name="emr-kerberos-configure-HDFS"></a>

사용자가 클러스터에 로그인하여 Hadoop 작업을 실행할 수 있도록 하려면 Linux 계정에서 HDFS 사용자 디렉터리를 추가하고 각 사용자에게 디렉터리에 대한 소유권을 부여해야 합니다.

클러스터를 생성한 후 또는 클러스터를 생성할 때 클러스터에 대한 단계를 제출하는 것이 HDFS 디렉터리를 생성할 수 있는 가장 쉬운 방법입니다. 또는 기본 `hadoop` 사용자로 EC2 키 페어를 사용하여 프라이머리 노드를 연결하고 명령을 실행할 수 있습니다. 자세한 내용은 [SSH를 사용하여 Amazon EMR 클러스터 프라이머리 노드에 연결](emr-connect-master-node-ssh.md) 단원을 참조하십시오.

다음 예제는 이미 존재하는 클러스터에 bash 스크립트 `AddHDFSUsers.sh`를 제출하여 클러스터 ID를 참조합니다. 스크립트는 Amazon S3에 저장됩니다.

```
aws emr add-steps --cluster-id <j-2AL4XXXXXX5T9> \
--steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\
Jar=s3://region.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://amzn-s3-demo-bucket/AddHDFSUsers.sh"]
```

다음 예제는 `AddHDFSUsers.sh` 스크립트의 내용을 보여줍니다.

```
#!/bin/bash
# AddHDFSUsers.sh script

# Initialize an array of user names from AD, or Linux users created manually on the cluster
ADUSERS=("lijuan" "marymajor" "richardroe" "myusername")

# For each user listed, create an HDFS user directory
# and change ownership to the user

for username in ${ADUSERS[@]}; do
     hdfs dfs -mkdir /user/$username
     hdfs dfs -chown $username:$username /user/$username
done
```

## SSH용 GSSAPI 활성화
<a name="emr-kerberos-ssh-config"></a>

Kerberos 인증 사용자가 SSH를 사용하여 프라이머리 노드에 연결하려면 SSH 서비스에 활성화된 GSSAPI 인증이 있어야 합니다. GSSAPI를 활성화하려면 프라이머리 노드 명령줄에서 다음 명령을 실행하거나 단계를 사용하여 스크립트로 실행합니다. SSH를 재구성한 후에는 서비스를 다시 시작해야 합니다.

```
sudo sed -i 's/^.*GSSAPIAuthentication.*$/GSSAPIAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i 's/^.*GSSAPICleanupCredentials.*$/GSSAPICleanupCredentials yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
```

# SSH를 사용하여 Amazon EMR에서 Kerberos 클러스터에 연결
<a name="emr-kerberos-connect-ssh"></a>

이 섹션에서는 Kerberos 인증 사용자가 EMR 클러스터의 프라이머리 노드에 연결하는 단계를 보여줍니다.

SSH 연결에 사용되는 각 컴퓨터에는 SSH 클라이언트 및 Kerberos 클라이언트 애플리케이션이 설치되어 있어야 합니다. Linux 컴퓨터에는 기본적으로 포함되어 있을 가능성이 높습니다. 예를 들어, OpenSSH는 대부분의 Linux, Unix 및 macOS 운영 체제에 설치되어 있습니다. 명령줄에 **ssh**를 입력하여 SSH 클라이언트가 있는지 확인할 수 있습니다. 컴퓨터가 명령을 인식하지 못하는 경우 SSH 클라이언트를 설치하여 프라이머리 노드에 연결합니다. OpenSSH 프로젝트는 전체 SSH 도구 스위트의 무료 구현을 제공합니다. 자세한 내용은 [OpenSSH](http://www.openssh.org/) 웹 사이트를 참조하세요. Windows 사용자는 [PuTTY](http://www.chiark.greenend.org.uk/~sgtatham/putty/)와 같은 SSH 애플리케이션을 사용할 수 있습니다.

SSH 연결에 대한 자세한 내용은 [Amazon EMR 클러스터에 연결하기](emr-connect-master-node.md) 섹션을 참조하세요.

SSH는 Kerberos 클라이언트 인증에 GSSAPI를 사용하며, 클러스터 프라이머리 노드에서 SSH 서비스에 대해 GSSAPI 인증을 활성화해야 합니다. 자세한 내용은 [SSH용 GSSAPI 활성화](emr-kerberos-configuration-users.md#emr-kerberos-ssh-config) 단원을 참조하십시오. 또한 SSH 클라이언트는 GSSAPI도 사용해야 합니다.

다음 예제에서 *MasterPublicDNS*에는 클러스터 세부 정보 창에서 **요약** 탭의 **마스터 퍼블릭 DNS**에 나타나는 값을 사용합니다(예: *ec2-11-222-33-44.compute-1.amazonaws.com*).

## krb5.conf의 필수 조건(Active Directory 외)
<a name="emr-kerberos-conffile"></a>

Active Directory 통합 없이 구성을 사용할 때 SSH 클라이언트 및 Kerberos 클라이언트 애플리케이션 외에도 각 클라이언트 컴퓨터에는 클러스터 프라이머리 노드의 `/etc/krb5.conf` 파일과 일치하는 `/etc/krb5.conf` 파일의 복사본이 있어야 합니다.

**krb5.conf 파일을 복사하려면**

1. SSH를 사용하여 EC2 키 페어와 기본 `hadoop` 사용자(예:`hadoop@MasterPublicDNS`)를 사용하여 프라이머리 노드에 연결합니다. 자세한 지침은 [Amazon EMR 클러스터에 연결하기](emr-connect-master-node.md) 섹션을 참조하세요.

1. 프라이머리 노드에서 `/etc/krb5.conf` 파일의 콘텐츠를 복사합니다. 자세한 내용은 [Amazon EMR 클러스터에 연결하기](emr-connect-master-node.md) 단원을 참조하십시오.

1. 클러스터에 연결하는 각 클라이언트 컴퓨터에서 이전 단계에서 만든 사본을 기반으로 동일한 `/etc/krb5.conf` 파일을 생성합니다.

## Kinit 및 SSH 사용
<a name="emr-kerberos-kinit-ssh"></a>

사용자가 Kerberos 자격 증명을 사용하여 클라이언트 컴퓨터에서 연결할 때마다 먼저 사용자가 클라이언트 컴퓨터에서 사용자용 Kerberos 티켓을 갱신해야 합니다. 또한 SSH 클라이언트는 GSSAPI 인증을 사용하도록 구성되어야 합니다.

**SSH를 사용하여 Kerberos 기반 EMR 클러스터에 연결하려면**

1. 다음 예와 같이 `kinit`를 사용하여 Kerberos 티켓을 갱신합니다.

   ```
   kinit user1
   ```

1. 클러스터 전용 KDC 또는 Active Directory 사용자 이름으로 생성한 보안 주체와 함께 `ssh` 클라이언트를 사용합니다. 다음 예와 같이 GSSAPI 인증이 활성화되어 있는지 확인합니다.

   **예: Linux 사용자**

   `-K `옵션은 GSSAPI 인증을 지정합니다.

   ```
   ssh -K user1@MasterPublicDNS
   ```

   **예: Windows 사용자(PuTTY)**

   다음과 같이 세션에 대한 GSSAPI 인증 옵션이 활성화되어 있는지 확인합니다.  
![\[PuTTY Configuration window showing GSSAPI authentication options and library preferences.\]](http://docs.aws.amazon.com/ko_kr/emr/latest/ManagementGuide/images/kerb-gssapi-putty.png)

# 자습서: Amazon EMR을 사용하여 클러스터 전용 KDC 구성
<a name="emr-kerberos-cluster-kdc"></a>

이 주제에서는 클러스터 전용 *키 배포 센터(KDC)*를 사용하여 클러스터를 생성하고, 모든 클러스터 노드에서 수동으로 Linux 사용자 계정을 추가하며, 프라이머리 노드의 KDC에 Kerberos 보안 주체를 추가하고, 클라이언트 컴퓨터에 Kerberos 클라이언트를 설치하도록 보장하는 과정을 안내합니다.

Kerberos 및 KDC에 대한 Amazon EMR 지원에 대한 자세한 내용과 MIT Kerberos 설명서 링크는 [Amazon EMR을 통한 인증에 Kerberos 사용](emr-kerberos.md) 섹션을 참조하세요.

## 1단계: Kerberos 인증을 사용하는 클러스터 생성
<a name="emr-kerberos-clusterdedicated-cluster"></a>

1. Kerberos 인증을 사용하는 보안 구성을 생성합니다. 다음 예제에서는 보안 구성을 인라인 JSON 구조로 AWS CLI 지정하는를 사용하는 `create-security-configuration` 명령을 보여줍니다. 또한 로컬에 저장된 파일을 참조할 수 있습니다.

   ```
   aws emr create-security-configuration --name MyKerberosConfig \
   --security-configuration '{"AuthenticationConfiguration": {"KerberosConfiguration": 
   {"Provider": "ClusterDedicatedKdc", "ClusterDedicatedKdcConfiguration": {"TicketLifetimeInHours": 24}}}}'
   ```

1. 보안 구성을 참조하고 클러스터에 대해 Kerberos 속성을 설정하며 부트스트랩 작업을 사용하여 Linux 계정을 추가하는 클러스터를 생성합니다. 다음 예제는 AWS CLI를 사용하는 `create-cluster `명령을 보여줍니다. 이 명령은 위에서 생성한 보안 구성인 `MyKerberosConfig`를 참조합니다. 또한 부트스트랩 작업으로 간단한 스크립트 `createlinuxusers.sh`를 참조합니다. 클러스터 생성 전에 만들어 Amazon S3에 업로드합니다.

   ```
   aws emr create-cluster --name "MyKerberosCluster" \
   --release-label emr-7.12.0 \
   --instance-type m5.xlarge \
   --instance-count 3 \
   --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=MyEC2KeyPair \
   --service-role EMR_DefaultRole \
   --security-configuration MyKerberosConfig \
   --applications Name=Hadoop Name=Hive Name=Oozie Name=Hue Name=HCatalog Name=Spark \
   --kerberos-attributes Realm=EC2.INTERNAL,\
   KdcAdminPassword=MyClusterKDCAdminPwd \
   --bootstrap-actions Path=s3://amzn-s3-demo-bucket/createlinuxusers.sh
   ```

   다음 코드는 `createlinuxusers.sh` 스크립트의 내용을 보여줍니다(클러스터의 각 노드에 user1, user2 및 user3 추가). 다음 단계에서는 이들 사용자를 KDC 보안 주체로 추가합니다.

   ```
   #!/bin/bash
   sudo adduser user1
   sudo adduser user2
   sudo adduser user3
   ```

## 2단계: KDC에 보안 주체 추가, HDFS 사용자 디렉터리 생성 및 SSH 구성
<a name="emr-kerberos-clusterdedicated-KDC"></a>

프라이머리 노드에서 실행 중인 KDC는 로컬 호스트와 클러스터에서 생성한 각 사용자에 대해 보안 주체를 추가해야 합니다. 또한 클러스터를 연결하고 Hadoop 작업을 실행하기 위해 필요할 경우 각 사용자에 대해 HDFS 디렉터리를 생성할 수도 있습니다. 마찬가지로 Kerberos에서 필요한 GSSAPI 인증을 활성화하도록 SSH 서비스를 구성합니다. GSSAPI를 활성화한 후에는 SSH 서비스를 다시 시작합니다.

이러한 작업을 가장 간단하게 수행할 수 있는 방법은 클러스터에 하나의 단계를 제출하는 것입니다. 다음 예제는 이전 단계에서 생성한 클러스터에 bash 스크립트 `configurekdc.sh`를 제출하여 클러스터 ID를 참조합니다. 스크립트는 Amazon S3에 저장됩니다. 또는 EC2 키 페어를 사용해 프라이머리 노드를 연결하여 명령을 실행하거나 클러스터가 생성되는 동안 단계를 제출할 수도 있습니다.

```
aws emr add-steps --cluster-id <j-2AL4XXXXXX5T9> --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://myregion.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://amzn-s3-demo-bucket/configurekdc.sh"]
```

다음 코드는 `configurekdc.sh` 스크립트의 내용을 보여줍니다.

```
#!/bin/bash
#Add a principal to the KDC for the primary node, using the primary node's returned host name
sudo kadmin.local -q "ktadd -k /etc/krb5.keytab host/`hostname -f`"
#Declare an associative array of user names and passwords to add
declare -A arr
arr=([user1]=pwd1 [user2]=pwd2 [user3]=pwd3)
for i in ${!arr[@]}; do
    #Assign plain language variables for clarity
     name=${i} 
     password=${arr[${i}]}

     # Create principal for sshuser in the primary node and require a new password on first logon
     sudo kadmin.local -q "addprinc -pw $password +needchange $name"

     #Add user hdfs directory
     hdfs dfs -mkdir /user/$name

     #Change owner of user's hdfs directory to user
     hdfs dfs -chown $name:$name /user/$name
done

# Enable GSSAPI authentication for SSH and restart SSH service
sudo sed -i 's/^.*GSSAPIAuthentication.*$/GSSAPIAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i 's/^.*GSSAPICleanupCredentials.*$/GSSAPICleanupCredentials yes/' /etc/ssh/sshd_config
sudo systemctl restart sshd
```

추가한 사용자는 이제 SSH를 사용하여 클러스터에 연결할 수 있습니다. 자세한 내용은 [SSH를 사용하여 Amazon EMR에서 Kerberos 클러스터에 연결](emr-kerberos-connect-ssh.md) 단원을 참조하십시오.

# 자습서: Active Directory 도메인과 교차 영역 신뢰 구성
<a name="emr-kerberos-cross-realm"></a>

교차 영역 신뢰를 설정할 때 다른 Kerberos 영역의 보안 주체들(주로 사용자들)이 EMR 클러스터의 애플리케이션 구성 요소에 대해 인증을 할 수 있도록 허용합니다. 클러스터 전용 *키 배포 센터(KDC)*는 두 KDC에 모두 존재하는 *교차 영역 보안 주체*를 사용하여 다른 KDC와 신뢰 관계를 구축합니다. 보안 주체의 이름과 암호가 정확하게 일치합니다.

교차 영역 신뢰를 위해서는 두 KDC가 네트워크를 통해 상호 연결되고 상대의 도메인 이름을 확인할 수 있어야 합니다. 아래에는 EC2 인스턴스로 실행 중인 Microsoft AD 도메인 컨트롤러와 교차 영역 신뢰 관계를 구축하기 위한 단계와 함께 필요한 연결 및 도메인 이름 확인을 제공하는 네트워크 설정의 예가 나와 있습니다. KDC 간에 필요한 네트워크 트래픽을 허용하는 모든 네트워크 설정이 허용됩니다.

선택적으로, 한 클러스터에서 KDC를 사용하여 Active Directory와의 교차 영역 신뢰를 구축한 후 다른 보안 구성을 사용하여 첫 번째 클러스터의 KDC를 외부 KDC로 참조하는 다른 클러스터를 생성할 수 있습니다. 보안 그룹 및 클러스터 설정의 예는 [Active Directory 교차 영역 신뢰가 있는 외부 클러스터 KDC](emr-kerberos-config-examples.md#emr-kerberos-example-extkdc-ad-trust) 섹션을 참조하세요.

Kerberos 및 KDC에 대한 Amazon EMR 지원에 대한 자세한 내용과 MIT Kerberos 설명서 링크는 [Amazon EMR을 통한 인증에 Kerberos 사용](emr-kerberos.md) 섹션을 참조하세요.

**중요**  
Amazon EMR은 와의 교차 영역 신뢰를 지원하지 않습니다 AWS Directory Service for Microsoft Active Directory.

[1단계: VPC 및 서브넷 설정](#emr-kerberos-ad-network)

[2단계: Active Directory 도메인 컨트롤러 시작 및 설치](#emr-kerberos-ad-dc)

[3단계: EMR 클러스터에서 도메인에 사용자 계정 추가](#emr-kerberos-ad-users)

[4단계: Active Directory 도메인 컨트롤러에서 인바운드 신뢰 구성](#emr-kerberos-ad-configure-trust)

[5단계: DHCP 옵션 세트를 사용하여 Active Directory 도메인 컨트롤러를 VPC DNS 서버로 지정](#emr-kerberos-ad-DHCP)

[6단계: Kerberos 인증을 사용하는 EMR 클러스터 시작](#emr-kerberos-ad-cluster)

[7단계: Active Directory 계정에 대해 HDFS 사용자 생성 및 클러스터에서 설정](#emr-kerberos-ad-hadoopuser)

## 1단계: VPC 및 서브넷 설정
<a name="emr-kerberos-ad-network"></a>

다음 단계는 클러스터 전용 KDC가 Active Directory 도메인 컨트롤러에 연결되고 도메인 이름을 확인할 수 있도록 VPC 및 서브넷을 생성하는 방법을 보여줍니다. 이러한 단계에서는 DHCP 옵션 세트의 도메인 이름 서버로 Active Directory 도메인 컨트롤러를 참조하여 도메인 이름을 확인합니다. 자세한 내용은 [5단계: DHCP 옵션 세트를 사용하여 Active Directory 도메인 컨트롤러를 VPC DNS 서버로 지정](#emr-kerberos-ad-DHCP) 단원을 참조하십시오.

KDC와 Active Directory 도메인 컨트롤러는 서로의 도메인 이름을 확인할 수 있어야 합니다. 그래야만 Amazon EMR이 컴퓨터를 도메인에 조인하고 클러스터 인스턴스에서 해당되는 Linux 계정 및 SSH 파라미터를 자동으로 구성할 수 있습니다.

Amazon EMR이 도메인 이름을 확인할 수 없으면 Active Directory 도메인 컨트롤러의 IP 주소를 사용하여 신뢰 관계를 참조할 수 있습니다. 한편, Linux 계정을 수동으로 추가하고 클러스터 전용 KDC에 해당되는 보안 주체를 추가하고 SSH를 구성해야 합니다.

**VPC 및 서브넷을 설정하려면**

1. 단일 퍼블릭 서브넷이 포함된 Amazon VPC를 생성합니다. 자세한 내용은 *Amazon VPC 시작하기 안내서*에서 [1단계: VPC 생성](https://docs.aws.amazon.com/AmazonVPC/latest/GettingStartedGuide/getting-started-ipv4.html#getting-started-create-vpc)을 참조하세요.
**중요**  
Microsoft Active Directory 도메인 컨트롤러를 사용할 때는 모든 IPv4 주소의 길이가 9자 미만이 되도록(예: 10.0.0.0/16) EMR 클러스터용 CIDR 블록을 선택합니다. 이는 컴퓨터가 Active Directory 디렉터리에 조인할 때 클러스터 컴퓨터의 DNS 이름이 사용되기 때문입니다.는 더 긴 IP 주소로 인해 [DNS 이름이 15자를 초과할 수 있는 방식으로 IPv4 주소를 기반으로 DNS 호스트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-hostnames) 이름을 AWS 할당합니다. IPv4 Active Directory는 조인된 컴퓨터 이름을 15자로 제한하고 예상하지 못한 오류가 발생하지 않도록 긴 이름은 끝을 자릅니다.

1. VPC에 할당된 기본 DHCP 옵션 세트를 제거합니다. 자세한 내용은 [VPC가 아무런 DHCP 옵션도 사용하지 못하도록 변경](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html#DHCP_Use_No_Options)을 참조하세요. 그런 다음, DNS 서버로 Active Directory 도메인 컨트롤러를 지정하는 이름을 새로 추가합니다.

1. VPC에서 DNS 지원이 활성화되었는지, 즉 DNS 호스트 이름과 DNS 확인이 모두 활성화되었는지 확인합니다. 전환은 기본적으로 활성화되어 있습니다. 자세한 내용은 [VPC에 대한 DNS 지원 업데이트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating)를 참조하세요.

1. 기본 설정대로 VPC에 인터넷 게이트웨이가 연결되어 있는지 확인합니다. 자세한 내용은 [인터넷 게이트웨이 생성 및 연결](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#Add_IGW_Attach_Gateway)을 참조하세요.
**참고**  
이 예제에서는 VPC에 대해 새로운 도메인 컨트롤러를 설정하고 있기 때문에 인터넷 게이트웨이가 사용됩니다. 인터넷 게이트웨이가 애플리케이션에서 필요하지 않을 수 있습니다. 유일한 조건은 클러스터 전용 KDC가 Active Directory 도메인 컨트롤러에 액세스할 수 있어야 한다는 것입니다.

1. 사용자 지정 라우팅 테이블을 생성하고 인터넷 게이트웨이를 목표로 하는 루트를 추가한 다음, 서브넷에 이를 연결합니다. 자세한 내용은 [사용자 지정 라우팅 테이블 생성](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#Add_IGW_Routing)을 참조하세요.

1. 도메인 컨트롤러에서 EC2 인스턴스를 시작할 때는 RDP를 사용하여 연결할 수 있도록 정적 퍼블릭 IPv4 주소가 있어야 합니다. 가장 간단한 방법은 퍼블릭 IPv4 주소를 자동 할당하도록 서브넷을 구성하는 것입니다. 이는 서브넷이 생성될 때 기본 설정이 아닙니다. 자세한 내용은 [서브넷의 퍼블릭 IP 주소 지정 속성 수정](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip)을 참조하세요. 선택에 따라 인스턴스를 시작할 때 이 주소를 할당할 수 있습니다. 자세한 내용은 [인스턴스 시작 중 퍼블릭 IPv4 주소 할당](https://docs.aws.amazon.com/vpc/latest/userguide/using-instance-addressing.html#public-ip-addresses)을 참조하세요.

1. 할당을 완료하면 VPC 및 서브넷 ID를 기록해뒀다가 나중에 Active Directory 도메인 컨트롤러와 클러스터를 시작할 때 사용합니다.

## 2단계: Active Directory 도메인 컨트롤러 시작 및 설치
<a name="emr-kerberos-ad-dc"></a>

1. Microsoft Windows Server 2016 기반 AMI를 토대로 EC2 인스턴스를 시작합니다. m4.xlarge나 더 나은 인스턴스 유형을 사용하는 것이 좋습니다. 자세한 내용은 **Amazon EC2 사용 설명서의 [AWS Marketplace 인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/launch-marketplace-console.html)을 참조하세요.

1. EC2 인스턴스와 연관된 보안 그룹의 그룹 ID를 기록해 두세요. 나중에 [6단계: Kerberos 인증을 사용하는 EMR 클러스터 시작](#emr-kerberos-ad-cluster)에서 필요합니다. 여기서는 *sg-012xrlmdomain345*를 사용합니다. 또는 EMR 클러스터와, 이들 간에 트래픽을 허용하는 이 인스턴스에 대해 서로 다른 보안 그룹을 지정할 수 있습니다. 자세한 내용은 *Amazon EC2 사용 설명서*의 [Linux 인스턴스용 Amazon EC2 보안 그룹](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html)을 참조하세요.

1. RDP를 사용해 EC2 인스턴스에 연결합니다. 자세한 내용은 **Amazon EC2 사용 설명서의 [Windows 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html)을 참조하세요.

1. **서버 관리자**를 열고 해당 서버에서 Active Directory 도메인 서비스 역할을 설치 및 구성합니다. 서버를 도메인 컨트롤러로 승격하고 도메인 이름(이 예제에서는 `ad.domain.com`)을 할당합니다. 나중에 EMR 보안 구성 및 클러스터를 생성할 때 필요하기 때문에 도메인 이름을 적어둡니다. Active Directory를 처음 설정하는 경우 [Windows Server 2016에서 Active Directory(AD)를 설정하는 방법](https://ittutorials.net/microsoft/windows-server-2016/setting-up-active-directory-ad-in-windows-server-2016/)의 지침을 따를 수 있습니다.

   설정이 완료되면 인스턴스가 다시 시작됩니다.

## 3단계: EMR 클러스터에서 도메인에 사용자 계정 추가
<a name="emr-kerberos-ad-users"></a>

각 클러스터 사용자에 대해 Active Directory 사용자 및 컴퓨터에서 계정을 생성할 수 있도록 RDP를 Active Directory 도메인 컨트롤러에 추가합니다. 자세한 내용은 *Microsoft Learn* 사이트에서 [Create a User Account in Active Directory Users and Computers](https://technet.microsoft.com/en-us/library/dd894463(v=ws.10).aspx)를 참조하세요. 각 사용자의 **사용자 로그온 이름**을 적어둡니다. 나중에 클러스터를 구성할 때 필요하기 때문입니다.

뿐만 아니라, 컴퓨터를 도메인에 조인할 수 있는 충분한 권한을 가진 계정을 생성해야 합니다. 이 계정은 클러스터를 생성할 때 지정합니다. Amazon EMR은 이를 사용하여 클러스터 인스턴스를 도메인에 조인합니다. [6단계: Kerberos 인증을 사용하는 EMR 클러스터 시작](#emr-kerberos-ad-cluster)에서 이 계정과 암호를 지정합니다. 컴퓨터 조인 권한을 이 계정에 위임하려면 조인 권한을 가진 그룹을 생성한 다음, 이 그룹에 사용자를 할당하는 것이 좋습니다. 관련 지침은 *AWS Directory Service 관리 안내서*에서 [디렉터리 조인 권한 위임](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_join_privileges.html)을 참조하세요.

## 4단계: Active Directory 도메인 컨트롤러에서 인바운드 신뢰 구성
<a name="emr-kerberos-ad-configure-trust"></a>

아래의 명령 예제는 Active Directory에서 클러스터 전용 KDC와 단방향 및 비-전이 인바운드 영역 신뢰를 구축합니다. 이 예제에서는 클러스터의 영역은 `EC2.INTERNAL`입니다. *KDC-FQDN*을 KDC를 호스팅하는 Amazon EMR 프라이머리 노드에 대해 나열된 **퍼블릭 DNS** 이름으로 바꿉니다. `passwordt` 파라미터는 클러스터를 생성할 때 클러스터 **영역**과 함께 지정하는 **교차 영역 보안 주체 암호**를 지정합니다. 영역 이름은 해당 클러스터에 대한 `us-east-1`의 기본 도메인 이름에서 파생됩니다. `Domain`은 신뢰를 생성하고 있는 Active Directory 도메인으로, 일반적으로 소문자를 많이 사용합니다. 이 예에서는 `ad.domain.com`을 사용합니다.

관리자 권한으로 Windows 명령 프롬프트를 열고 다음 명령을 입력하여 Active Directory 도메인 컨트롤러에서 신뢰 관계를 생성합니다.

```
C:\Users\Administrator> ksetup /addkdc EC2.INTERNAL KDC-FQDN
C:\Users\Administrator> netdom trust EC2.INTERNAL /Domain:ad.domain.com /add /realm /passwordt:MyVeryStrongPassword
C:\Users\Administrator> ksetup /SetEncTypeAttr EC2.INTERNAL AES256-CTS-HMAC-SHA1-96
```

## 5단계: DHCP 옵션 세트를 사용하여 Active Directory 도메인 컨트롤러를 VPC DNS 서버로 지정
<a name="emr-kerberos-ad-DHCP"></a>

Active Directory 도메인 컨트롤러가 구성되면 VPC 내에서 이름 확인 시 도메인 이름 서버로 사용할 수 있도록 VPC를 구성해야 합니다. 이를 위해서 DHCP 옵션 세트를 연결합니다. **도메인 이름**을 클러스터의 도메인 이름으로 지정합니다. 예를 들어, 클러스터가 us-east-1에 있는 경우에는 `ec2.internal`, 다른 리전의 경우에는 `region.compute.internal`입니다. **도메인 이름 서버**에서 첫 번째 항목으로 Active Directory 도메인 컨트롤러(클러스터에서 연결이 가능해야 함)의 IP 주소를 지정한 다음 **AmazonProvidedDNS**(예를 들면 ***xx.xx.xx.xx*,AmazonProvidedDNS**)를 지정해야 합니다. 자세한 내용은 [DHCP 옵션 세트 변경](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html#DHCPOptions)을 참조하세요.

## 6단계: Kerberos 인증을 사용하는 EMR 클러스터 시작
<a name="emr-kerberos-ad-cluster"></a>

1. Amazon EMR에서 이전 단계에서 생성한 Active Directory 도메인 컨트롤러를 지정하는 보안 구성을 생성합니다. 아래에 명령 예제가 나와 있습니다. 도메인 `ad.domain.com`을 [2단계: Active Directory 도메인 컨트롤러 시작 및 설치](#emr-kerberos-ad-dc)에서 지정한 도메인 이름으로 대체합니다.

   ```
   aws emr create-security-configuration --name MyKerberosConfig \
   --security-configuration '{
     "AuthenticationConfiguration": {
       "KerberosConfiguration": {
         "Provider": "ClusterDedicatedKdc",
         "ClusterDedicatedKdcConfiguration": {
           "TicketLifetimeInHours": 24,
           "CrossRealmTrustConfiguration": {
             "Realm": "AD.DOMAIN.COM",
             "Domain": "ad.domain.com",
             "AdminServer": "ad.domain.com",
             "KdcServer": "ad.domain.com"
           }
         }
       }
     }
   }'
   ```

1. 다음 속성을 사용하여 클러스터를 생성합니다.
   + `--security-configuration` 옵션을 사용하여 생성한 보안 구성을 지정합니다. 이 예제에서는 *MyKerberosConfig*를 사용합니다.
   + `--ec2-attributes option`의 `SubnetId` 속성을 사용하여 [1단계: VPC 및 서브넷 설정](#emr-kerberos-ad-network)에서 생성한 서브넷을 지정합니다. 이 예제에서는 *step1-subnet*을 사용합니다.
   + `--ec2-attributes` 옵션의 `AdditionalMasterSecurityGroups` 및 `AdditionalSlaveSecurityGroups`를 사용하여 [2단계: Active Directory 도메인 컨트롤러 시작 및 설치](#emr-kerberos-ad-dc)의 AD 도메인 컨트롤러와 연결된 보안 그룹이 코어 및 태스크 노드뿐만 아니라 클러스터 프라이머리 노드와 연결되도록 지정합니다. 이 예제에서는 *sg-012xrlmdomain345*를 사용합니다.

   또한 `--kerberos-attributes`를 사용하여 다음과 같은 클러스터 고유의 Kerberos 속성을 지정합니다.
   + Active Directory 도메인 컨트롤러를 설정할 때 지정한 클러스터 영역
   + `passwordt`에서 [4단계: Active Directory 도메인 컨트롤러에서 인바운드 신뢰 구성](#emr-kerberos-ad-configure-trust)로 지정한 교차 영역 신뢰 보안 주체의 암호.
   + `KdcAdminPassword`는 클러스터 전용 KDC를 관리하는 데 사용할 수 있습니다.
   + [3단계: EMR 클러스터에서 도메인에 사용자 계정 추가](#emr-kerberos-ad-users)에서 생성한 컴퓨터 조인 권한을 가진 Active Directory 계정의 사용자 로그인 이름 및 암호.

   다음 예제는 Kerberos 인증을 사용하는 클러스터를 시작합니다.

   ```
   aws emr create-cluster --name "MyKerberosCluster" \
   --release-label emr-5.10.0 \
   --instance-type m5.xlarge \
   --instance-count 3 \
   --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=MyEC2KeyPair,\
   SubnetId=step1-subnet, AdditionalMasterSecurityGroups=sg-012xrlmdomain345,
   AdditionalSlaveSecurityGroups=sg-012xrlmdomain345\
   --service-role EMR_DefaultRole \
   --security-configuration MyKerberosConfig \
   --applications Name=Hadoop Name=Hive Name=Oozie Name=Hue Name=HCatalog Name=Spark \
   --kerberos-attributes Realm=EC2.INTERNAL,\
   KdcAdminPassword=MyClusterKDCAdminPwd,\
   ADDomainJoinUser=ADUserLogonName,ADDomainJoinPassword=ADUserPassword,\
   CrossRealmTrustPrincipalPassword=MatchADTrustPwd
   ```

## 7단계: Active Directory 계정에 대해 HDFS 사용자 생성 및 클러스터에서 설정
<a name="emr-kerberos-ad-hadoopuser"></a>

Active Directory와 신뢰 관계를 설정할 때 Amazon EMR은 각 Active Directory 계정에 대해 클러스터에서 Linux 사용자를 생성합니다. 예를 들어, Active Directory의 사용자 로그인 이름 `LiJuan`은 `lijuan`이라는 Linux 계정을 갖습니다. Active Directory 사용자 이름에는 대문자가 포함될 수 있지만 Linux는 Active Directory 대소문자를 인식하지 못합니다.

사용자가 클러스터에 로그인하여 Hadoop 작업을 실행할 수 있도록 하려면 Linux 계정에서 HDFS 사용자 디렉터리를 추가하고 각 사용자에게 디렉터리에 대한 소유권을 부여해야 합니다. 이를 위해서는 클러스터 단계로 Amazon S3에 저장된 스크립트를 실행하는 것이 좋습니다. 또는 프라이머리 노드의 명령줄에서 아래 스크립트의 명령을 실행할 수도 있습니다. 클러스터를 생성할 때 지정했던 EC2 키 페어를 사용하여 Hadoop 사용자로 SSH를 통해 프라이머리 노드를 연결합니다. 자세한 내용은 [Amazon EMR에서 SSH 자격 증명에 대해 EC2 키 페어 사용](emr-plan-access-ssh.md) 단원을 참조하십시오.

다음 명령을 실행하여 스크립트 *AddHDFSUsers.sh*를 실행하는 클러스터에 단계를 하나 추가합니다.

```
aws emr add-steps --cluster-id <j-2AL4XXXXXX5T9> \
--steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\
Jar=s3://region.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://amzn-s3-demo-bucket/AddHDFSUsers.sh"]
```

파일 *AddHDFSUsers.sh*의 내용은 다음과 같습니다.

```
#!/bin/bash
# AddHDFSUsers.sh script

# Initialize an array of user names from AD or Linux users and KDC principals created manually on the cluster
ADUSERS=("lijuan" "marymajor" "richardroe" "myusername")

# For each user listed, create an HDFS user directory
# and change ownership to the user

for username in ${ADUSERS[@]}; do
     hdfs dfs -mkdir /user/$username
     hdfs dfs -chown $username:$username /user/$username
done
```

### Hadoop 그룹에 매핑된 Active Directory 그룹
<a name="emr-kerberos-ad-group"></a>

Amazon EMR은 시스템 보안 서비스 대몬(daemon)(SSD)을 사용하여 Hadoop 그룹에 Active Directory 그룹을 매핑합니다. [SSH를 사용하여 Amazon EMR에서 Kerberos 클러스터에 연결](emr-kerberos-connect-ssh.md)에 설명된 대로 프라이머리 노드에 로그인한 후에 그룹 매핑을 확인하기 위해 `hdfs groups` 명령을 사용하여 클러스터에서 해당 Hadoop 사용자의 Hadoop 그룹에 Active Directory 계정이 속한 Active Directory 그룹이 매핑되었는지 확인할 수 있습니다. 또한 명령(예를 들면 `hdfs groups lijuan`)을 사용하여 하나 이상의 사용자 이름을 지정하는 방법으로 다른 사용자의 그룹 매핑을 확인할 수도 있습니다. 자세한 내용은 [Apache HDFS Commands Guide](https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#groups)의 [groups](https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html)를 참조하세요.