Tutorial: Configure a Cross-Realm Trust with an Active Directory Domain - Amazon EMR

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

Tutorial: Configure a Cross-Realm Trust with an Active Directory Domain

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

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

선택적으로, 한 클러스터에서 KDC를 사용하여 Active Directory와의 교차 영역 신뢰를 구축한 후 다른 보안 구성을 사용하여 첫 번째 클러스터의 KDC를 외부 KDC로 참조하는 다른 클러스터를 생성할 수 있습니다. 보안 그룹 및 클러스터 설정의 예는 External Cluster KDC with Active Directory Cross-Realm Trust 단원을 참조하십시오.

Kerberos 및 KDC에 대한 Amazon EMR 지원에 대한 자세한 내용과 MIT Kerberos 문서 링크 참조 Use Kerberos Authentication.

중요

Amazon EMR은 Microsoft Active Directory용 AWS 디렉터리 서비스(Enterprise Edition)를 사용하여 교차 영역 신뢰를 지원하지 않습니다.

Step 1: Set Up the VPC and Subnet

Step 2: Launch and Install the Active Directory Domain Controller

Step 3: Add User Accounts to the Domain for the EMR Cluster

Step 4: Configure an Incoming Trust on the Active Directory Domain Controller

Step 5: Use a DHCP Option Set to Specify the Active Directory Domain Controller as a VPC DNS Server

Step 6: Launch a Kerberized EMR Cluster

Step 7: Create HDFS Users and Set Permissions on the Cluster for Active Directory User Accounts

Step 1: Set Up the VPC and Subnet

다음 단계는 클러스터 전용 KDC가 Active Directory 도메인 컨트롤러에 연결되고 도메인 이름을 확인할 수 있도록 VPC 및 서브넷을 생성하는 방법을 보여줍니다. 이러한 단계에서는 DHCP 옵션 세트의 도메인 이름 서버로 Active Directory 도메인 컨트롤러를 참조하여 도메인 이름을 확인합니다. 자세한 정보는 Step 5: Use a DHCP Option Set to Specify the Active Directory Domain Controller as a VPC DNS Server 단원을 참조하십시오.

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

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

VPC 및 서브넷을 설정하려면

  1. 단일 퍼블릭 서브넷이 있는 Amazon VPC를 생성합니다. 자세한 내용은 1단계: VPC 생성 in the Amazon VPC 시작 안내서.

    중요

    Microsoft Active Directory 도메인 컨트롤러를 사용할 때는 모든 IPv4 주소의 길이가 9자 미만이 되도록(예: 10.0.0.0/16) EMR 클러스터용 CIDR 블록을 선택합니다. 왜냐하면 컴퓨터가 Active Directory 디렉터리를 조인할 때 클러스터 컴퓨터의 DNS 이름이 사용되기 때문입니다. AWS는 IP 주소의 길이가 길면 DNS 이름의 길이가 15자 이상이 될 수 있기 때문에 IPv4 주소를 기준으로 DNS 호스트 이름을 할당합니다. Active Directory는 조인된 컴퓨터 이름을 15자로 제한하고 예상하지 못한 오류가 발생하지 않도록 긴 이름은 끝을 자릅니다.

  2. VPC에 할당된 기본 DHCP 옵션 세트를 제거합니다. 자세한 내용은 VPC가 아무런 DHCP 옵션도 사용하지 못하도록 변경을 참조하십시오. 그런 다음, DNS 서버로 Active Directory 도메인 컨트롤러를 지정하는 이름을 새로 추가합니다.

  3. VPC에서 DNS 지원이 활성화되었는지, 즉 DNS 호스트 이름과 DNS 확인이 모두 활성화되었는지 확인합니다. 전환은 기본적으로 활성화되어 있습니다. 자세한 내용은 VPC에 대한 DNS 지원 업데이트를 참조하십시오.

  4. 기본 설정대로 VPC에 인터넷 게이트웨이가 연결되어 있는지 확인합니다. 자세한 내용은 인터넷 게이트웨이 생성 및 연결을 참조하십시오.

    참고

    이 예제에서는 VPC에 대해 새로운 도메인 컨트롤러를 설정하고 있기 때문에 인터넷 게이트웨이가 사용됩니다. 인터넷 게이트웨이가 애플리케이션에서 필요하지 않을 수 있습니다. 유일한 조건은 클러스터 전용 KDC가 Active Directory 도메인 컨트롤러에 액세스할 수 있어야 한다는 것입니다.

  5. 사용자 지정 라우팅 테이블을 생성하고 인터넷 게이트웨이를 목표로 하는 루트를 추가한 다음, 서브넷에 이를 연결합니다. 자세한 내용은 사용자 지정 라우팅 테이블 생성을 참조하십시오.

  6. 도메인 컨트롤러에서 EC2 인스턴스를 시작할 때는 RDP를 사용하여 연결할 수 있도록 정적 퍼블릭 IPv4 주소가 있어야 합니다. 가장 간단한 방법은 퍼블릭 IPv4 주소를 자동 할당하도록 서브넷을 구성하는 것입니다. 이는 서브넷이 생성될 때 기본 설정이 아닙니다. 자세한 내용은 서브넷의 퍼블릭 IP 주소 지정 속성 수정을 참조하십시오. 선택에 따라 인스턴스를 시작할 때 이 주소를 할당할 수 있습니다. 자세한 내용은 인스턴스 시작 시 퍼블릭 IPv4 주소 할당을 참조하십시오.

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

Step 2: Launch and Install the Active Directory Domain Controller

  1. Microsoft Windows Server 2016 기반 AMI를 토대로 EC2 인스턴스를 시작합니다. m4.xlarge나 더 나은 인스턴스 유형을 사용하는 것이 좋습니다. 자세한 내용은 AWS Marketplace 인스턴스 시작 in the Windows 인스턴스용 Amazon EC2 사용 설명서.

  2. EC2 인스턴스와 연관된 보안 그룹의 그룹 ID를 기록해 두십시오. 나중에 Step 6: Launch a Kerberized EMR Cluster에서 필요합니다. 우리는 sg-012xrlmdomain345또는 EMR 클러스터와, 이들 간에 트래픽을 허용하는 이 인스턴스에 대해 서로 다른 보안 그룹을 지정할 수 있습니다. 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서Linux 인스턴스에 대한 Amazon EC2 보안 그룹 단원을 참조하십시오.

  3. RDP를 사용해 EC2 인스턴스에 연결합니다. 자세한 내용은 Windows 인스턴스에 연결 in the Windows 인스턴스용 Amazon EC2 사용 설명서.

  4. 서버 관리자를 열고 해당 서버에서 Active Directory 도메인 서비스 역할을 설치 및 구성합니다. 서버를 도메인 컨트롤러로 승격하고 도메인 이름(이 예제에서는 ad.domain.com)을 할당합니다. 나중에 EMR 보안 구성 및 클러스터를 생성할 때 필요하기 때문에 도메인 이름을 적어둡니다. Active Directory 설정이 처음이라면 Windows Server 2016에서 Active Directory(AD)를 설정하는 방법의 지침을 따를 수 있습니다.

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

Step 3: Add User Accounts to the Domain for the EMR Cluster

각 클러스터 사용자에 대해 Active Directory 사용자 및 컴퓨터에서 사용자 계정을 생성할 수 있도록 RDP를 Active Directory 도메인 컨트롤러에 추가합니다. 자세한 지침은 Active Directory 사용자 및 컴퓨터에서 사용자 계정 생성을 참조하십시오. 각 사용자의 사용자 로그온 이름을 적어둡니다. 나중에 클러스터를 구성할 때 필요하기 때문입니다.

뿐만 아니라, 컴퓨터를 도메인에 조인할 수 있는 충분한 권한을 가진 사용자 계정을 생성해야 합니다. 클러스터를 생성할 때 이 계정을 지정하면 Amazon EMR이 이 ID를 사용하여 클러스터 인스턴스를 도메인에 조인합니다. Step 6: Launch a Kerberized EMR Cluster에서 이 계정과 암호를 지정합니다. 컴퓨터 조인 권한을 이 사용자 계정에 위임하려면 조인 권한을 가진 그룹을 생성한 다음, 이 그룹에 사용자를 할당하는 것이 좋습니다. 지침은 디렉토리 권한 위임 권한 in the AWS Directory Service Administration Guide.

Step 4: Configure an Incoming Trust on the Active Directory Domain Controller

아래의 명령 예제는 Active Directory에서 클러스터 전용 KDC와 단방향 및 비-전이 인바운드 영역 신뢰를 구축합니다. 클러스터의 영역을 위해 사용하는 예는 다음과 같습니다. EC2.INTERNAL. 대체 KDC-FQDN with the 공개 DNS 이름 목록에 Amazon EMR KDC 를 호스팅하는 마스터 노드 The 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

Step 5: Use a DHCP Option Set to Specify the Active Directory Domain Controller as a VPC DNS Server

Active Directory 도메인 컨트롤러가 구성되면 VPC 내에서 이름 확인 시 도메인 이름 서버로 사용할 수 있도록 VPC를 구성해야 합니다. 이를 위해서 DHCP 옵션 세트를 연결합니다. 도메인 이름을 클러스터의 도메인 이름으로 지정합니다. 예를 들어 클러스터가 us-east-1에 있는 경우에는 ec2.internal이고, 다른 리전의 경우에는 region.compute.internal입니다. 대상 도메인 이름 서버먼저 Active Directory 도메인 컨트롤러의 IP 주소를 첫 번째 항목으로 연결해야 합니다(클러스터에서 연결할 수 있어야 함) 아마조프로딕 예를 들어 xx.xx.xx.xx,아마조프로딕) ). 자세한 내용은 DHCP 옵션 세트 변경을 참조하십시오.

Step 6: Launch a Kerberized EMR Cluster

  1. Amazon EMR에서 이전 단계에서 생성한 Active Directory 도메인 컨트롤러를 지정하는 보안 구성을 생성합니다. 아래에 명령 예제가 나와 있습니다. 도메인 ad.domain.comStep 2: Launch and Install the Active Directory Domain Controller에서 지정한 도메인 이름으로 대체합니다.

    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" } } } } }'
  2. 다음 속성을 사용하여 클러스터를 생성합니다.

    • Use the --security-configuration option to specify the security configuration that you created. We use MyKerberosConfig in the example.

    • Use the SubnetId property of the --ec2-attributes option to specify the subnet that you created in Step 1: Set Up the VPC and Subnet. We use step1-subnet in the example.

    • Use the AdditionalMasterSecurityGroups and AdditionalSlaveSecurityGroups of the --ec2-attributes option to specify that the security group associated with the AD Domain Controller from Step 2: Launch and Install the Active Directory Domain Controller is associated with the cluster master node as well as core and task nodes. We use sg-012xrlmdomain345 in the example.

    또한 --kerberos-attributes를 사용하여 다음과 같은 클러스터 고유의 Kerberos 속성을 지정합니다.

    다음 예제는 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

Step 7: Create HDFS Users and Set Permissions on the Cluster for Active Directory User Accounts

Active Directory와 신뢰 관계를 설정할 때 Amazon EMR은 각 Active Directory 사용자 계정에 대해 클러스터에서 Linux 사용자를 생성합니다. 예를 들어, 사용자 로그온 이름은 LiJuan Active Directory에서 Linux 사용자 계정이 lijuan. Active Directory 사용자 이름은 대문자 문자를 포함할 수 있지만 Linux는 Active Directory 케이싱을 허용하지 않습니다.

사용자가 클러스터에 로그인하여 하둡 작업을 실행할 수 있도록 하려면 Linux 사용자 계정에서 HDFS 사용자 디렉터리를 추가하고 각 사용자에게 디렉터리에 대한 소유권을 부여해야 합니다. 이를 위해서는 클러스터 단계로서 Amazon S3에 저장된 스크립트를 실행하는 것이 좋습니다. 또는 마스터 노드의 명령줄에서 아래 스크립트의 명령을 실행할 수도 있습니다. 클러스터를 생성할 때 지정했던 EC2 키 페어를 사용하여 하둡 사용자로서 SSH를 통해 마스터 노드를 연결합니다. 자세한 정보는 Use an Amazon EC2 Key Pair for SSH Credentials 단원을 참조하십시오.

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

aws emr add-steps --cluster-id ClusterID \ --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\ Jar=s3://MyRegion.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://MyBucketPath/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

Active Directory Groups Mapped to Hadoop Groups

Amazon EMR은 시스템 보안 서비스 데몬(SSD)을 사용하여 Hadoop 그룹에 Active Directory 그룹을 매핑합니다. Using SSH to Connect to Kerberized Clusters에 설명된 대로 마스터 노드에 로그인한 후에 그룹 매핑을 확인하기 위해 hdfs groups 명령을 사용하여 클러스터에서 해당 하둡 사용자의 하둡 그룹에 Active Directory 계정이 속한 Active Directory 그룹이 매핑되었는지 확인할 수 있습니다. 예를 들어, 명령과 함께 하나 이상의 사용자 이름을 지정하여 다른 사용자의 그룹 매핑을 확인할 수도 있습니다. hdfs groups lijuan. 자세한 내용은 그룹 in the Apache HDFS 명령 가이드.