자습서: Active Directory 도메인과 교차 영역 신뢰 구성 - Amazon EMR

자습서: Active Directory 도메인과 교차 영역 신뢰 구성

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

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

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

Kerberos 및 KDC에 대한 Amazon EMR 지원에 대한 자세한 내용과 MIT Kerberos 설명서 링크는 Amazon EMR을 통한 인증에 Kerberos 사용 섹션을 참조하세요.

중요

Amazon EMR은 AWS Directory Service for Microsoft Active Directory를 사용하는 교차 영역 신뢰를 지원하지 않습니다.

1단계: VPC 및 서브넷 설정

2단계: Active Directory 도메인 컨트롤러 시작 및 설치

3단계: EMR 클러스터에서 도메인에 사용자 계정 추가

4단계: Active Directory 도메인 컨트롤러에서 인바운드 신뢰 구성

5단계: DHCP 옵션 세트를 사용하여 Active Directory 도메인 컨트롤러를 VPC DNS 서버로 지정

6단계: Kerberos 인증을 사용하는 EMR 클러스터 시작

7단계: Active Directory 계정에 대해 HDFS 사용자 생성 및 클러스터에서 설정

1단계: VPC 및 서브넷 설정

다음 단계는 클러스터 전용 KDC가 Active Directory 도메인 컨트롤러에 연결되고 도메인 이름을 확인할 수 있도록 VPC 및 서브넷을 생성하는 방법을 보여줍니다. 이러한 단계에서는 DHCP 옵션 세트의 도메인 이름 서버로 Active Directory 도메인 컨트롤러를 참조하여 도메인 이름을 확인합니다. 자세한 내용은 5단계: DHCP 옵션 세트를 사용하여 Active Directory 도메인 컨트롤러를 VPC DNS 서버로 지정 섹션을 참조하세요.

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

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

VPC 및 서브넷을 설정하려면
  1. 단일 퍼블릭 서브넷이 포함된 Amazon VPC를 생성합니다. 자세한 내용은 Amazon VPC 시작하기 안내서에서 1단계: VPC 생성을 참조하세요.

    중요

    Microsoft Active Directory 도메인 컨트롤러를 사용할 때는 모든 IPv4 주소의 길이가 9자 미만이 되도록(예: 10.0.0.0/16) EMR 클러스터용 CIDR 블록을 선택합니다. 이는 컴퓨터가 Active Directory 디렉터리에 조인할 때 클러스터 컴퓨터의 DNS 이름이 사용되기 때문입니다. AWS에서는 IP 주소가 길면 15자를 초과하는 DNS 이름을 생성하는 방식으로 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 도메인 컨트롤러와 클러스터를 시작할 때 사용합니다.

2단계: Active Directory 도메인 컨트롤러 시작 및 설치

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

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

  3. RDP를 사용해 EC2 인스턴스에 연결합니다. 자세한 내용은 Amazon EC2 Windows Instances용 사용 설명서에서 Windows 인스턴스 연결을 참조하세요.

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

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

3단계: EMR 클러스터에서 도메인에 사용자 계정 추가

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

뿐만 아니라, 컴퓨터를 도메인에 조인할 수 있는 충분한 권한을 가진 계정을 생성해야 합니다. 이 계정은 클러스터를 생성할 때 지정합니다. Amazon EMR은 이를 사용하여 클러스터 인스턴스를 도메인에 조인합니다. 6단계: Kerberos 인증을 사용하는 EMR 클러스터 시작에서 이 계정과 암호를 지정합니다. 컴퓨터 조인 권한을 이 계정에 위임하려면 조인 권한을 가진 그룹을 생성한 다음, 이 그룹에 사용자를 할당하는 것이 좋습니다. 관련 지침은 AWS Directory Service 관리 안내서에서 디렉터리 조인 권한 위임을 참조하세요.

4단계: Active Directory 도메인 컨트롤러에서 인바운드 신뢰 구성

아래의 명령 예제는 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 서버로 지정

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

6단계: Kerberos 인증을 사용하는 EMR 클러스터 시작

  1. Amazon EMR에서 이전 단계에서 생성한 Active Directory 도메인 컨트롤러를 지정하는 보안 구성을 생성합니다. 아래에 명령 예제가 나와 있습니다. 도메인 ad.domain.com2단계: Active Directory 도메인 컨트롤러 시작 및 설치에서 지정한 도메인 이름으로 대체합니다.

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

    • --security-configuration 옵션을 사용하여 생성한 보안 구성을 지정합니다. 이 예제에서는 MyKerberosConfig를 사용합니다.

    • --ec2-attributes optionSubnetId 속성을 사용하여 1단계: VPC 및 서브넷 설정에서 생성한 서브넷을 지정합니다. 이 예제에서는 step1-subnet을 사용합니다.

    • --ec2-attributes 옵션의 AdditionalMasterSecurityGroupsAdditionalSlaveSecurityGroups를 사용하여 2단계: Active Directory 도메인 컨트롤러 시작 및 설치의 AD 도메인 컨트롤러와 연결된 보안 그룹이 코어 및 태스크 노드뿐만 아니라 클러스터 프라이머리 노드와 연결되도록 지정합니다. 이 예제에서는 sg-012xrlmdomain345를 사용합니다.

    또한 --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

7단계: Active Directory 계정에 대해 HDFS 사용자 생성 및 클러스터에서 설정

Active Directory와 신뢰 관계를 설정할 때 Amazon EMR은 각 Active Directory 계정에 대해 클러스터에서 Linux 사용자를 생성합니다. 예를 들어 Active Directory의 사용자 로그인 이름 LiJuanlijuan이라는 Linux 계정을 갖습니다. Active Directory 사용자 이름에는 대문자가 포함될 수 있지만 Linux는 Active Directory 대소문자를 인식하지 못합니다.

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

다음 명령을 실행하여 스크립트 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://DOC-EXAMPLE-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 그룹

Amazon EMR은 시스템 보안 서비스 대몬(daemon)(SSD)을 사용하여 Hadoop 그룹에 Active Directory 그룹을 매핑합니다. SSH를 사용하여 Kerberos 인증을 사용하는 클러스터에 연결에 설명된 대로 프라이머리 노드에 로그인한 후에 그룹 매핑을 확인하기 위해 hdfs groups 명령을 사용하여 클러스터에서 해당 Hadoop 사용자의 Hadoop 그룹에 Active Directory 계정이 속한 Active Directory 그룹이 매핑되었는지 확인할 수 있습니다. 또한 명령(예를 들면 hdfs groups lijuan)을 사용하여 하나 이상의 사용자 이름을 지정하는 방법으로 다른 사용자의 그룹 매핑을 확인할 수도 있습니다. 자세한 내용은 Apache HDFS Commands Guidegroups를 참조하십시오.