搭配多個 Active Directory 樹系使用 Azure 檔案儲存體
許多組織想要在具有多個內部部署 Active Directory Domain Services (AD DS) 樹系的環境中,針對 SMB Azure 檔案共用使用身分識別型驗證。 這是常見的 IT 案例,特別是在合併和收購之後,其中的收購公司 AD 樹系會與母公司 AD 樹系隔離。 本文說明樹系信任關係如何運作,並提供多樹系設定和驗證的逐步指示。
重要
如果您想要使用 Azure 角色型存取控制 (RBAC) 設定特定 Microsoft Entra 使用者或群組的共用層級權限,您必須先使用 Microsoft Entra Connect,將內部部署 AD 帳戶同步至 Microsoft Entra ID。 或者,您可以使用預設共用層級權限。
適用於
檔案共用類型 | SMB | NFS |
---|---|---|
標準檔案共用 (GPv2)、LRS/ZRS | ![]() |
![]() |
標準檔案共用 (GPv2)、GRS/GZRS | ![]() |
![]() |
進階檔案共用 (FileStorage)、LRS/ZRS | ![]() |
![]() |
必要條件
- 兩個 AD DS 網域控制站,具有兩個不同樹系且位於不同虛擬網路 (VNET)
- 足夠的 AD 權限,可執行系統管理工作 (例如網域系統管理員)
- 如果使用 Azure RBAC,則單一 Microsoft Entra Connect 同步伺服器必須能夠連線至這兩個樹系
樹系信任關係的運作方式
Azure 檔案儲存體的內部部署 AD DS 驗證僅支援用於儲存體帳戶所註冊網域服務的 AD 樹系。 依預設,您只能使用來自單一樹系的 AD DS 認證來存取 Azure 檔案共用。 如果您必須從不同的樹系存取 Azure 檔案共用,則您必須設定樹系信任。
樹系信任是兩個 AD 樹系之間的可轉移信任,可讓一個樹系下任何網域中的使用者,在另一個樹系下任何網域中進行驗證。
多樹系設定
若要設定多樹系設定,我們會執行下列步驟:
- 收集網域資訊和網域之間的 VNET 連線
- 建立和設定樹系信任
- 設定身分識別型驗證和混合式使用者帳戶
收集網域資訊
在此練習中,我們有兩個內部部署 AD DS 網域控制站,具有兩個不同的樹系,且位於不同的 VNET。
樹系 | 網域 | VNET |
---|---|---|
Forest 1 | onpremad1.com | DomainServicesVNet WUS |
Forest 2 | onpremad2.com | vnet2/workloads |
建立和設定信任
若要讓 Forest 1 用戶端可以存取 Forest 2 中的 Azure 檔案儲存體網域資源,我們必須在兩個樹系之間建立信任。 請遵循下列步驟建立信任。
注意
Azure 檔案儲存體僅支援樹系信任。 不支援其他信任類型,例如外部信任。
如果您已經設定信任,您可以登入已加入樹系 2 的計算機,開啟 [Active Directory 網域 和信任] 控制台,以滑鼠右鍵按下本機網域 onpremad2.com,然後選取 [信任] 索引卷標,以檢查其類型。如果您現有的信任不是樹系信任,而且如果樹系信任符合您環境的需求,您必須移除現有的信任,並在其位置重新建立樹系信任。 若要這樣,請遵循下列指示。
登入網域已加入 Forest 2 的機器,開啟 [Active Directory 網域及信任] 主控台。
以滑鼠右鍵按一下本機網域 onpremad2.com,然後選取 [信任] 索引標籤。
選取 [新增信任],啟動 [新增信任精靈]。
指定您想要與其建立信任的網域名稱 (在此範例中為 onpremad1.com),然後選取 [下一步]。
在 [信任類型] 選取 [樹系信任],然後選取 [下一步]。
在 [信任方向] 選取 [雙向],然後選取 [下一步]。
在 [信任方] 選取 [僅此網域],然後選取 [下一步]。
指定樹系中的使用者可以通過驗證來使用本機樹系中的所有資源 (全樹系驗證) 或僅限您選取的資源 (選擇性驗證)。 在 [連出信任驗證層級] 選取 [全樹系驗證],這是兩個樹系屬於相同組織時的慣用選項。 選取 [下一步]。
輸入信任的密碼,然後選取 [下一步]。 在指定的網域中建立此信任關係時,必須使用相同的密碼。
您應該會看到成功建立信任關係的訊息。 若要設定信任,選取 [下一步]。
確認連出信任,然後選取 [下一步]。
輸入使用者的使用者名稱和密碼,此使用者在另一個網域中具有系統管理員權限。
通過驗證之後就會建立信任,而且您應該可以看到指定網域 onpremad1.com 列在 [信任] 索引標籤中。
設定身分識別型驗證和混合式使用者帳戶
建立信任之後,請遵循下列步驟,為每個網域建立儲存體帳戶和 SMB 檔案共用、對儲存體帳戶啟用 AD DS 驗證,以及建立已同步至 Microsoft Entra ID 的混合式使用者帳戶。
登入 Azure 入口網站,建立兩個儲存體帳戶,例如 onprem1sa 和 onprem2sa。 為達到最佳效能,我們建議您將儲存體帳戶部署在您打算用來存取共用的用戶端所在相同區網域中。
注意
不需要建立第二個儲存體帳戶。 這些指示旨在示範如何存取屬於不同樹系的儲存體帳戶。 如果您只有一個儲存體帳戶,您可以忽略第二個儲存體帳戶的設定指示。
在每個儲存體帳戶上建立 SMB Azure 檔案共用。
使用 Microsoft Entra Connect 同步應用程式,將內部部署 AD 同步至 Microsoft Entra ID。
將 Forest 1 中 Azure VM 所屬的網域加入至內部部署 AD DS。 如需關於如何加入網域的詳細資訊,請參閱將電腦加入網域。
對與 Forest 1 相關聯的儲存體帳戶啟用 AD DS 驗證,例如 onprem1sa。 這會在您的內部部署 AD 中建立代表 Azure 儲存體帳戶、名為 onprem1sa 的電腦帳戶,並將該儲存體帳戶加入至 onpremad1.com 網域。 您可以在 [Active Directory 使用者及電腦] 中尋找 onpremad1.com,確認已建立代表儲存體帳戶的 AD 身分識別。 在此範例中,您會看到名為 onprem1sa 的電腦帳戶。
瀏覽至 [Active Directory] > [onpremad1.com],建立使用者帳戶。 以滑鼠右鍵按一下 [使用者],選取 [建立],輸入使用者名稱 (例如 onprem1user),然後核取 [密碼永久有效] 方塊 (選用)。
選用:如果您想要使用 Azure RBAC 指派共用層級權限,您必須使用 Microsoft Entra Connect,將該使用者同步至 Microsoft Entra ID。 Microsoft Entra Connect 同步通常每隔 30 分鐘更新一次。 不過,您可以開啟提升權限的 PowerShell 工作階段並執行
Start-ADSyncSyncCycle -PolicyType Delta
,強制立即進行同步。 您可能需要先安裝 ADSync 模組,請執行Import-Module ADSync
。 若要確認使用者已同步至 Microsoft Entra ID,請使用與多樹系租用戶相關聯的 Azure 訂用帳戶登入 Azure 入口網站,然後選取 [Microsoft Entra ID]。 選取 [管理] > [使用者],然後搜尋您新增的使用者 (例如 onprem1user)。 [內部部署同步處理已啟用] 應該會顯示 [是]。使用 Azure RBAC 角色或預設共用層級權限設定共用層級權限。
- 如果已將使用者同步至 Microsoft Entra ID,您可以將共用層級權限 (Azure RBAC 角色) 授與儲存體帳戶 onprem1sa 的使用者 onprem1user,讓使用者可以掛接檔案共用。 若要這樣做,請瀏覽至您在 onprem1sa 中建立的檔案共用,遵循指派特定 Microsoft Entra 使用者或群組的共用層級權限中的指示。
- 否則,您可以使用適用於所有已驗證身分識別的預設共用層級權限。
針對 Forest2 的網域 onpremad2.com (儲存體帳戶 onprem2sa / 使用者 onprem2user) 重複步驟 4 至 8。 如果您有兩個以上的樹系,請針對每個樹系重複這些步驟。
設定目錄和檔案層級權限 (選用)
在多樹系環境中,使用 icacls 命令列公用程式可為這兩個樹系中的使用者設定目錄和檔案層級權限。 請參閱使用 icacls 設定 Windows ACL。
如果 icacls 因「存取遭拒」錯誤而失敗,請遵循下列步驟,使用儲存體帳戶金鑰掛接共用來設定目錄和檔案層級權限。
刪除現有的共用掛接:
net use * /delete /y
使用儲存體帳戶金鑰重新掛接共用:
net use <driveletter> \\storageaccount.file.core.windows.net\sharename /user:AZURE\<storageaccountname> <storageaccountkey>
從 Forest1 用戶端,在已加入至 Forest1 的儲存體帳戶中,設定 Forest2 使用者的 icacls 權限。
注意
不建議在多樹系環境中使用檔案總管設定 ACL。 儘管樹系的網域已加入至儲存體帳戶,屬於樹系的使用者可以透過檔案總管設定檔案/目錄層級權限,這個方法不適用於樹系的網域已加入至儲存體帳戶、卻屬於不同樹系的使用者。
設定網域尾碼
如上所述,Azure 檔案儲存體在 AD DS 中註冊的方式幾乎與一般檔案伺服器相同,即建立身分識別 (預設為電腦帳戶,也可以是服務登入帳戶) 來代表 AD DS 中的儲存體帳戶進行驗證。 唯一的差異在於儲存體帳戶的已註冊服務主體名稱 (SPN) 結尾為 file.core.windows.net,與網域尾碼不符。 由於網域尾碼不同,您必須設定尾碼路由原則,才能啟用多樹系驗證。
因為尾碼 file.core.windows.net 是所有 Azure 檔案儲存體資源的尾碼,而不是特定 AD 網域的尾碼,用戶端的網域控制站不知道要將要求轉送至哪個網域,因此在自己的網域中找不到資源的所有要求都會失敗。
例如,若 Forest 1 中網域的使用者想要連線的檔案共用,位於網域已註冊 Forest 2 的儲存體帳戶,則這個動作無法自動完成,因為儲存體帳戶服務主體的尾碼不符合 Forest 1 中任何網域的尾碼。
您可以使用下列其中一種方法設定網域尾碼:
- 修改儲存體帳戶尾碼並新增 CNAME 記錄 (建議使用 - 適用於兩個以上的樹系)
- 新增自訂名稱尾碼和路由規則 (不適用於兩個以上的樹系)
修改儲存體帳戶名稱尾碼並新增 CNAME 記錄
您可以修改與 Azure 檔案共用相關聯的儲存體帳戶名稱尾碼,然後新增 CNAME 記錄,將新的尾碼路由至儲存體帳戶的端點,藉此解決網域路由問題。 透過此設定,網域已加入的用戶端可以存取已加入任何樹系的儲存體帳戶。 此方法適用於具有兩個以上樹系的環境。
在我們的範例中,我們有網域 onpremad1.com 和 onpremad2.com,我們有 onprem1sa 和 onprem2sa 在各自網域中做為與 SMB Azure 檔案共用相關聯的儲存體帳戶。 這些網域位於不同的樹系中,彼此信任,可以存取彼此樹系中的資源。 我們想要允許從每個樹系所屬的用戶端存取這兩個儲存體帳戶。 若要這樣做,我們必須修改儲存體帳戶的 SPN 尾碼:
onprem1sa.onpremad1.com -> onprem1sa.file.core.windows.net
onprem2sa.onpremad2.com -> onprem2sa.file.core.windows.net
這可讓用戶端使用 net use \\onprem1sa.onpremad1.com
掛接共用,因為在 onpremad1 或 onpremad2 的用戶端會知道要搜尋 onpremad1.com,以尋找該儲存體帳戶的適當資源。
若要使用此方法,請完成下列步驟:
請確定您已在兩個樹系之間建立信任,且已設定身分識別型驗證和混合式使用者帳戶,如先前小節所述。
使用 setspn 工具修改儲存體帳戶的 SPN。 您可以執行下列 Active Directory PowerShell 命令來找到
<DomainDnsRoot>
:(Get-AdDomain).DnsRoot
setspn -s cifs/<storage-account-name>.<DomainDnsRoot> <storage-account-name>
使用 Active Directory DNS 管理員新增 CNAME 項目,然後針對儲存體帳戶所加入網域中的每個儲存體帳戶,執行下列步驟。 如果您使用私人端點,請新增 CNAME 項目以對應至私人端點名稱。
開啟 Active Directory DNS 管理員。
移至您的網域 (例如 onpremad1.com)。
移至「正向對應區域」。
選取以網域命名的節點 (例如 onpremad1.com),然後以滑鼠右鍵按一下 [新增別名 (CNAME)]。
輸入您的儲存體帳戶名稱做為別名名稱。
在完整網域名稱 (FQDN) 輸入
<storage-account-name>
.<domain-name>
,例如 mystorageaccount.onpremad1.com。在目標主機 FQDN 輸入
<storage-account-name>
.file.core.windows.net選取 [確定]。
現在,您應該可以從網域已加入的用戶端,使用已加入任何樹系的儲存體帳戶。
注意
請確定 FQDN 的主機名稱部分符合儲存體帳戶名稱,如上所述。 否則,您會收到拒絕存取錯誤:「檔案名稱、目錄名稱或磁碟區標籤的語法不正確。」網路追蹤會在 SMB 工作階段設定期間顯示STATUS_OBJECT_NAME_INVALID (0xc0000033) 訊息。
新增自訂名稱尾碼和路由規則
如果您已修改儲存體帳戶名稱尾碼並新增 CNAME 記錄,如先前小節所述,您可以略過此步驟。 如果您不願意變更 DNS 或修改儲存體帳戶名稱尾碼,您可以設定從 Forest 1 到 Forest 2 的尾碼路由規則,使用 file.core.windows.net 自訂尾碼。
注意
設定名稱尾碼路由不會影響在本機網域中存取資源的能力。 只有在自己的網域中找不到資源時,才需要允許用戶端將要求轉送至尾碼相符的網域。
首先,在 Forest 2 新增自訂尾碼。 請確定您有適當的系統管理權限可變更設定,且您已在兩個樹系之間建立信任。 接著,依照下列步驟執行:
- 登入網域已加入 Forest 2 的機器或 VM。
- 開啟 [Active Directory 網域及信任] 主控台。
- 用滑鼠右鍵按一下 [Active Directory 網域及信任]。
- 選取 [屬性],然後選取 [新增]。
- 新增 "file.core.windows.net" 做為 UPN 尾碼。
- 選取 [套用],然後選取 [確定] 以關閉精靈。
接下來,在 Forest 1 新增尾碼路由規則,使其重新導向至 Forest 2。
- 登入網域已加入 Forest 1 的機器或 VM。
- 開啟 [Active Directory 網域及信任] 主控台。
- 以滑鼠右鍵按一下您要存取檔案共用的網域,然後選取 [信任] 索引標籤,並從連出信任中選取 Forest 2 網域。
- 選取 [屬性],然後選取 [名稱尾碼路由]。
- 檢查是否顯示 "*.file.core.windows.net" 尾碼。 如果沒有,請選取 [重新整理]。
- 選取 "*.file.core.windows.net",然後選取 [啟用] 和 [套用]。
驗證信任是否正常運作
現在,我們會驗證信任是否正常運作,方法是執行 klist 命令以顯示 Kerberos 認證快取和金鑰表的內容。
- 登入網域已加入 Forest 1 的機器或 VM,開啟 Windows 命令提示字元。
- 若要顯示網域已加入 Forest 2 的儲存體帳戶認證快取,請執行下列其中一個命令:
- 如果您使用修改儲存體帳戶名稱尾碼並新增 CNAME 記錄方法,請執行:
klist get cifs/onprem2sa.onpremad2.com
- 如果您使用新增自訂名稱尾碼和路由規則方法,請執行:
klist get cifs/onprem2sa.file.core.windows.net
- 如果您使用修改儲存體帳戶名稱尾碼並新增 CNAME 記錄方法,請執行:
- 您應該會看到如下所示的輸出。 根據您用來設定網域尾碼的方法,klist 輸出會稍有不同。
Client: onprem1user @ ONPREMAD1.COM
Server: cifs/onprem2sa.file.core.windows.net @ ONPREMAD2.COM
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize
Start Time: 11/22/2022 18:45:02 (local)
End Time: 11/23/2022 4:45:02 (local)
Renew Time: 11/29/2022 18:45:02 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0x200 -> DISABLE-TGT-DELEGATION
Kdc Called: onprem2.onpremad2.com
- 登入網域已加入 Forest 2 的機器或 VM,開啟 Windows 命令提示字元。
- 若要顯示網域已加入 Forest 1 的儲存體帳戶認證快取,請執行下列其中一個命令:
- 如果您使用修改儲存體帳戶名稱尾碼並新增 CNAME 記錄方法,請執行:
klist get cifs/onprem1sa.onpremad1.com
- 如果您使用新增自訂名稱尾碼和路由規則方法,請執行:
klist get cifs/onprem1sa.file.core.windows.net
- 如果您使用修改儲存體帳戶名稱尾碼並新增 CNAME 記錄方法,請執行:
- 您應該會看到如下所示的輸出。 根據您用來設定網域尾碼的方法,klist 輸出會稍有不同。
Client: onprem2user @ ONPREMAD2.COM
Server: krbtgt/ONPREMAD2.COM @ ONPREMAD2.COM
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40e10000 -> forwardable renewable pre_authent name_canonicalize
Start Time: 11/22/2022 18:46:35 (local)
End Time: 11/23/2022 4:46:35 (local)
Renew Time: 11/29/2022 18:46:35 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0x1 -> PRIMARY
Kdc Called: onprem2
Client: onprem2user @ ONPREMAD2.COM
Server: cifs/onprem1sa.file.core.windows.net @ ONPREMAD1.COM
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize
Start Time: 11/22/2022 18:46:35 (local)
End Time: 11/23/2022 4:46:35 (local)
Renew Time: 11/29/2022 18:46:35 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Cache Flags: 0x200 -> DISABLE-TGT-DELEGATION
Kdc Called: onpremad1.onpremad1.com
如果您看到上述輸出,表示您已順利完成! 如果您未看到,請遵循下列步驟,提供替代的 UPN 尾碼以使多樹系驗證能夠運作。
重要
此方法只能在具有兩個樹系的環境中運作。 如果您有兩個以上的樹系,請使用兩個方法之一設定網域尾碼。
首先,在 Forest 1 新增自訂尾碼。
- 登入網域已加入 Forest 1 的機器或 VM。
- 開啟 [Active Directory 網域及信任] 主控台。
- 用滑鼠右鍵按一下 [Active Directory 網域及信任]。
- 選取 [屬性],然後選取 [新增]。
- 新增替代的 UPN 尾碼,例如 "onprem1sa.file.core.windows.net"。
- 選取 [套用],然後選取 [確定] 以關閉精靈。
接下來,在 Forest 2 新增尾碼路由規則。
- 登入網域已加入 Forest 2 的機器或 VM。
- 開啟 [Active Directory 網域及信任] 主控台。
- 以滑鼠右鍵按一下您要存取檔案共用的網域,然後選取 [信任] 索引標籤,在新增的尾碼路由名稱的位置選取連出信任的 Forest 2。
- 選取 [屬性],然後選取 [名稱尾碼路由]。
- 檢查是否顯示 "onprem1sa.file.core.windows.net" 尾碼。 如果沒有,請選取 [重新整理]。
- 選取 "onprem1sa.file.core.windows.net",然後選取 [啟用] 和 [套用]。
下一步
如需詳細資訊,請參閱下列資源:
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應