

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

# 자습서: 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)를 참조하세요.