教學課程:使用 Active Directory 域設定跨領域信任 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:使用 Active Directory 域設定跨領域信任

當您設定跨領域信任時,可以允許來自不同 Kerberos 範圍的主體 (通常是使用者) 對叢集上的應用程式元件進行驗證。EMR叢集專KDC用金鑰發佈中心 (KDC) 會使用同時存在於兩者中的跨領域主體,與另一個金鑰發佈中心建立信任關係。KDCs主體名稱和密碼完全相符。

跨領域信任要求可KDCs以透過網路互相連線,並解析彼此的網域名稱。下面提供與以執行個體身分EC2執行的 Microsoft AD 網域控制站建立跨領域信任關係的步驟,以及提供必要連線和網域名稱解析的範例網路設定。任何允許之間允許所需網絡流量的網絡設置都KDCs是可以接受的。

或者,在使用某個叢集KDC上的 Active Directory 建立跨領域信任之後,您可以使用不同的安全性組態建立另一個叢集,將第一個叢集KDC上的參照為外部KDC叢集。如需安全組態和叢集設定範例,請參閱 KDC具有作用中目錄跨領域信任的外部叢集

如需有關 Kerberos Amazon EMR 支援的詳細資訊KDC,以及 Kerberos 文件的連MIT結,請參閱。使用 Kerberos 透過 Amazon 進行身份驗證 EMR

重要

Amazon EMR 不支持跨領域信任 AWS Directory Service for Microsoft Active Directory.

步驟 1:設定VPC和子網路

步驟 2:啟動和安裝 Active Directory 域控制器

步驟 3:將帳戶新增至EMR叢集的網域

步驟 4:設定在 Active Directory 域控制器上的傳入信任

步驟 5:使用DHCP選項集將使用中目錄網域控制站指定為VPCDNS伺服器

步驟 6:啟動特殊化叢EMR集

步驟 7:建立HDFS使用者,並在叢集上設定使用中目錄帳戶的權限

步驟 1:設定VPC和子網路

下列步驟示範建立VPC和子網路,以便叢集專用KDC可以連線至 Active Directory 網域控制站並解析其網域名稱。在這些步驟中,網域名稱解析是藉由參照 Active Directory 網域控制站做為DHCP選項集中的網域名稱伺服器來提供。如需詳細資訊,請參閱步驟 5:使用DHCP選項集將使用中目錄網域控制站指定為VPCDNS伺服器

KDC和使用中目錄網域控制站必須能夠解析其他網域名稱。這可讓 Amazon EMR 將電腦加入網域,並在叢集執行個體上自動設定對應的 Linux 帳戶和SSH參數。

如果 Amazon EMR 無法解析網域名稱,您可以使用活動目錄網域控制站的 IP 位址參考信任。不過,您必須手動新增 Linux 帳戶、將對應的主體新增至叢集專用KDC,然後進行設定。SSH

若要設定VPC和子網路
  1. 使用單一公VPC有子網路建立 Amazon。如需詳細資訊,請參閱 Amazon VPC 入門指南VPC中的步驟 1:建立

    重要

    當您使用 Microsoft Active Directory 網域控制站時,請選擇EMR叢集的CIDR區塊,讓所有IPv4位址的長度都少於 9 個字元 (例如,10.0.0.0/16)。這是因為當電腦加入 Active Directory 目錄時,會使用叢集電腦的DNS名稱。 AWS 根據位IPv4址指派DNS主機名稱,使 IP 位址較長可能會導致DNS名稱長度超過 15 個字元。Active Directory 限制註冊加入電腦名稱為 15 個字元,而截斷較長的名稱可能會導致無法預測的錯誤。

  2. 移除指派給的預設DHCP選項集VPC。如需詳細資訊,請參閱變更 a VPC 以使用 No DHCP 選項。稍後,您會新增指定 Active Directory 網域控制站做為DNS伺服器的新控制站。

  3. 確認已啟用DNS支援VPC,也就是DNS主機名稱和DNS解析度都已啟用。預設為皆啟用。如需詳細資訊,請參DNS閱更新 VPC.

  4. 確認您VPC已連接網際網路閘道,這是預設值。如需詳細資訊,請參閱建立和連接網際網路閘道

    注意

    此範例中使用網際網路閘道,因為您正在為VPC. 您的應用程式可能不需要網際網路閘道。唯一的需求是叢集專用KDC可以存取使用中目錄網域控制站。

  5. 建立自訂路由表,新增以網際網路閘道為目標的路由,然後將其連接到您的子網路。如需詳細資訊,請參閱建立自訂路由表

  6. 當您啟動網域控制站的EC2執行個體時,它必須具有靜態公用IPv4位址,您才能使用RDP。最簡單的方法是將子網路設定為自動指派公用IPv4位址。這不是子網路建立時的預設設定。如需詳細資訊,請參閱修改子網路的公用IPv4定址屬性。您可以選擇在啟動執行個體時指派地址。如需詳細資訊,請參閱在執行個體啟動期間指派公用IPv4位址

  7. 完成後,請記下您的VPC和子網路IDs。您稍後啟動 Active Directory 網域控制站和叢集時,便可以使用。

步驟 2:啟動和安裝 Active Directory 域控制器

  1. 根據 Microsoft 視窗伺服器 2016 基礎版啟動EC2執行個體AMI。我們建議使用 m4.xlarge 或更好的執行個體類型。如需詳細資訊,請參閱啟動 AWS MarketplaceAmazon EC2 用戶指南中的實例。

  2. 記下與執行個體相關聯之安全性群組的群組 EC2 ID。您需要它用於 步驟 6:啟動特殊化叢EMR集。我們使用 sg-012xrlmdomain345。 或者,您可以為EMR叢集和此執行個體指定不同的安全群組,以允許它們之間的流量。如需詳細資訊,請參閱 Amazon EC2使用者指南中的適用於 Linux 執行個體的 Amazon EC2 安全群組

  3. 使用 Connect 至EC2執行個體RDP。如需詳細資訊,請參閱 Amazon EC2 使用者指南的連線到 Windows 執行個體

  4. 啟動伺服器管理員,以在伺服器上安裝和設定 Active Directory 域服務角色。將伺服器升級為網域控制站並指派網域名稱 (此處使用的範例是 ad.domain.com)。請記下網域名稱,因為您稍後在建立EMR安全性組態和叢集時需要它。如果您是第一次設定 Active Directory,可以遵循如何在 Windows Server 2016 中設定 Active Directory (AD) 中的指示進行操作。

    執行個體在您完成後會重新啟動。

步驟 3:將帳戶新增至EMR叢集的網域

RDP至使用中目錄網域控制站,以便在每個叢集使用者的使用中目錄使用者和電腦中建立帳戶。如需詳細資訊,請參閱 Microsoft 學習網站上的在 Active Directory 使用者和電腦中建立使用者帳戶。請記下每個使用者的 User logon name (使用者登入名稱)。您稍後在設定叢集時需要這些使用者登入名稱。

此外,建立具備足夠權限的帳戶,可將電腦加入域。您在建立叢集時指定此帳戶。Amazon EMR 使用它將叢集執行個體加入網域。您會在 步驟 6:啟動特殊化叢EMR集 中指定此帳戶和其密碼。若要委派電腦加入權限給帳戶,建議您建立具備加入權限的群組,再將使用者指派給群組。如需指示,請參閱中的 [委派目錄加入權限] AWS Directory Service 管理指南

步驟 4:設定在 Active Directory 域控制器上的傳入信任

下列範例命令會在 Active Directory 中建立信任,Active Directory 是具有叢集專用的單向、內送、非轉移的範圍信任。KDC我們用於叢集領域的範例為 EC2.INTERNAL。更換 KDC-FQDN 其中列出的 Amazon EMR 主節點的用DNS名稱託管KDC. passwordt 參數會指定 cross-realm principal password (跨域主體密碼),這是您在建立叢集時,連同叢集 realm (領域) 一起指定的項目。領域名稱衍生自叢集的 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選項集將使用中目錄網域控制站指定為VPCDNS伺服器

現在已設定 Active Directory 網域控制站,您必須將其設定VPC為使用它做為網域名稱伺服器,以便在您的VPC. 若要執行此操作,請附加DHCP選項集。將域名稱指定為您叢集的域名稱 – 例如,如果您的叢集位於 us-east-1 或其他區域的 region.compute.internal,則指定 ec2.internal。對於網域名稱伺服器,您必須指定 Active Directory 網域控制站的 IP 位址 (必須可從叢集存取) 做為第一個項目,接著是 AmazonProvidedDNS(例如,xx.xx.xx.xx, AmazonProvided DNS)。如需詳細資訊,請參閱變更DHCP選項集

步驟 6:啟動特殊化叢EMR集

  1. 在 Amazon 中EMR,建立一個安全組態,以指定您在先前步驟中建立的 Active Directory 網域控制站。範例命令顯示如下:以您在 ad.domain.com 中指定的網域名稱取代 步驟 2:啟動和安裝 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:建立HDFS使用者,並在叢集上設定使用中目錄帳戶的權限

在與活動目錄建立信任關係時,Amazon EMR 會為每個活動目錄帳戶在叢集上建立 Linux 使用者。例如,在 Active Directory 中的使用者登入名稱 LiJuan 擁有 lijuan 的 Linux 帳戶。Active Directory 使用者名稱可包含大寫字母,但 Linux 不會使用 Active Directory 的大小寫。

若要允許您的使用者登入叢集以執行 Hadoop 作業,您必須為其 Linux 帳HDFS戶新增使用者目錄,並授予每個使用者目錄的所有權。若要執行此操作,建議您執行以叢集步驟儲存至 Amazon S3 的指令碼。或者,您可以執行下面的指令碼中的命令,其來自主節點的命令列。使用您在建立叢集時指定的 EC2 key pair,以 Hadoop 使用者SSH身分連線至主要節點。如需詳細資訊,請參閱使用 EC2 key pair 作為SSH認證

執行下列命令,將步驟新增至執行指令碼的叢集中,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

Active Directory 群組映射至 Hadoop 群組

Amazon EMR 使用系統安全服務守護進程(SSD)將活動目錄組映射到 Hadoop 組。若要確認群組映射,如 用SSH來連線至 Kerberized 叢集 所述登入主節點後,您可以使用 hdfs groups 命令,確認您 Active Directory 帳戶所屬的 Active Directory 群組已映射至叢集上對應 Hadoop 使用者的 Hadoop 群組。您也可以使用命令,例如 hdfs groups lijuan,指定一個或多個使用者名稱,查看其他使用者的群組映射。如需詳細資訊,請參閱《Apache 指HDFS令指南》中的〈群組