本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:使用 Active Directory 域設定跨領域信任
當您設定跨領域信任時,您可以允許來自不同 Kerberos 領域的主體 (通常是使用者) 驗證EMR叢集上的應用程式元件。叢集專用金鑰分發中心 (KDC) KDC會使用存在於兩個 中的跨領域主體,建立彼此的信任關係KDCs。主體名稱和密碼完全相符。
跨領域信任要求 KDCs可以透過網路互相連接,並解析彼此的網域名稱。與執行 做為EC2執行個體的 Microsoft AD 網域控制器建立跨領域信任關係的步驟,以及提供必要連線和網域名稱解析的網路設定範例,如下所示。KDCs 可接受允許 之間所需網路流量的任何網路設定。
或者,在某個叢集KDC上使用 建立與 Active Directory 的跨領域信任之後,您可以使用不同的安全組態建立另一個叢集,將第一個叢集KDC上的 參考為外部 KDC。如需安全組態和叢集設定範例,請參閱 KDC 具有 Active Directory 跨領域信任的外部叢集。
如需 Amazon EMR支援 Kerberos 和 的詳細資訊KDC,以及 MIT Kerberos 文件的連結,請參閱 使用 Kerberos 與 Amazon 進行身分驗證 EMR。
重要
Amazon EMR 不支援跨領域信任 AWS Directory Service for Microsoft Active Directory。
步驟 2:啟動和安裝 Active Directory 域控制器
步驟 4:設定在 Active Directory 域控制器上的傳入信任
步驟 5:使用DHCP選項集將 Active Directory 網域控制器指定為VPCDNS伺服器
步驟 7:為 Active Directory 帳戶在叢集上建立HDFS使用者和設定許可
步驟 1:設定 VPC和 子網路
下列步驟示範如何建立 VPC和子網路,讓叢集專用 KDC 可以連線到 Active Directory 網域控制器並解析其網域名稱。在這些步驟中,透過在 DHCP選項集中將 Active Directory 網域控制器做為網域名稱伺服器來提供網域名稱解析。如需詳細資訊,請參閱步驟 5:使用DHCP選項集將 Active Directory 網域控制器指定為VPCDNS伺服器。
KDC 和 Active Directory 網域控制器必須能夠解析彼此的網域名稱。這可讓 Amazon EMR將電腦加入網域,並在叢集執行個體上自動設定對應的 Linux 帳戶和SSH參數。
如果 Amazon EMR 無法解析網域名稱,您可以使用 Active Directory 網域控制器的 IP 地址來參考信任。不過,您必須手動新增 Linux 帳戶、將對應的主體新增至叢集專用 KDC,以及設定 SSH。
設定 VPC和 子網路
-
建立VPC具有單一公有子網路的 Amazon。如需詳細資訊,請參閱《Amazon VPC入門指南》中的步驟 1:建立 VPC 。
重要
當您使用 Microsoft Active Directory 網域控制器時,請為EMR叢集選擇CIDR區塊,讓所有IPv4地址長度少於九個字元 (例如 10.0.0.0/16)。這是因為當電腦加入 Active Directory 目錄時,會使用叢集電腦DNS的名稱。 會根據IPv4地址 AWS 來指派DNS主機名稱,因為 IP 地址越長可能會導致DNS名稱超過 15 個字元。Active Directory 限制註冊加入電腦名稱為 15 個字元,而截斷較長的名稱可能會導致無法預測的錯誤。
-
移除指派給 的預設DHCP選項集VPC。如需詳細資訊,請參閱變更 VPC以使用無DHCP選項。稍後,您會新增新的 ,將 Active Directory 網域控制器指定為DNS伺服器。
-
確認 DNS支援已啟用,VPC也就是DNS主機名稱和DNS解析度都已啟用。預設為皆啟用。如需詳細資訊,請參閱更新 的DNS支援VPC。
-
確認您的 VPC 已連接網際網路閘道,這是預設值。如需詳細資訊,請參閱建立和連接網際網路閘道。
注意
此範例中使用網際網路閘道,因為您為 建立新的網域控制器VPC。您的應用程式可能不需要網際網路閘道。唯一的要求是叢集專用 KDC可以存取 Active Directory 網域控制器。
-
建立自訂路由表,新增以網際網路閘道為目標的路由,然後將其連接到您的子網路。如需詳細資訊,請參閱建立自訂路由表。
-
當您啟動網域控制器的EC2執行個體時,它必須具有靜態公有IPv4地址,才能使用 連線到它RDP。最簡單的方法是設定子網路以自動指派公有IPv4地址。這不是子網路建立時的預設設定。如需詳細資訊,請參閱修改子網路的公有IPv4定址屬性。您可以選擇在啟動執行個體時指派地址。如需詳細資訊,請參閱在執行個體啟動期間指派公有IPv4地址。
-
完成後,記下您的 VPC和子網路 IDs。您稍後啟動 Active Directory 網域控制站和叢集時,便可以使用。
步驟 2:啟動和安裝 Active Directory 域控制器
-
根據 Microsoft Windows Server 2016 Base 啟動EC2執行個體AMI。我們建議使用 m4.xlarge 或更好的執行個體類型。如需詳細資訊,請參閱《Amazon EC2使用者指南》中的啟動 AWS Marketplace 執行個體。
-
記下與EC2執行個體相關聯之安全群組的群組 ID。您需要它用於 步驟 6:啟動 Kerberized EMR叢集。我們使用
sg-012xrlmdomain345
。或者,您可以為EMR叢集和此執行個體指定不同的安全群組,以允許它們之間的流量。如需詳細資訊,請參閱《Amazon 使用者指南》中的 Linux 執行個體的 Amazon EC2安全群組。 EC2 -
使用 連線至EC2執行個體RDP。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的連線至 Windows 執行個體。
-
啟動伺服器管理員,以在伺服器上安裝和設定 Active Directory 域服務角色。將伺服器升級為網域控制站並指派網域名稱 (此處使用的範例是
)。請記下網域名稱,因為您稍後在建立EMR安全組態和叢集時需要它。如果您是第一次設定 Active Directory,可以遵循如何在 Windows Server 2016 中設定 Active Directory (AD)ad.domain.com
中的指示進行操作。 執行個體在您完成後會重新啟動。
步驟 3:將帳戶新增至EMR叢集的網域
RDP 到 Active Directory 網域控制器,以為每個叢集使用者在 Active Directory 使用者和電腦中建立帳戶。如需詳細資訊,請參閱 Microsoft 學習網站上的在 Active Directory 使用者和電腦中建立使用者帳戶
此外,建立具備足夠權限的帳戶,可將電腦加入域。您在建立叢集時指定此帳戶。Amazon EMR 使用它來將叢集執行個體加入網域。您會在 步驟 6:啟動 Kerberized EMR叢集 中指定此帳戶和其密碼。若要委派電腦加入權限給帳戶,建議您建立具備加入權限的群組,再將使用者指派給群組。如需說明,請參閱《AWS Directory Service 管理指南》中的委派目錄加入權限。
步驟 4:設定在 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 trustEC2.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 網域控制器指定為VPCDNS伺服器
現在已設定 Active Directory 網域控制器,您必須VPC將 設定為在 中將其用作名稱解析的網域名稱伺服器VPC。若要執行此作業,請連接DHCP選項集。將域名稱指定為您叢集的域名稱 – 例如,如果您的叢集位於 us-east-1 或其他區域的
,則指定 region
.compute.internalec2.internal
。對於網域名稱伺服器,您必須指定 Active Directory 網域控制站 (必須可從叢集連線) 的 IP 地址做為第一個項目,後面接著 AmazonProvidedDNS(例如,xx.xx.xx.xx
)AmazonProvidedDNS。如需詳細資訊,請參閱變更DHCP選項集。
步驟 6:啟動 Kerberized EMR叢集
-
在 Amazon 中EMR,建立安全組態,指定您在先前步驟中建立的 Active Directory 網域控制器。範例命令顯示如下:以您在
中指定的網域名稱取代 步驟 2:啟動和安裝 Active Directory 域控制器 網域。ad.domain.com
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
" } } } } }' -
使用下列屬性建立一個叢集:
-
使用
--security-configuration
選項來指定您建立的安全組態。我們在MyKerberosConfig
範例中使用 。 -
使用的
--ec2-attributes option
的SubnetId
屬性來指定您在 步驟 1:設定 VPC和 子網路 中建立的子網路。我們在step1-subnet
範例中使用 。 -
使用
--ec2-attributes
選項的AdditionalMasterSecurityGroups
和AdditionalSlaveSecurityGroups
,指定從 步驟 2:啟動和安裝 Active Directory 域控制器 和 AD 域控制器關聯的安全群組與叢集主節點、核心節點和任務節點關聯。我們在sg-012xrlmdomain345
範例中使用 。
使用
--kerberos-attributes
指定下列叢集特定的 Kerberos 屬性:-
您設定 Active Directory 網域控制站時指定的叢集領域。
-
您在
passwordt
中指定為 步驟 4:設定在 Active Directory 域控制器上的傳入信任 的跨域信任主體密碼。 -
KdcAdminPassword
可用來管理叢集專用 的 KDC。 -
您在 步驟 3:將帳戶新增至EMR叢集的網域 中建立具有電腦加入權限的 Active Directory 帳戶使用者登入名稱和密碼。
下列範例啟動 Kerberos 化叢集。
aws emr create-cluster --name "
MyKerberosCluster
" \ --release-label emr-5.10.0 \ --instance-typem5.xlarge
\ --instance-count3
\ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole
,KeyName=MyEC2KeyPair
,\ SubnetId=step1-subnet
, AdditionalMasterSecurityGroups=sg-012xrlmdomain345
, AdditionalSlaveSecurityGroups=sg-012xrlmdomain345
\ --service-role EMR_DefaultRole \ --security-configurationMyKerberosConfig
\ --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 會在叢集上為每個 Active Directory 帳戶EMR建立 Linux 使用者。例如,在 Active Directory 中的使用者登入名稱 LiJuan
擁有 lijuan
的 Linux 帳戶。Active Directory 使用者名稱可包含大寫字母,但 Linux 不會使用 Active Directory 的大小寫。
若要允許使用者登入叢集以執行 Hadoop 任務,您必須為其 Linux 帳戶新增HDFS使用者目錄,並授予每個使用者對其目錄的擁有權。若要執行此操作,建議您執行以叢集步驟儲存至 Amazon S3 的指令碼。或者,您可以執行下面的指令碼中的命令,其來自主節點的命令列。使用您在建立叢集時指定的EC2金鑰對,以 Hadoop 使用者SSH身分透過 連線到主要節點。如需詳細資訊,請參閱針對 Amazon 的SSH登入資料使用EC2金鑰對 EMR。
執行下列命令,將步驟新增至執行指令碼 的叢集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://amzn-s3-demo-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使用 System Security Services Daemon (SSD) 將 Active Directory 群組映射至 Hadoop 群組。若要確認群組映射,如 使用 SSH 連線至使用 Amazon 的 Kerberized 叢集 EMR 所述登入主節點後,您可以使用 hdfs
groups
命令,確認您 Active Directory 帳戶所屬的 Active Directory 群組已映射至叢集上對應 Hadoop 使用者的 Hadoop 群組。您也可以使用命令,例如 hdfs groups
,指定一個或多個使用者名稱,查看其他使用者的群組映射。如需詳細資訊,請參閱 Apache HDFS命令指南lijuan