

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

# 자습서: 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) 단원을 참조하십시오.