Kerberos 인증 HDFS 사용자 및 SSH 연결을 위한 Amazon EMR 클러스터 구성 - Amazon EMR

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

Kerberos 인증 HDFS 사용자 및 SSH 연결을 위한 Amazon EMR 클러스터 구성

Amazon은 사용자, 사용자 등 클러스터에서 실행되는 애플리케이션에 대해 Kerberos 인증 hadoop spark 사용자 클라이언트를 EMR 생성합니다. Kerberos를 사용하여 클러스터 프로세스에 대해 인증을 받은 사용자를 추가할 수도 있습니다. 인증된 사용자는 Kerberos 자격 증명을 사용하여 클러스터를 연결한 다음 애플리케이션으로 작업할 수 있습니다. 사용자가 클러스터에 대해 인증하려면 다음 구성이 필요합니다.

  • 의 Kerberos 보안 주체와 일치하는 Linux 계정이 클러스터에 있어야 KDC 합니다. AmazonEMR은 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 구성된 외부를 사용하여 영역 간 신뢰를 설정하는 것이 좋습니다. 또는 Linux 계정을 사용하여 SSH 연결 사용자를 생성하는 경우 새 클러스터를 생성할 때 반복할 수 있도록 부트스트랩 작업 및 스크립트를 사용하여 계정 생성 프로세스를 자동화합니다.

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

다음 예제는 이미 존재하는 클러스터에 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 스크립트의 내용을 보여줍니다. 또한 스크립트는 다음 섹션에서 SSH다루는 HDFS 사용자 디렉터리 생성 및 에 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 디렉터리를 생성하는 가장 쉬운 방법입니다. 또는 EC2 키 페어를 기본 hadoop 사용자로 사용하여 기본 노드에 연결하여 명령을 실행할 수 있습니다. 자세한 내용은 를 사용하여 Amazon EMR 클러스터 기본 노드에 연결 SSH 단원을 참조하십시오.

다음 예제는 이미 존재하는 클러스터에 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

GSSAPI 에 대해 활성화 SSH

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