기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Kerberos 인증 HDFS 사용자 및 SSH 연결을 위한 Amazon EMR 클러스터 구성
Amazon EMR은 클러스터에서 실행되는 애플리케이션에 대해 Kerberos 인증 클라이언트를 생성합니다(예: hadoop
사용자, spark
사용자 등). Kerberos를 사용하여 클러스터 프로세스에 대해 인증을 받은 사용자를 추가할 수도 있습니다. 인증된 사용자는 Kerberos 자격 증명을 사용하여 클러스터를 연결한 다음 애플리케이션으로 작업할 수 있습니다. 사용자가 클러스터에 대해 인증하려면 다음 구성이 필요합니다.
-
KDC의 Kerberos 보안 주체와 일치하는 Linux 계정이 클러스터에 있어야 합니다. Amazon EMR은 Active Directory와 통합되는 아키텍처에서 이 작업을 자동으로 수행합니다.
-
각 사용자에 대해 프라이머리 노드에 HDFS 사용자 디렉터리를 생성하고 사용자에게 디렉터리에 대한 권한을 부여해야 합니다.
-
프라이머리 노드에서 GSSAPI가 활성화되도록 SSH 서비스를 구성해야 합니다. 또한 사용자에게 GSSAPI가 활성화된 SSH 클라이언트가 있어야 합니다.
프라이머리 노드에 Linux 사용자 및 Kerberos 보안 주체 추가
Active Directory를 사용하지 않는 경우 클러스터 프라이머리 노드에서 Linux 계정을 만들고 이러한 Linux 사용자의 보안 주체를 KDC에 추가해야 합니다. 여기에는 프라이머리 노드의 KDC에 보안 주체가 포함되어 있습니다. 사용자 보안 주체 외에도 프라이머리 노드에서 실행 중인 KDC에는 로컬 호스트에 대한 보안 주체가 있어야 합니다.
아키텍처에 Active Directory 통합이 포함되어 있으면 로컬 KDC의 Linux 사용자 및 보안 주체(해당되는 경우)가 자동으로 생성됩니다. 이 단계를 건너뛸 수 있습니다. 자세한 내용은 교차 영역 신뢰 및 외부 KDC 클러스터 - Active Directory 교차 영역 신뢰가 있는 다른 클러스터의 KDC 단원을 참조하세요.
중요
KDC는 프라이머리 노드가 종료되면 보안 주체 데이터베이스와 함께 손실되는데, 이는 프라이머리 노드에서 휘발성 스토리지를 사용하기 때문입니다. SSH 연결을 위해 사용자를 생성하는 경우 고가용성을 위해 구성된 외부 KDC로 교차 영역 신뢰를 구축하는 것이 좋습니다. 또는 SSH 연결을 위해 Linux 계정을 사용하여 사용자를 생성하는 경우 부트스트랩 작업 및 스크립트를 사용하여 계정 생성 과정을 자동화함으로써 새 클러스터 생성 시 이 과정이 반복될 수 있게 합니다.
클러스터를 생성한 후 또는 클러스터를 생성할 때 클러스터에 대한 단계를 제출하는 것이 사용자와 KDC 보안 주체를 추가할 수 있는 가장 쉬운 방법입니다. 또는 기본 hadoop
사용자로 EC2 키 페어를 사용하여 프라이머리 노드를 연결하고 명령을 실행할 수 있습니다. 자세한 내용은 SSH를 사용하여 Amazon EMR 클러스터 프라이머리 노드에 연결 단원을 참조하십시오.
다음 예제는 이미 존재하는 클러스터에 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 디렉터리 추가
사용자가 클러스터에 로그인하여 Hadoop 작업을 실행할 수 있도록 하려면 Linux 계정에서 HDFS 사용자 디렉터리를 추가하고 각 사용자에게 디렉터리에 대한 소유권을 부여해야 합니다.
클러스터를 생성한 후 또는 클러스터를 생성할 때 클러스터에 대한 단계를 제출하는 것이 HDFS 디렉터리를 생성할 수 있는 가장 쉬운 방법입니다. 또는 기본 hadoop
사용자로 EC2 키 페어를 사용하여 프라이머리 노드를 연결하고 명령을 실행할 수 있습니다. 자세한 내용은 SSH를 사용하여 Amazon EMR 클러스터 프라이머리 노드에 연결 단원을 참조하십시오.
다음 예제는 이미 존재하는 클러스터에 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 활성화
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