可以使用 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 是帐户安全令牌服务(STS),用于将声明发送到 Azure Stack Hub AD FS(资源 STS)。 在 Azure Stack Hub 中,自动化通过现有 AD FS 的元数据终结点来建立声明提供者信任关系。
在现有的 AD FS 中,必须配置一个信赖方信任关系。 此步骤不是由自动化完成的,必须由作员配置。 可以使用模式 https://adfs.<Region>.<ExternalFQDN>/
创建 AD FS 的 Azure Stack Hub VIP 终结点。
信赖方信任配置还要求配置 Azure 提供的声明转换规则。
对于 Graph 配置,必须提供在现有 Active Directory 中拥有“读取”权限的服务帐户。 自动化需要使用此帐户作为输入来启用 RBAC 方案。
在最后一步,将为默认提供程序订阅配置新的所有者。 登录到 Azure Stack Hub 管理员门户时,此帐户对所有资源具有完全访问权限。
要求:
组件 | 要求 |
---|---|
Graph | Microsoft Active Directory 2012/2012 R2/2016 2019 |
AD FS | Windows Server 2012/2012 R2/2016 2019 |
设置“Graph”集成
Graph 仅支持与单个 Active Directory 林集成。 如果存在多个林,则仅使用配置中指定的林来提取用户和组。
需要以下信息作为自动化参数的输入:
参数 | 部署工作表参数 | DESCRIPTION | 示例: |
---|---|---|---|
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 时,它会验证提供的域是否为根域、可访问全局目录服务器,以及提供的帐户是否被授予读取访问权限。
参数 DESCRIPTION SkipRootDomainValidation
指定必须使用子域而不是建议的根域。 ValidateParameters
绕过所有验证检查。
图形协议和端口
Azure Stack Hub 中的图形服务使用以下协议和端口与可写入的全局目录服务器(GC)和密钥分发中心(KDC)通信,这些服务器可以处理目标 Active Directory 林中的登录请求。
Azure Stack Hub 中的图形服务使用以下协议和端口与目标 Active Directory 通信:
类型 | 港口 | 协议 |
---|---|---|
LDAP | 389 | TCP 和 UDP |
LDAP 安全套接层 (SSL) | 636 | TCP |
LDAP GC | 3268 | TCP |
LDAP GC SSL | 3269 | TCP |
通过下载联合元数据来设置 AD FS 集成
以下信息是作为自动化参数的输入所必需的:
参数 | 部署工作表参数 | DESCRIPTION | 示例: |
---|---|---|---|
CustomAdfsName | AD FS 提供程序名称 | 声明提供程序的名称。 AD FS 登录页上会显示此名称。 |
Contoso |
CustomAD FSFederationMetadataEndpointUri |
AD FS 元数据 URI | 联合元数据链接。 | https://ad01.contoso.com/federationmetadata/2007-06/federationmetadata.xml |
签名证书吊销检查 | 暂无 | 用于跳过 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 开始,如果符合以下任一条件,则可以使用此方法:
- AD FS 的证书链不同于 Azure Stack Hub 中的其他所有终结点。
- 未在 Azure Stack Hub 的 AD FS 实例与现有 AD FS 服务器之间建立网络连接。
以下信息是作为自动化参数的输入所必需的:
参数 | DESCRIPTION | 示例: |
---|---|---|
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 窗体的 Extranet 和 Intranet 身份验证。 可以运行以下 cmdlet 来检查它是否已启用:
Get-AdfsAuthenticationProvider | where-object { $_.name -eq "FormsAuthentication" } | select Name, AllowedForPrimaryExtranet, AllowedForPrimaryIntranet
注释
Windows 集成身份验证 (WIA) 支持的用户代理字符串对于你的 AD FS 部署而言可能已过时,需要更新才能支持最新的客户端。 可以在为不支持 WIA 的设备配置基于 Intranet 窗体的身份验证一文中阅读有关更新 WIA 支持的用户代理字符串的更多信息。
有关启用基于窗体的身份验证策略的步骤,请参阅配置身份验证策略。若要添加信赖方信任,请在 AD FS 实例或场成员上运行以下 Windows PowerShell 命令。 请务必更新 AD FS 终结点,并指向步骤 1 中创建的文件。
重要
对于运行 Azure Stack Hub 版本 2002 及更高版本的客户,将在 Azure Stack Hub ADFS 终结点上强制实施 TLS 1.2。 因此,还必须在客户 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 CLI 在 Azure Stack Hub 中部署 AD FS。
- 使用 AD FS 部署时的 System Center Management Pack for Azure Stack Hub。
- 使用 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 失败,可以使用 Get-Azurestacklogs
cmdlet 来收集其他日志。
打开权限提升的 Windows PowerShell 会话,并运行以下命令:
$creds = Get-Credential Enter-pssession -ComputerName <IP Address of ERCS> -ConfigurationName PrivilegedEndpoint -Credential $creds
然后运行以下 cmdlet:
Get-AzureStackLog -OutputPath \\myworkstation\AzureStackLogs -FilterByRole ECE