本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AD Connector 入門
使用 AD Connector,您可以 AWS Directory Service 連線到現有的企業 Active Directory。 連線到現有目錄時,您的所有目錄資料都會保留在您的網域控制器上。 AWS Directory Service 不會複寫任何目錄資料。
AD Connector 事前準備
若要使用 AD Connector 連線到現有目錄,您需要準備下列項目:
- Amazon VPC
-
VPC 設定具有下列項目的 :
-
至少兩個子網路。每個子網路皆必須位於不同的可用區域。
-
VPC 必須透過虛擬私有網路 (VPN) 連線或 連線到現有網路 AWS Direct Connect。
-
VPC 必須有預設硬體租用。
AWS Directory Service 使用兩個VPC結構。組成目錄的EC2執行個體會在 AWS 您的帳戶之外執行,並由 管理 AWS。其使用兩種網路轉接器,
ETH0
和ETH1
。ETH0
是管理轉接器,而且位於您的帳戶外部。ETH1
則是建立於您的帳戶內部。以程式設計方式選擇目錄
ETH0
網路的管理 IP 範圍,以確保它不會與部署目錄VPC的 衝突。此 IP 範圍可以是以下任一對 (因為目錄在兩個子網路中運作):-
10.0.1.0/24 & 10.0.2.0/24
-
169.254.0.0/16
-
192.168.1.0/24 & 192.168.2.0/24
我們檢查 的第一個八位元組以避免衝突
ETH1
CIDR。如果其以 10 開頭,則我們選擇 192.168.0.0/16 VPC 搭配 192.168.1.0/24 和 192.168.2.0/24 子網路。如果第一個八位元組是 10 以外的任何其他八位元組,我們會選擇 10.0.0.0/16 VPC 搭配 10.0.1.0/24 和 10.0.2.0/24 子網路。選擇演算法不包含 上的路由VPC。因此,這種情況可能會導致 IP 路由衝突。
如需詳細資訊,請參閱 Amazon VPC使用者指南 中的下列主題:
如需 的詳細資訊 AWS Direct Connect,請參閱 AWS Direct Connect 使用者指南 。
-
- 現有 Active Directory
-
您需要使用 連線到現有的網路 Active Directory 網域。
注意
AD Connector 不支援單一標籤域
。 此 的功能層級 Active Directory 網域必須是
Windows Server 2003
或更高版本。AD Connector 也支援連線至託管在 Amazon EC2執行個體上的網域。注意
AD Connector 與 Amazon 網域加入功能搭配使用時,不支援唯讀EC2網域控制站 (RODC)。
- 服務帳戶
-
您必須具備在現有目錄中,已委派下列權限之服務帳戶的登入資料:
-
讀取使用者和群組 – 必要
-
將電腦聯結至網域 - 只有在使用無縫網域聯結和 時才需要 WorkSpaces
-
建立電腦物件 - 只有在使用無縫網域聯結和 時才需要 WorkSpaces
-
服務帳戶密碼應符合 AWS 密碼要求。 AWS 密碼應:
-
長度介於 8 到 128 個字元之間。
-
至少包含下列四個類別中的三個字元:
-
小寫字母 (a-z)
-
大寫字母 (A-Z)
-
數字 (0-9)
-
非英數字元 (~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)
-
-
如需詳細資訊,請參閱委派權限給您的服務帳戶。
注意
AD Connector 使用 Kerberos 對 AWS 應用程式進行身分驗證和授權。LDAP 僅用於使用者和群組物件查詢 (讀取操作)。對於LDAP交易,沒有任何內容是可變的,而且憑證不會以純文字傳遞。驗證由 AWS 內部服務處理,該服務使用 Kerberos 票證以使用者身分執行LDAP操作。
-
- 使用者權限
-
所有 Active Directory 使用者必須具有讀取自己屬性的許可。特別是下列屬性:
-
GivenName
-
SurName
-
Mail
-
SamAccountName
-
UserPrincipalName
-
UserAccountControl
-
MemberOf
在預設情況下,Active Directory 使用者具有讀取這些屬性的許可。不過,管理員可能隨時間變更這些許可,所以您在首次設定 AD Connector 前,可能需先確認您的使用者擁有這些讀取許可。
-
- IP 地址
-
在現有目錄中取得兩個DNS伺服器或網域控制器的 IP 地址。
AD Connector 會在連線至目錄時從這些伺服器取得
_ldap._tcp.
和<DnsDomainName>
_kerberos._tcp.
SRV 記錄,因此這些伺服器必須包含這些SRV記錄。AD Connector 會嘗試尋找同時提供 LDAP和 Kerberos 服務的常見網域控制器,因此這些SRV記錄必須至少包含一個常見網域控制器。如需SRV記錄的詳細資訊,請前往 Microsoft 上的SRV資源記錄<DnsDomainName>
TechNet。 - 子網路的連接埠
-
可讓 AD Connector 將目錄請求重新導向至您現有的 Active Directory 網域控制器,現有網路的防火牆必須CIDRs針對 Amazon 中的兩個子網路,對 開啟下列連接埠VPC。
-
TCP/UDP 53 - DNS
-
TCP/UDP 88 - Kerberos 身分驗證
-
TCP/UDP 389 - LDAP
您至少需要這些連接埠,AD Connector 才可連線到您的目錄。您特定的組態可能需要開啟其他連接埠。
如果您想要使用 AD Connector 和 Amazon WorkSpaces,則網域控制器的 DisableVLVSupportLDAP 屬性必須設為 0。這是網域控制器的預設設定。如果已啟用 DisableVLVSupportLDAP 屬性,AD Connector 將無法查詢目錄中的使用者。這可防止 AD Connector 使用 Amazon WorkSpaces。
注意
如果現有 的DNS伺服器或網域控制站伺服器 Active Directory 網域位於 內VPC,與這些伺服器相關聯的安全群組必須CIDRs對 中的兩個子網路開啟上述連接埠VPC。
如需其他連接埠需求,請參閱上的 AD 和 AD DS 連接埠需求
Microsoft 文件中)。 -
- Kerberos 預先驗證
-
您的使用者帳戶必須啟用 Kerberos 預先驗證。如需詳細的說明了解如何啟用此設定,請參閱 確定已啟用 Kerberos 預先驗證。如需此設定的一般資訊,請前往 http://technet.microsoft.com/en-us/library/cc961961.aspx
Microsoft TechNet. - 加密類型
-
AD Connector 在透過 Kerberos 對您的 Active Directory 網域控制站進行身分驗證時,支援下列加密類型:
-
AES-256-HMAC
-
AES-128-HMAC
-
RC4-HMAC
-
AWS IAM Identity Center 先決條件
如果您計劃將 IAM Identity Center 與 AD Connector 搭配使用,則需要確保下列項目為真:
-
AD Connector 是在 AWS 組織的管理帳戶中設定。
-
Identity IAM Center 的執行個體位於 AD Connector 設定的相同區域中。
如需詳細資訊,請參閱 AWS IAM Identity Center 使用者指南中的IAM身分中心先決條件。
多重要素驗證先決條件
若要使用 AD Connector 目錄支援多重驗證,您需要準備下列項目:
-
現有網路中的遠端驗證撥入使用者服務
(RADIUS) 伺服器,具有兩個用戶端端點。RADIUS 用戶端端點有下列需求: -
若要建立端點,您需要 AWS Directory Service 伺服器的 IP 地址。這些 IP 地址可從您目錄詳細資訊的 Directory IP Address (目錄 IP 地址) 欄位取得。
-
兩個RADIUS端點都必須使用相同的共用密碼。
-
-
您現有的網路必須允許從RADIUS伺服器透過預設伺服器連接埠 (1812) 的傳入流量 AWS Directory Service 。
-
伺服器RADIUS與現有目錄之間的使用者名稱必須相同。
如需搭配 使用 AD Connector 的詳細資訊MFA,請參閱 啟用 AD Connector 的多重要素身分驗證。
委派權限給您的服務帳戶
若要連線到現有目錄,您必須具備在現有目錄中,已委派特定權限之 AD Connector 服務帳戶的登入資料。雖然 Domain Admins (網域管理員) 群組的成員具有連線到目錄的足夠權限,但最佳實務應該使用只具有連線到目錄所需之最低權限的服務帳戶。下列程序示範如何建立名為 的新群組Connectors
、委派 AWS Directory Service 連線到此群組所需的必要權限,然後將新的服務帳戶新增至此群組。
此程序必須在加入目錄且已安裝 Active Directory 使用者和電腦快照的機器上執行。 MMC您也必須以網域管理員的身分登入。
委派權限給您的服務帳戶
-
開啟 Active Directory User and Computers (Active Directory 使用者和電腦),並在導覽樹狀目錄中選取您的根網域。
-
在左側窗格的清單中,對 Users (使用者) 按一下滑鼠右鍵,選取 New (新增),再選取 Group (群組)。
-
在 New Object - Group (新增物件 - 群組) 對話方塊中,輸入下列內容並按一下 OK (確定)。
欄位 值/選項 Group name (群組名稱) Connectors
Group scope (群組範圍) 全域 Group type (群組類型) 安全性 -
在 Active Directory 使用者和電腦導覽樹狀目錄中,選取識別要建立電腦帳戶的組織單位 (OU)。在選單中,選取 Action (動作),再選取 Delegate Control (委派控制)。您可以將父 OU 選取為網域,以將許可傳播給子 OUs。如果您的 AD Connector 連線至 AWS Managed Microsoft AD,您將無法在網域根層級委派控制權。在這種情況下,要委派控制,請選取將在其中建立電腦物件的目錄 OU 下的 OU。
-
在 Delegation of Control Wizard (委派控制精靈) 頁面上,按一下 Next (下一步),然後按一下 Add (新增)。
-
在 Select Users, Computers, or Groups (選取使用者、電腦或群組) 對話方塊中,輸入
Connectors
,並按一下 OK (確定)。如果找到多個物件,請選取在上述步驟中建立的Connectors
群組。按一下 Next (下一步)。 -
在 Tasks to Delegate (要委派的任務) 頁面上,選取 Create a custom task to delegate (建立要委派的自訂任務),然後選擇 Next (下一步)。
-
選取 Only the following objects in the folder (僅限資料夾中的下列物件),再選取 Computer objects (電腦物件) 和 User objects (使用者物件)。
-
選取 Create selected objects in this folder (在此資料夾中建立選取的物件) 和 Delete selected objects in this folder (在此資料夾中刪除選取的物件)。然後選擇下一步。
-
選取 Read (讀取),然後選擇 Next (下一步)。
注意
如果您要使用無縫網域聯結或 WorkSpaces,您還必須啟用寫入許可,以便 Active Directory 可以建立電腦物件。
-
驗證 Completing the Delegation of Control Wizard (完成委派控制精靈) 頁面中的資訊,然後按一下 Finish (完成)。
-
建立使用高強度密碼的使用者帳戶,並將此使用者新增至
Connectors
群組。此使用者將稱為 AD Connector 服務帳戶,由於現在是Connectors
群組的成員,因此現在具有足夠的權限來 AWS Directory Service 連線至目錄。
測試您的 AD Connector
若要讓 AD Connector 連線到現有的目錄,現有網路的防火牆必須針對 中的CIDRs兩個子網路,對 開啟特定連接埠VPC。若要測試是否符合這些條件,請執行下列步驟:
測試連線
-
在 中啟動 Windows 執行個體VPC,並透過 連線到該執行個體RDP。該執行個體必須為您現有網域的成員。剩餘的步驟會在此VPC執行個體上執行。
-
下載並解壓縮DirectoryServicePortTest測試應用程式。其中已包含來源碼與 Visual Studio 專案檔案,您可視需要修改測試應用程式。
注意
Windows Server 2003 或較舊的作業系統不支援此指令碼。
-
在 Windows 命令提示下,運用下列選項執行 DirectoryServicePortTest 測試應用程式:
注意
只有在網域和樹系功能層級設定為 Windows Server 2012 R2 及更低版本時,才能使用 DirectoryServicePortTest 測試應用程式。
DirectoryServicePortTest.exe -d
<domain_name>
-ip<server_IP_address>
-tcp "53,88,389" -udp "53,88,389"<domain_name>
-
完全合格的網域名稱。這用於測試森林和網域功能層級。如果您排除網域名稱,就不會測試功能層級。
<server_IP_address>
-
現有網域中網域控制器的 IP 地址。將針對此 IP 地址測試連接埠。如果您排除 IP 地址,就不會測試連接埠。
此測試應用程式會判斷必要的連接埠是否從 開啟VPC至您的網域,並驗證最小的樹系和網域功能層級。
輸出會類似下列內容:
Testing forest functional level. Forest Functional Level = Windows2008R2Forest : PASSED Testing domain functional level. Domain Functional Level = Windows2008R2Domain : PASSED Testing required TCP ports to
<server_IP_address>
: Checking TCP port 53: PASSED Checking TCP port 88: PASSED Checking TCP port 389: PASSED Testing required UDP ports to<server_IP_address>
: Checking UDP port 53: PASSED Checking UDP port 88: PASSED Checking UDP port 389: PASSED
下列是 DirectoryServicePortTest 應用程式的來源碼。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.DirectoryServices.ActiveDirectory; using System.Threading; using System.DirectoryServices.AccountManagement; using System.DirectoryServices; using System.Security.Authentication; using System.Security.AccessControl; using System.Security.Principal; namespace DirectoryServicePortTest { class Program { private static List<int> _tcpPorts; private static List<int> _udpPorts; private static string _domain = ""; private static IPAddress _ipAddr = null; static void Main(string[] args) { if (ParseArgs(args)) { try { if (_domain.Length > 0) { try { TestForestFunctionalLevel(); TestDomainFunctionalLevel(); } catch (ActiveDirectoryObjectNotFoundException) { Console.WriteLine("The domain {0} could not be found.\n", _domain); } } if (null != _ipAddr) { if (_tcpPorts.Count > 0) { TestTcpPorts(_tcpPorts); } if (_udpPorts.Count > 0) { TestUdpPorts(_udpPorts); } } } catch (AuthenticationException ex) { Console.WriteLine(ex.Message); } } else { PrintUsage(); } Console.Write("Press <enter> to continue."); Console.ReadLine(); } static void PrintUsage() { string currentApp = Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location); Console.WriteLine("Usage: {0} \n-d <domain> \n-ip \"<server IP address>\" \n[-tcp \"<tcp_port1>,<tcp_port2>,etc\"] \n[-udp \"<udp_port1>,<udp_port2>,etc\"]", currentApp); } static bool ParseArgs(string[] args) { bool fReturn = false; string ipAddress = ""; try { _tcpPorts = new List<int>(); _udpPorts = new List<int>(); for (int i = 0; i < args.Length; i++) { string arg = args[i]; if ("-tcp" == arg | "/tcp" == arg) { i++; string portList = args[i]; _tcpPorts = ParsePortList(portList); } if ("-udp" == arg | "/udp" == arg) { i++; string portList = args[i]; _udpPorts = ParsePortList(portList); } if ("-d" == arg | "/d" == arg) { i++; _domain = args[i]; } if ("-ip" == arg | "/ip" == arg) { i++; ipAddress = args[i]; } } } catch (ArgumentOutOfRangeException) { return false; } if (_domain.Length > 0 || ipAddress.Length > 0) { fReturn = true; } if (ipAddress.Length > 0) { _ipAddr = IPAddress.Parse(ipAddress); } return fReturn; } static List<int> ParsePortList(string portList) { List<int> ports = new List<int>(); char[] separators = {',', ';', ':'}; string[] portStrings = portList.Split(separators); foreach (string portString in portStrings) { try { ports.Add(Convert.ToInt32(portString)); } catch (FormatException) { } } return ports; } static void TestForestFunctionalLevel() { Console.WriteLine("Testing forest functional level."); DirectoryContext dirContext = new DirectoryContext(DirectoryContextType.Forest, _domain, null, null); Forest forestContext = Forest.GetForest(dirContext); Console.Write("Forest Functional Level = {0} : ", forestContext.ForestMode); if (forestContext.ForestMode >= ForestMode.Windows2003Forest) { Console.WriteLine("PASSED"); } else { Console.WriteLine("FAILED"); } Console.WriteLine(); } static void TestDomainFunctionalLevel() { Console.WriteLine("Testing domain functional level."); DirectoryContext dirContext = new DirectoryContext(DirectoryContextType.Domain, _domain, null, null); Domain domainObject = Domain.GetDomain(dirContext); Console.Write("Domain Functional Level = {0} : ", domainObject.DomainMode); if (domainObject.DomainMode >= DomainMode.Windows2003Domain) { Console.WriteLine("PASSED"); } else { Console.WriteLine("FAILED"); } Console.WriteLine(); } static List<int> TestTcpPorts(List<int> portList) { Console.WriteLine("Testing TCP ports to {0}:", _ipAddr.ToString()); List<int> failedPorts = new List<int>(); foreach (int port in portList) { Console.Write("Checking TCP port {0}: ", port); TcpClient tcpClient = new TcpClient(); try { tcpClient.Connect(_ipAddr, port); tcpClient.Close(); Console.WriteLine("PASSED"); } catch (SocketException) { failedPorts.Add(port); Console.WriteLine("FAILED"); } } Console.WriteLine(); return failedPorts; } static List<int> TestUdpPorts(List<int> portList) { Console.WriteLine("Testing UDP ports to {0}:", _ipAddr.ToString()); List<int> failedPorts = new List<int>(); foreach (int port in portList) { Console.Write("Checking UDP port {0}: ", port); UdpClient udpClient = new UdpClient(); try { udpClient.Connect(_ipAddr, port); udpClient.Close(); Console.WriteLine("PASSED"); } catch (SocketException) { failedPorts.Add(port); Console.WriteLine("FAILED"); } } Console.WriteLine(); return failedPorts; } } }
建立 AD Connector
若要使用 AD Connector 連線到您的現有目錄,請執行下列步驟。開始此程序之前,請確定您已完成 AD Connector 事前準備 中所示的必要條件。
注意
您無法使用 Cloud Formation 範本建立 AD Connector。
使用 AD Connector 連線
-
在 AWS Directory Service 主控台
中,選擇目錄,然後選擇設定目錄。 -
在選取目錄類型 頁面上,選擇 AD Connector,然後選擇下一步。
-
在 Enter AD Connector information (輸入 AD Connector 資訊) 頁面上,提供下列資訊:
- Directory size (目錄大小)
-
選擇 Small (小型) 或 Large (大型) 尺寸選項。如需尺寸的詳細資訊,請參閱 AD Connector。
- 目錄描述
-
選擇填寫其他目錄說明。
-
在選擇VPC和子網路頁面上,提供以下資訊,然後選擇下一步。
- VPC
-
目錄VPC的 。
- 子網
-
選擇網域控制站的子網路。這兩個子網路必須位於不同的可用區域。
-
在 Connect to AD (連結到 AD) 頁面上,提供下列資訊:
- 目錄DNS名稱
-
現有目錄的完整名稱,例如
corp.example.com
。 - Directory NetBIOS 名稱
-
您現有目錄的簡稱,例如
CORP
。 - DNS IP 地址
-
現有目錄中至少一個DNS伺服器的 IP 地址。這些伺服器皆必須可從步驟 4 指定的各子網路存取。只要指定子網路與伺服器 IP 地址之間有網路連線 AWS,這些DNS伺服器就可以位於 之外。
- 服務帳戶使用名稱
-
現有目錄中使用者的使用者名稱。如需此帳戶的詳細資訊,請參閱「AD Connector 事前準備」。
- 服務帳戶密碼
-
現有使用者帳戶的密碼。密碼區分大小寫,長度須介於 8 至 128 個字元 (含) 之間。至少須有一位字元屬於以下四種類型中的三類:
-
小寫字母 (a-z)
-
大寫字母 (A-Z)
-
數字 (0-9)
-
非英數字元 (~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)
-
- Confirm password (確認密碼)
-
重新輸入現有使用者帳戶的密碼。
-
在 Review & create (檢閱和建立) 頁面上檢閱目錄資訊,並進行必要的變更。若資訊無誤,請選擇 Create directory (建立目錄)。建立目錄需要幾分鐘的時間。建立後,Status (狀態) 值會變更為 Active (作用中)。
如需使用 AD Connector 建立內容的詳細資訊,請參閱 使用 AD Connector 建立的內容。