整合 AD FS 身分識別與 Azure Stack Hub 資料中心
您可以使用 Microsoft Entra ID 或 Active Directory 同盟服務 (AD FS) 作為識別提供者來部署 Azure Stack Hub。 部署 Azure Stack Hub 之前,必須先進行選擇。 在連線的案例中,您可以選擇 Microsoft Entra ID 或 AD FS。 針對已中斷連線的案例,只支援 AD FS。 本文說明如何將 Azure Stack Hub AD FS 與您的資料中心 AD FS 整合。
重要
您無法在不重新部署整個 Azure Stack Hub 解決方案的情況下切換識別提供者。
Active Directory 同盟服務和 Graph
使用 AD FS 部署可讓現有 Active Directory 樹系中的身分識別向 Azure Stack Hub 中的資源進行驗證。 這個現有的 Active Directory 樹系需要 AD FS 部署,以允許建立 AD FS 同盟信任。
驗證是身分識別的一部分。 若要在 Azure Stack Hub 中管理角色型存取控制 (RBAC),必須設定 Graph 元件。 委派資源的存取權後,Graph 元件會使用 LDAP 通訊協定來查閱現有 Active Directory 樹系中的使用者帳戶。
現有的 AD FS 是帳戶 Security Token Service (STS),會將宣告傳送至 Azure Stack Hub AD FS (資源 STS)。 在 Azure Stack Hub 中,自動化會對現有 AD FS 的中繼資料端點建立宣告提供者信任。
在現有 AD FS 中,必須設定一個信賴憑證者信任。 這個步驟不會自動完成,而必須由操作員設定。 可以透過使用模式 https://adfs.<Region>.<ExternalFQDN>/
建立 AD FS 的 Azure Stack Hub VIP 端點。
信賴憑證者信任設定也會需要您設定由 Microsoft 提供的宣告轉換規則。
針對 Graph 組態,必須提供在現有 Active Directory 中具有「讀取」許可權的服務帳戶。 需要此帳戶作為自動化的輸入,才能啟用 RBAC 案例。
在最後一個步驟,針對預設提供者訂用帳戶設定新擁有者。 登入 Azure Stack Hub 管理員入口網站時,此帳戶具有所有資源的完整存取權。
需求:
元件 | 需求 |
---|---|
圖表 | Microsoft Active Directory 2012/2012 R2/2016 2019 |
AD FS | Windows Server 2012/2012 R2/2016 2019 |
設定 Graph 整合
Graph 僅支援單一 Active Directory 樹系的整合。 如果存在多個樹系,則只有在設定中指定的樹系會用來擷取使用者和群組。
需要下列資訊,做為自動化參數的輸入:
參數 | 部署工作表參數 | 描述 | 範例 |
---|---|---|---|
CustomADGlobalCatalog |
AD FS 樹系 FQDN | 您想要與目標 Active Directory 樹系整合的 FQDN | Contoso.com |
CustomADAdminCredentials |
具有 LDAP 讀取權限的使用者 | graphservice |
設定 Active Directory 網站
如果 Active Directory 部署有多個網站,請設定最接近您的 Azure Stack Hub 部署的 Active Directory 網站。 此設定可避免讓 Azure Stack Hub Graph 服務從遠端站台使用通用類別目錄伺服器解析查詢。
將 Azure Stack Hub 公用 VIP 網路 子網新增至最接近 Azure Stack Hub 的 Active Directory 月臺。 例如,假設您的 Active Directory 有兩個網站:Seattle 和 Redmond。 如果 Azure Stack Hub 部署在西雅圖網站,您應將 Azure Stack Hub 公用 VIP 網路的子網路新增至西雅圖的 Active Directory 網站。
如需 Active Directory 網站的詳細資訊,請參閱 設計網站拓撲。
注意
如果您的 Active Directory 是由單一網站所組成,您可以略過此步驟。 如果您已設定全部攔截子網,請驗證 Azure Stack Hub 公用 VIP 網路子網是否不屬於該子網。
在現有 Active Directory 中建立使用者帳戶 (選用)
您可以選擇性地在現有的 Active Directory 中建立用於 Graph 服務的帳戶。 如果還沒有想要使用的帳戶,請執行此步驟。
在現有的 Active Directory 中,建立下列使用者帳戶 (建議):
- 用戶名稱:graphservice
- 密碼:使用強式密碼,並將密碼設定為永不過期。
不需要特殊許可權或成員資格。
觸發自動化以設定圖表
針對此程序,使用您資料中心網路中能夠與 Azure Stack Hub 中具特殊權限端點通訊的電腦。
開啟一個已提高權限的 Windows PowerShell 工作階段 (以系統管理員身分執行),然後連線到具特殊權限端點的 IP 位址。 使用適用於 CloudAdmin 的認證進行驗證。
$creds = Get-Credential $pep = New-PSSession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
您現在有具特殊權限端點的工作階段,請執行下列命令:
針對 Azure Stack Hub 組建 2008 和更新版本執行下列腳本
$i = @( [pscustomobject]@{ CustomADGlobalCatalog="fabrikam.com" CustomADAdminCredential= Get-Credential -Message "Do not include the domain name of the graphservice account in the username." SkipRootDomainValidation = $false ValidateParameters = $true }) Invoke-Command -Session $pep -ScriptBlock {Register-DirectoryService -customCatalog $using:i}
在 2008 年之前執行 Azure Stack Hub 組建的下列腳本
Invoke-Command -Session $pep -ScriptBlock {Register-DirectoryService -CustomADGlobalCatalog contoso.com}
出現提示時,指定要用於 Graph 服務的使用者帳戶認證 (例如 graphservice)。 Register-DirectoryService Cmdlet 的輸入必須是樹系名稱/樹系中的根網域,而不是樹系中的其他網域。
重要
等候認證彈出視窗(特殊許可權端點不支援 Get-Credential),並輸入 Graph 服務帳戶認證。
Register-DirectoryService Cmdlet 有選用的參數可用在現有 Active Directory 驗證失敗的情況。 執行此 Cmdlet 時,它會驗證所提供的網域是否為根網域、是否可以連線到通用類別目錄伺服器,以及所提供的帳戶是否已被授與讀取存取權限。
參數 描述 SkipRootDomainValidation
指定必須使用子網域,而不是建議的根網域。 ValidateParameters
略過所有驗證檢查。
Graph 通訊協定和連接埠
Azure Stack Hub 中的 Graph 服務使用以下通訊協定和連接埠來與可寫入的「通用類別目錄伺服器」(GC) 和可在目標 Active Directory 樹系中處理登入要求的「金鑰發佈中心」(KDC) 通訊。
Azure Stack Hub 中的 Graph 服務會使用下列通訊協定和連接埠來與目標 Active Directory 通訊:
類型 | 連接埠 | 通訊協定 |
---|---|---|
LDAP | 389 | TCP 和 UDP |
LDAP SSL | 636 | TCP |
LDAP GC | 3268 | TCP |
LDAP GC SSL | 3269 | TCP |
下載同盟元數據來設定AD FS整合
需要下列資訊作為自動化參數的輸入:
參數 | 部署工作表參數 | 描述 | 範例 |
---|---|---|---|
CustomAdfsName | AD FS 提供者名稱 | 宣告提供者的名稱。 其會顯示在AD FS登陸頁面上。 |
Contoso |
CustomAD FSFederationMetadataEndpointUri |
AD FS 元數據 URI | 同盟元數據連結。 | https://ad01.contoso.com/federationmetadata/2007-06/federationmetadata.xml |
SigningCertificateRevocationCheck | NA | 選擇性參數以略過CRL檢查。 | 無 |
觸發自動化以在 Azure Stack Hub 中設定宣告提供者信任 (藉由下載同盟元數據)
針對此程式,請使用可與 Azure Stack Hub 中具特殊許可權端點通訊的電腦。 預期 Azure Stack Hub 信任帳戶 STS AD FS 所使用的憑證。
開啟提升許可權的 Windows PowerShell 工作階段,並連線到具特殊許可權的端點。
$creds = Get-Credential Enter-PSSession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
既然您已連線到具特殊許可權的端點,請使用適合您環境的參數來執行下列命令:
Register-CustomAdfs -CustomAdfsName Contoso -CustomADFSFederationMetadataEndpointUri "https://ad01.contoso.com/federationmetadata/2007-06/federationmetadata.xml"
執行下列命令,以使用適合您環境的參數來更新預設提供者訂用帳戶的擁有者:
Set-ServiceAdminOwner -ServiceAdminOwnerUpn "administrator@contoso.com"
提供同盟元數據檔案來設定AD FS整合
從 1807 版開始,如果下列任一條件成立,請使用此方法:
- 相較於 Azure Stack Hub 中所有其他端點,AD FS 的憑證鏈結不同。
- 沒有從 Azure Stack Hub 的 AD FS 實例連線到現有 AD FS 伺服器的網路連線。
需要下列資訊作為自動化參數的輸入:
參數 | 描述 | 範例 |
---|---|---|
CustomAdfsName | 宣告提供者的名稱。 其會顯示在AD FS登陸頁面上。 | Contoso |
CustomADFSFederationMetadataFileContent | 元數據內容。 | $using:federationMetadataFileContent |
建立同盟元數據檔案
針對下列程式,您必須使用具有現有 AD FS 部署網路連線的電腦,這會成為帳戶 STS。 也必須安裝必要的憑證。
開啟提升許可權的 Windows PowerShell 工作階段,並使用適合您環境的參數執行下列命令:
$url = "https://win-SQOOJN70SGL.contoso.com/FederationMetadata/2007-06/FederationMetadata.xml" $webclient = New-Object System.Net.WebClient $webclient.Encoding = [System.Text.Encoding]::UTF8 $metadataAsString = $webclient.DownloadString($url) Set-Content -Path c:\metadata.xml -Encoding UTF8 -Value $metadataAsString
將元數據檔案複製到可以與具特殊許可權端點通訊的計算機。
觸發自動化以在 Azure Stack Hub 中設定宣告提供者信任(使用同盟元數據檔案)
針對此程式,請使用可與 Azure Stack Hub 中具特殊許可權端點通訊的電腦,並可以存取您在上一個步驟中建立的元數據檔案。
開啟提升許可權的 Windows PowerShell 工作階段,並連線到具特殊許可權的端點。
$federationMetadataFileContent = get-content c:\metadata.xml $creds=Get-Credential Enter-PSSession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
既然您已連線到具特殊許可權的端點,請使用適合您環境的參數來執行下列命令:
Register-CustomAdfs -CustomAdfsName Contoso -CustomADFSFederationMetadataFileContent $using:federationMetadataFileContent
執行下列命令以更新預設提供者訂用帳戶的擁有者。 使用適合您環境的參數。
Set-ServiceAdminOwner -ServiceAdminOwnerUpn "administrator@contoso.com"
注意
當您在現有的 AD FS (帳戶 STS) 上輪替憑證時,您必須再次設定 AD FS 整合。 即使元數據端點可連線,或透過提供元數據檔案來設定整合,您也必須設定整合。
設定現有 AD FS 部署的信賴憑證者 (帳戶 STS)
Microsoft提供腳本來設定信賴憑證者信任,包括宣告轉換規則。 使用文稿是選擇性的,因為您可以手動執行命令。
您可以從 GitHub 上的 Azure Stack Hub 工具下載協助程式腳本。
如果您決定手動執行命令,請遵循下列步驟:
將下列內容複製到資料中心 AD FS 實例或伺服器陣列成員上的.txt檔案(例如,儲存為 c:\ClaimIssuanceRules.txt:
@RuleTemplate = "LdapClaims" @RuleName = "Name claim" c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"), query = ";userPrincipalName;{0}", param = c.Value); @RuleTemplate = "LdapClaims" @RuleName = "UPN claim" c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"), query = ";userPrincipalName;{0}", param = c.Value); @RuleTemplate = "LdapClaims" @RuleName = "ObjectID claim" c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"] => issue(Type = "http://schemas.microsoft.com/identity/claims/objectidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType); @RuleName = "Family Name and Given claim" c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname"), query = ";sn,givenName;{0}", param = c.Value); @RuleTemplate = "PassThroughClaims" @RuleName = "Pass through all Group SID claims" c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Issuer =~ "^(AD AUTHORITY|SELF AUTHORITY|LOCAL AUTHORITY)$"] => issue(claim = c); @RuleTemplate = "PassThroughClaims" @RuleName = "Pass through all windows account name claims" c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"] => issue(claim = c);
驗證已啟用外部網路和內部網路的 Windows Forms 型驗證。 您可以執行下列 Cmdlet 來檢查是否已啟用:
Get-AdfsAuthenticationProvider | where-object { $_.name -eq "FormsAuthentication" } | select Name, AllowedForPrimaryExtranet, AllowedForPrimaryIntranet
注意
Windows 整合式驗證 (WIA) 支援的使用者代理程式字串可能已過期,您的 AD FS 部署可能已過期,而且可能需要更新以支援最新的用戶端。 若要深入瞭解如何更新 WIA 支援的使用者代理程式字串,請參閱為不支援 WIA 的裝置設定內部網路表單型驗證一文。
如需啟用表單式驗證原則的步驟,請參閱 設定驗證原則。若要新增信賴憑證者信任,請在AD FS 實例或伺服器陣列成員上執行下列 Windows PowerShell 命令。 請務必更新 AD FS 端點,並指向步驟 1 中建立的檔案。
重要
對於執行 Azure Stack Hub 2002 版和更新版本的客戶,TLS 1.2 會在 Azure Stack Hub ADFS 端點上強制執行。 因此, 客戶 ADFS 伺服器上也必須啟用 TLS 1.2。 否則,在客戶擁有的ADFS主機/伺服器陣列上執行
Add-ADFSRelyingPartyTrust
時,會發生下列錯誤:Add-ADFSRelyingPartyTrust : The underlying connection was closed: An unexpected error occurred on a send.
針對 AD FS 2016/2019
Add-ADFSRelyingPartyTrust -Name AzureStack -MetadataUrl "https://YourAzureStackADFSEndpoint/FederationMetadata/2007-06/FederationMetadata.xml" -IssuanceTransformRulesFile "C:\ClaimIssuanceRules.txt" -AutoUpdateEnabled:$true -MonitoringEnabled:$true -enabled:$true -AccessControlPolicyName "Permit everyone" -TokenLifeTime 1440
針對 AD FS 2012/2012 R2
Add-ADFSRelyingPartyTrust -Name AzureStack -MetadataUrl "https://YourAzureStackADFSEndpoint/FederationMetadata/2007-06/FederationMetadata.xml" -IssuanceTransformRulesFile "C:\ClaimIssuanceRules.txt" -AutoUpdateEnabled:$true -MonitoringEnabled:$true -enabled:$true -TokenLifeTime 1440
重要
使用 Windows Server 2012 或 2012 R2 AD FS 時,您必須使用 AD FS MMC 嵌入式管理單元來設定發行授權規則。
當您使用 Internet Explorer 或 Microsoft Edge 瀏覽器來存取 Azure Stack Hub 時,您必須忽略令牌系結。 否則,登入嘗試會失敗。 在您的 AD FS 實例或伺服器陣列成員上,執行下列命令:
注意
使用 Windows Server 2012 或 2012 R2 AD FS 時,此步驟不適用。 在此情況下,您可以放心略過此命令並繼續整合。
Set-AdfsProperties -IgnoreTokenBinding $true
建立 SPN
有許多案例需要使用服務主體名稱 (SPN) 進行驗證。 下列是部份範例:
- Azure STACK Hub AD FS 部署的 Azure CLI 使用量。
- 使用 AD FS 部署時,適用於 Azure Stack Hub 的 System Center 管理元件。
- 使用AD FS部署時,Azure Stack Hub 中的資源提供者。
- 各種應用程式。
- 您需要非互動式登入。
重要
AD FS 僅支援互動式登入工作階段。 如果您需要自動化案例的非互動式登入,您必須使用SPN。
如需建立SPN的詳細資訊,請參閱 建立AD FS的服務主體。
疑難排解
設定復原
如果發生錯誤,使環境處於無法再驗證的狀態,則可以使用回復選項。
開啟提升許可權的 Windows PowerShell 工作階段,然後執行下列命令:
$creds = Get-Credential Enter-PSSession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
然後執行下列 Cmdlet:
Reset-DatacenterIntegrationConfiguration
執行復原動作之後,所有組態變更都會復原。 只有內建 CloudAdmin 使用者的驗證是可行的。
重要
您必須設定預設提供者訂用帳戶的原始擁有者。
Set-ServiceAdminOwner -ServiceAdminOwnerUpn "azurestackadmin@[Internal Domain]"
收集其他記錄
如果任何 Cmdlet 失敗,您可以使用 Cmdlet 來收集其他記錄 Get-Azurestacklogs
。
開啟提升許可權的 Windows PowerShell 工作階段,然後執行下列命令:
$creds = Get-Credential Enter-pssession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
然後執行下列 Cmdlet:
Get-AzureStackLog -OutputPath \\myworkstation\AzureStackLogs -FilterByRole ECE