Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
许多组织希望在跨本地 Active Directory 域服务 (AD DS) 和 Microsoft Entra ID(以前为 Azure Active Directory)的环境中对 SMB Azure 文件共享使用基于标识的身份验证,但不满足所需的操作系统或域先决条件。
在这种情况下,可以为混合用户标识启用 Microsoft Entra Kerberos 身份验证,然后在本地 AD DS 和 Entra ID 之间建立云信任,以使用本地凭据访问 SMB 文件共享。 本文介绍云信任的工作原理,并提供设置与验证说明。 它还包括在 Entra ID 和受信任域对象中轮换服务帐户的 Kerberos 密钥的步骤,以及根据需要删除受信任域对象和所有 Kerberos 设置的步骤。
本文重点介绍如何使用 Microsoft Entra Connect Sync 对混合用户标识进行身份验证,这些标识是同步到 Microsoft Entra ID 的本地 AD DS 标识。
应用场景
以下示例描述了你可能想要配置云信任的方案:
你有传统的本地 AD DS,但不能将其用于身份验证,因为你无法与域控制器进行畅通无阻的网络连接。
你已开始迁移到云,但当前有仍在传统本地 AD DS 上运行的应用程序。
某些或所有客户端计算机不满足 Microsoft Entra Kerberos 身份验证的操作系统要求。
权限
若要完成本文中的步骤,需要满足以下条件:
- 本地 Active Directory 管理员用户名和密码。 此帐户必须是该域的域管理员组成员,或者是域林的企业管理员组成员。
- Microsoft Entra 全局管理员帐户用户名和密码。
先决条件
在实现基于传入信任的身份验证流之前,请确保满足以下先决条件:
| 先决条件 | 描述 |
|---|---|
| 客户端必须运行 Windows 10、Windows Server 2012 或更高版本的 Windows。 | |
| 客户端必须加入 Active Directory (AD)。 域的功能级别必须是 Windows Server 2012 或更高版本。 | 可以通过运行 dsregcmd 命令来确定客户端是否已加入 Active Directory: dsregcmd.exe /status |
| Microsoft Entra 租户。 | Microsoft Entra 租户是一个由你所在组织的 IT 部门控制的身份安全边界。 它是 Microsoft Entra ID 的实例,其中包含了有关单个组织的信息。 |
| 计划用于身份验证的同一 Entra 租户下的 Azure 订阅。 | |
| Azure 订阅中的 Azure 存储帐户。 | Azure 存储帐户是一种资源,充当容器,用于对 Azure 存储中的所有数据服务(包括文件)进行分组。 |
| 必须安装 Microsoft Entra Connect Sync 。 | 这些解决方案用于 Microsoft Entra ID 和本地 AD DS 中同时存在标识的混合环境。 |
启用 Microsoft Entra Kerberos 身份验证
如果已在存储帐户上启用了 Microsoft Entra Kerberos 身份验证,则可以跳过此步骤,然后继续创建并配置 Microsoft Entra Kerberos 受信任域对象。
可以使用 Azure 门户、PowerShell 或 Azure CLI 在 Azure 文件中为混合用户帐户启用 Microsoft Entra Kerberos 身份验证。
若要使用 Azure 门户启用 Microsoft Entra Kerberos 身份验证,请执行以下步骤。
登录到 Azure 门户并选择要为其启用 Microsoft Entra Kerberos 身份验证的存储帐户。
在“数据存储”下,选择“文件共享”。
在基于标识的访问旁边,选择配置状态,例如“未配置”。
在 Microsoft Entra Kerberos 下,选择 设置。
选中 Microsoft Entra Kerberos 复选框。
选: 若要通过 Windows 文件资源管理器配置目录和文件级权限,请为本地 Active Directory 指定域名和域 GUID。 可以从域管理员或从已加入 Active Directory 的客户端运行以下 Active Directory PowerShell cmdlet 来获取此信息:
Get-ADDomain域名在输出中显示为DNSRoot,域 GUID 在输出中显示为ObjectGUID。 如果希望使用 icacls 配置目录和文件级权限,可以跳过此步骤。 但是,如果想要使用 icacls,客户端需要与on-premises Active Directory建立不受限制的网络连接。选择“保存”。
警告
如果以前通过手动有限预览步骤启用了 Microsoft Entra Kerberos 认证,以将 FSLogix 配置文件存储在加入 Entra 的 VM 的 Azure Files 上,则存储帐户服务主体的密码每六个月过期一次。 密码过期后,用户无法获取文件共享的 Kerberos 票证。 若要缓解该问题,请参阅为混合用户启用 Microsoft Entra Kerberos 身份验证时可能出现的错误下的“错误 - Microsoft Entra ID 中的服务主体密码已过期”。
向新服务主体授予管理员同意
启用 Microsoft Entra Kerberos 身份验证后,向管理员授予在 Entra 租户中注册的新 Entra 应用程序许可。 进程自动生成此服务主体。 它不用于对文件共享进行授权,因此不要对服务主体进行除此处记录的任何其他编辑。 如果这么做,可能会产生错误。
你可以按照以下步骤从 Azure 门户配置 API 权限:
- 打开 Microsoft Entra ID。
- 在服务菜单的“管理”下,选择“应用注册”。
- 选择“所有应用程序”。
- 选择名称与[存储帐户]
<your-storage-account-name>.file.core.chinacloudapi.cn匹配的应用程序。 - 在服务菜单的“管理”下,选择“API 权限”。
- 选择“向 [目录名称] 授予管理员同意”,以向目录中所有帐户请求的三项 API 权限(openid、profile 和 User.Read)授予同意。
- 请选择“是”以确认。
重要
如果使用 Microsoft Entra Kerberos 身份验证通过专用终结点或专用链接连接到存储帐户,请将专用链接 FQDN 添加到存储帐户的 Entra 应用程序。 有关说明,请参阅 故障排除指南中的条目。
在存储帐户上禁用多重身份验证
Microsoft Entra Kerberos 不支持使用 MFA 访问使用 Microsoft Entra Kerberos 配置的 Azure 文件共享。 如果 MFA 条件访问策略适用于所有应用,则必须将表示存储帐户的 Microsoft Entra 应用从策略中排除。
存储帐户应用应与条件访问排除列表中的存储帐户同名。 在条件访问排除列表中搜索存储帐户应用时,请搜索:[存储帐户] <your-storage-account-name>.file.core.chinacloudapi.cn
请记得将 <your-storage-account-name> 替换为正确的值。
重要
如果未从存储帐户应用中排除 MFA 策略,则无法访问文件共享。 尝试使用 net use 映射文件共享会导致出现一条错误消息,显示“系统错误 1327:帐户限制阻止此用户登录”。 例如:不允许使用空白密码、限制登录时间或已强制实施策略限制。”
有关禁用 MFA 的指导,请参阅以下文章:
分配共享级权限
当你启用基于标识的访问时,必需为每个共享分配有权访问特定共享的用户和组。 允许某个用户或组访问共享后,单个文件和目录的 Windows ACL(也称为 NTFS 权限)将开始控制访问。 此权限系统允许对权限进行精细控制,类似于 Windows Server 上的 SMB 共享。
若要设置共享级别权限,请按照将共享级别权限分配给标识中的说明操作。
配置目录和文件级别权限
设置共享级别权限后,可以向用户或组分配目录和文件级权限。 此步骤要求使用具备畅通网络连接到本地 Active Directory 的设备。
若要配置目录和文件级别权限,请按照通过 SMB 配置目录和文件级别权限中的说明操作。
创建和配置 Microsoft Entra Kerberos 受信任的域对象
若要创建和配置 Entra Kerberos 受信任域对象,请使用 Azure AD 混合身份验证管理 PowerShell 模块。 通过使用此模块,混合标识组织可以将新式凭据用于其应用程序,Entra ID 将成为云和本地身份验证的受信任源。
设置受信任的域对象
使用 Azure AD 混合身份验证管理 PowerShell 模块在 Active Directory 域中设置受信任的域对象,并使用 Entra ID 注册信任信息。 此操作将创建入站信任关系,使 Entra ID 能够信任本地部署的 Active Directory。
只需为每个域设置一次受信任的域对象。 如果已为域设置此对象,则可以跳过此部分,并继续 配置客户端以检索 Kerberos 票证。
安装 Azure AD 混合身份验证管理 PowerShell 模块
使用 “以管理员身份运行 ”选项启动 Windows PowerShell 会话。
使用以下脚本安装 Azure AD 混合身份验证管理 PowerShell 模块。 脚本:
- 启用 TLS 1.2 进行通信。
- 安装 NuGet 包提供程序。
- 注册 PSGallery 存储库。
- 安装 PowerShellGet 模块。
- 安装 Azure AD 混合身份验证管理 PowerShell 模块。
- Azure AD 混合身份验证管理 PowerShell 使用 AzureADPreview 模块,该模块提供高级 Entra 管理功能。
- 为了防止与 AzureAD PowerShell 模块发生不必要的安装冲突,此命令包括
-AllowClobber选项标志。
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Install-PackageProvider -Name NuGet -Force
if (@(Get-PSRepository | ? {$_.Name -eq "PSGallery"}).Count -eq 0){
Register-PSRepository -DefaultSet-PSRepository -Name "PSGallery" -InstallationPolicy Trusted
}
Install-Module -Name PowerShellGet -Force
Install-Module -Name AzureADHybridAuthenticationManagement -AllowClobber
设置受信任的域对象
使用 “以管理员身份运行 ”选项启动 Windows PowerShell 会话。
设置通用参数。 在运行脚本之前对其进行自定义。
- 将
$domain参数设置为本地 Active Directory 域名。 - 当
Get-Credential提示时,输入本地 Active Directory 管理员用户名和密码。 此帐户必须是该域的域管理员组成员,或者是域林的企业管理员组成员。 - 将
$cloudUserName参数设置为用于 Entra ID 云访问的全局管理员特权帐户的用户名。
注意
如果要使用当前 Windows 登录帐户访问本地 Active Directory,则可以跳过分配凭据给
$domainCred参数的步骤。 如果采用此方法,则不要在此步骤之后的 PowerShell 命令中包含-DomainCredential参数。$domain = "your on-premises domain name, for example contoso.com" $domainCred = Get-Credential $cloudUserName = "Microsoft Entra ID user principal name, for example admin@contoso.partner.onmschina.cn"- 将
检查当前 Kerberos 域设置。
运行以下命令,检查域的当前 Kerberos 设置:
Get-AzureADKerberosServer -Domain $domain ` -DomainCredential $domainCred ` -UserPrincipalName $cloudUserName如果这是您第一次调用任何 Microsoft Entra Kerberos 命令,系统会提示您获取 Entra ID 云访问权限。
- 输入 Entra ID 全局管理员帐户的密码。
- 如果你的组织使用其他新式身份验证方法(如 Entra 多重身份验证或智能卡),请按照请求登录的说明进行作。
如果首次配置 Microsoft Entra Kerberos 设置,
Get-AzureADKerberosServercmdlet 会显示空白信息,如以下示例输出所示:ID : UserAccount : ComputerAccount : DisplayName : DomainDnsName : KeyVersion : KeyUpdatedOn : KeyUpdatedFrom : CloudDisplayName : CloudDomainDnsName : CloudId : CloudKeyVersion : CloudKeyUpdatedOn : CloudTrustDisplay :如果域已支持 FIDO 身份验证,则
Get-AzureADKerberosServercmdlet 会显示 Entra 服务帐户信息,如以下示例输出所示。CloudTrustDisplay字段会返回空值。ID : XXXXX UserAccount : CN=krbtgt-AzureAD, CN=Users, DC=contoso, DC=com ComputerAccount : CN=AzureADKerberos, OU=Domain Controllers, DC=contoso, DC=com DisplayName : XXXXXX_XXXXX DomainDnsName : contoso.com KeyVersion : 53325 KeyUpdatedOn : 2/24/2024 9:03:15 AM KeyUpdatedFrom : ds-aad-auth-dem.contoso.com CloudDisplayName : XXXXXX_XXXXX CloudDomainDnsName : contoso.com CloudId : XXXXX CloudKeyVersion : 53325 CloudKeyUpdatedOn : 2/24/2024 9:03:15 AM CloudTrustDisplay :添加受信任的域对象。
运行
Set-AzureADKerberosServerPowerShell cmdlet 以添加受信任的域对象。 请务必包含-SetupCloudTrust参数。 如果没有 Entra 服务帐户,此命令将创建新的 Entra 服务帐户。 此命令仅在存在 Entra 服务帐户时创建请求的受信任域对象。Set-AzureADKerberosServer -Domain $domain -UserPrincipalName $cloudUserName -DomainCredential $domainCred -SetupCloudTrust注意
在多域森林中,为了避免在子域上运行命令时出现错误 LsaCreateTrustedDomainEx 0x549:
- 在根域上运行命令(包括
-SetupCloudTrust参数)。 - 在不使用
-SetupCloudTrust参数的情况下,在子域上运行相同命令。
创建受信任的域对象后,可以使用 PowerShell cmdlet 检查更新后的
Get-AzureADKerberosServerKerberos 设置,如上一步所示。Set-AzureADKerberosServer如果 cmdlet 使用-SetupCloudTrust参数成功运行,则CloudTrustDisplay字段返回Microsoft.AzureAD.Kdc.Service.TrustDisplay,如以下示例输出中所示:ID : XXXXX UserAccount : CN=krbtgt-AzureAD, CN=Users, DC=contoso, DC=com ComputerAccount : CN=AzureADKerberos, OU=Domain Controllers, DC=contoso, DC=com DisplayName : XXXXXX_XXXXX DomainDnsName : contoso.com KeyVersion : 53325 KeyUpdatedOn : 2/24/2024 9:03:15 AM KeyUpdatedFrom : ds-aad-auth-dem.contoso.com CloudDisplayName : XXXXXX_XXXXX CloudDomainDnsName : contoso.com CloudId : XXXXX CloudKeyVersion : 53325 CloudKeyUpdatedOn : 2/24/2024 9:03:15 AM CloudTrustDisplay : Microsoft.AzureAD.Kdc.Service.TrustDisplay注意
Azure 主权云要求设置
TopLevelNames属性。 请为由世纪互联运营的 Microsoft Azure 设置chinacloudapi.cn。 使用以下 PowerShell 命令将受信任的域对象设置为该顶级域名:Set-AzureADKerberosServer -Domain $domain -DomainCredential $domainCred -CloudCredential $cloudCred -SetupCloudTrust -TopLevelNames "chinacloudapi.cn"可以使用以下 PowerShell 命令验证设置:Get-AzureADKerberosServer -Domain $domain -DomainCredential $domainCred -UserPrincipalName $cloudUserName | Select-Object -ExpandProperty CloudTrustDisplay- 在根域上运行命令(包括
配置客户端以检索 Kerberos 票证
标识 Microsoft Entra 租户 ID ,并使用组策略配置要装载或使用 Azure 文件共享的客户端计算机。 必须在使用Azure Files的每个客户端上执行此作。
将客户端上的此组策略设置为“已启用”: Administrative Templates\System\Kerberos\Specify KDC proxy servers for Kerberos clients
使用基于传入信任的流将组策略设置部署到客户端计算机:
编辑“管理模板\系统\Kerberos\指定 Kerberos 客户端的 KDC 代理服务器”策略设置。
选择“启用”。
在 “选项”下,选择“ 显示...”。此项选择将打开“显示内容”对话框。
使用如下所示映射定义 KDC 代理服务器设置。 将 Entra 租户 ID 替换为
your_Entra_ID_tenant_id占位符。 请注意值映射中https之后和结尾/之前的空格。值名称 价值观 KERBEROS.MICROSOFTONLINE.COM <https login.partner.microsoftonline.cn:443: your_Entra_ID_tenant_id/kerberos />选择“确定”以关闭“显示内容”对话框。
在“为 Kerberos 客户端指定 KDC 代理服务器”对话框上选择“应用”。
轮换 Kerberos 密钥
出于管理目的,定期轮换已创建的 Entra 服务帐户和受信任的域对象的 Kerberos 密钥。
Set-AzureADKerberosServer -Domain $domain `
-DomainCredential $domainCred `
-UserPrincipalName $cloudUserName -SetupCloudTrust `
-RotateServerKey
轮换密钥后,需要几个小时才能在 Kerberos KDC 服务器之间传播更改的密钥。 由于密钥分发时间,24 小时内可轮换一次密钥。 如果需要出于任何原因在 24 小时内再次轮换密钥,例如在创建受信任的域对象之后,请添加 -Force 参数:
Set-AzureADKerberosServer -Domain $domain `
-DomainCredential $domainCred `
-UserPrincipalName $cloudUserName -SetupCloudTrust `
-RotateServerKey -Force
删除受信任的域对象
可以使用以下命令删除已添加的受信任的域对象:
Remove-AzureADKerberosServerTrustedDomainObject -Domain $domain `
-DomainCredential $domainCred `
-UserPrincipalName $cloudUserName
此命令仅删除受信任的域对象。 如果域支持 FIDO 身份验证,则可以删除受信任的域对象,同时维护 FIDO 身份验证服务所需的 Entra 服务帐户。
删除所有 Kerberos 设置
可以使用以下命令删除 Entra 服务帐户和受信任的域对象:
Remove-AzureADKerberosServer -Domain $domain `
-DomainCredential $domainCred `
-UserPrincipalName $cloudUserName