在本地 AD DS 与 Microsoft Entra ID 之间配置云信任以访问 Azure 文件存储
许多组织希望在跨本地 Active Directory 域服务 (AD DS) 和 Microsoft Entra ID(以前为 Azure Active Directory)的环境中对 SMB Azure 文件共享使用基于标识的身份验证,但不满足所需的操作系统或域先决条件。
在这种情况下,客户可以启用混合用户标识的 Microsoft Entra Kerberos 身份验证,然后在本地 AD DS 与 Microsoft Entra ID 之间建立云信任,以使用其本地凭据访问 SMB 文件共享。 本文介绍云信任的工作原理,并提供设置与验证说明。 其中还包括在 Microsoft Entra ID 和受信任的域对象中轮换服务帐户的 Kerberos 密钥的步骤,以及移除受信任的域对象和所有 Kerberos 设置的步骤(如果需要)。
本文重点介绍如何对混合用户标识进行身份验证,这些标识是使用 Microsoft Entra Connect 同步到 Microsoft Entra ID 的本地 AD DS 标识。 Azure 文件目前不支持仅限云的标识。
适用于
文件共享类型 | SMB | NFS |
---|---|---|
标准文件共享 (GPv2)、LRS/ZRS | ||
标准文件共享 (GPv2)、GRS/GZRS | ||
高级文件共享 (FileStorage)、LRS/ZRS |
方案
下面是可能需要配置云信任的方案示例:
你有传统的本地 AD DS,但无法将其用于身份验证,因为你没有与域控制器的无阻网络连接。
你已开始迁移到云,但目前仍有应用程序在传统的本地 AD DS 上运行。
某些或所有客户端计算机不满足 Microsoft Entra Kerberos 身份验证的操作系统要求。
权限
若要完成本文中所述的步骤,需要:
- 本地 Active Directory 管理员用户名和密码
- Microsoft Entra 全局管理员帐户用户名和密码
先决条件
在实现基于传入信任的身份验证流,请确保满足以下先决条件:
先决条件 | 描述 |
---|---|
客户端必须运行 Windows 10、Windows Server 2012 或更高版本的 Windows。 | |
客户端必须加入 Active Directory (AD)。 域的功能级别必须是 Windows Server 2012 或更高版本。 | 可以通过运行 dsregcmd 命令:dsregcmd.exe /status 来确定客户端是否建立 AD 联接 |
一个 Microsoft Entra 租户。 | Microsoft Entra 租户是由组织 IT 部门控制的标识安全边界。 它是 Microsoft Entra ID 的实例,其中包含了有关单个组织的信息。 |
同一 Microsoft Entra 租户下计划用于身份验证的 Azure 订阅。 | |
Azure 订阅中的 Azure 存储帐户。 | Azure 存储帐户是一种资源,充当容器,用于对 Azure 存储中的所有数据服务(包括文件)进行分组。 |
必须安装 Microsoft Entra Connect。 | 这些解决方案用于 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 身份验证的存储帐户。
在“数据存储”下,选择“文件共享”。
选择 Active Directory 旁边的配置状态(例如“未配置”)。
在 Microsoft Entra Kerberos 下,选择“设置”。
选中 Microsoft Entra Kerberos 复选框。
可选:如果要通过 Windows 文件资源管理器配置目录和文件级别权限,则必须为本地 AD 指定域名和域 GUID。 可以从域管理员处获取此信息,也可以通过从已加入本地 AD 的客户端运行以下 Active Directory PowerShell cmdlet 来获取此信息:
Get-ADDomain
。 你的域名应已在DNSRoot
下的输出中列出,并且域 GUID 应已在ObjectGUID
下列出。 如果想要使用 icacls 配置目录和文件级别权限,可以跳过此步骤。 但是,如果要使用 icacls,客户端将需要与本地 AD 进行畅通无阻的网络连接。选择“保存”。
警告
如果之前通过手动有限预览步骤启用了 Microsoft Entra Kerberos 身份验证,以将 FSLogix 配置文件存储在已加入 Microsoft Entra 的 VM 的 Azure 文件存储上,则存储帐户服务主体的密码设置为每隔六个月过期。 密码过期后,用户将无法获取文件共享的 Kerberos 票证。 若要缓解该问题,请参阅为混合用户启用 Microsoft Entra Kerberos 身份验证时可能出现的错误下的“错误 - Microsoft Entra ID 中的服务主体密码已过期”。
向新服务主体授予管理员同意
启用 Microsoft Entra Kerberos 身份验证后,需要向 Microsoft Entra 租户中注册的新 Microsoft Entra 应用程序显式授予管理员同意。 此服务主体是自动生成的,不用于对文件共享授权,因此请不要对服务主体进行此处所述编辑以外的任何编辑。 如果这么做,可能会产生错误。
你可以按照以下步骤从 Azure 门户配置 API 权限:
- 打开 Microsoft Entra ID。
- 在服务菜单的“管理”下,选择“应用注册”。
- 选择“所有应用程序”。
- 选择名称与“[存储帐户]
<your-storage-account-name>
.file.core.chinacloudapi.cn”匹配的应用程序。 - 在服务菜单的“管理”下,选择“API 权限”。
- 选择“向 [目录名称] 授予管理员同意”,以向目录中所有帐户请求的三项 API 权限(openid、profile 和 User.Read)授予同意。
- 请选择“是”以确认。
重要
如果使用 Microsoft Entra Kerberos 身份验证通过专用终结点/专用链接连接到存储帐户,则还需要将专用链接 FQDN 添加到存储帐户的 Microsoft 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 服务器上的 SMB 共享。
若要设置共享级别权限,请按照将共享级别权限分配给标识中的说明操作。
配置目录和文件级别权限
设置共享级别权限后,可以将目录/文件级别权限分配给用户或组。 这需要设备与本地 AD 建立畅通无阻的网络连接。
若要配置目录和文件级别权限,请按照通过 SMB 配置目录和文件级别权限中的说明操作。
创建和配置 Microsoft Entra Kerberos 受信任的域对象
若要创建和配置 Microsoft Entra Kerberos 受信任的域对象,需安装 Azure AD 混合身份验证管理 PowerShell 模块。 借助此模块,混合标识组织可以对其应用程序使用新式凭据,而且 Microsoft Entra ID 能够成为云和本地身份验证的可靠来源。
设置受信任的域对象
使用 Azure AD 混合身份验证管理 PowerShell 模块在本地 AD 域中设置受信任的域对象,并使用 Microsoft Entra ID 注册信任信息。 这会在本地 AD 中创建入站信任关系,从而使 Microsoft Entra ID 能够信任本地 AD。
只需为每个域设置一次受信任的域对象。 如果已对域执行此操作,可以跳过本部分,并继续配置客户端以检索 kerberos 票证。
安装 Azure AD 混合身份验证管理 PowerShell 模块
使用“以管理员身份运行”选项启动 Windows PowerShell 会话。
使用以下脚本安装 Azure AD 混合身份验证管理 PowerShell 模块。 脚本:
- 启用 TLS 1.2 进行通信。
- 安装 NuGet 包提供程序。
- 注册 PSGallery 存储库。
- 安装 PowerShellGet 模块。
- 安装 Azure AD 混合身份验证管理 PowerShell 模块。
- Azure AD 混合身份验证管理 PowerShell 使用 AzureADPreview 模块,该模块提供高级 Microsoft 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
参数设置为用于 Microsoft Entra 云访问的全局管理员特权帐户的用户名。
注意
如果要将当前 Windows 登录帐户用于本地 Active Directory 访问,可以跳过将凭据分配给
$domainCred
参数的步骤。 如果采用此方法,则不要在此步骤之后的 PowerShell 命令中包含-DomainCredential
参数。$domain = "your on-premesis domain name, for example contoso.com" $domainCred = Get-Credential $cloudUserName = "Azure AD user principal name, for example admin@contoso.partner.onmschina.cn"
- 将
检查当前 Kerberos 域设置。
运行以下命令,检查域的当前 Kerberos 设置:
Get-AzureAdKerberosServer -Domain $domain ` -DomainCredential $domainCred ` -UserPrincipalName $cloudUserName
如果这是第一次调用任何 Microsoft Entra Kerberos 命令,系统会提示你访问 Microsoft Entra 云。
- 输入你的 Microsoft Entra 全局管理员帐户密码。
- 如果你的组织使用其他新式身份验证方法(如 Microsoft Entra 多重身份验证或智能卡),请按照要求的说明进行登录。
如果首次配置 Microsoft Entra Kerberos 设置,
Get-AzureAdKerberosServer
cmdlet 会显示空白信息,如以下示例输出所示:ID : UserAccount : ComputerAccount : DisplayName : DomainDnsName : KeyVersion : KeyUpdatedOn : KeyUpdatedFrom : CloudDisplayName : CloudDomainDnsName : CloudId : CloudKeyVersion : CloudKeyUpdatedOn : CloudTrustDisplay :
如果域已支持 FIDO 身份验证,则
Get-AzureAdKerberosServer
cmdlet 会显示 Microsoft 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-AzureAdKerberosServer
PowerShell cmdlet 以添加受信任的域对象。 请务必包含-SetupCloudTrust
参数。 如果没有 Microsoft Entra 服务帐户,此命令会创建一个新的 Microsoft Entra 服务帐户。 仅当存在 Microsoft Entra 服务帐户时,此命令才会创建请求的受信任的域对象。Set-AzureADKerberosServer -Domain $domain -UserPrincipalName $cloudUserName -DomainCredential $domainCred -SetupCloudTrust
注意
在多域林中,若要避免在子域上运行命令时出现 LsaCreateTrustedDomainEx 0x549 错误,请执行以下操作:
- 在根域上运行命令(包括
-SetupCloudTrust
参数)。 - 在不使用
-SetupCloudTrust
参数的情况下,在子域上运行相同命令。
创建受信任的域对象后,可以使用
Get-AzureAdKerberosServer
PowerShell cmdlet 检查更新的 Kerberos 设置,如上一步所示。 如果已使用-SetupCloudTrust
参数成功运行Set-AzureAdKerberosServer
cmdlet,则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 文件存储的每个客户端上执行此操作。
在客户端上将此组策略配置为“已启用”:Administrative Templates\System\Kerberos\Allow retrieving the Azure AD Kerberos Ticket Granting Ticket during logon
使用基于传入信任的流将以下组策略设置部署到客户端计算机:
编辑“管理模板\系统\Kerberos\指定 Kerberos 客户端的 KDC 代理服务器”策略设置。
选择“启用”。
在“选项”下,选择“显示...”。此时将打开“显示内容”对话框。
使用如下所示映射定义 KDC 代理服务器设置。 将
your_Azure_AD_tenant_id
占位符替换为你的 Microsoft Entra 租户 ID。 请注意值映射中https
之后和结尾/
之前的空格。值名称 值 KERBEROS.MICROSOFTONLINE.COM <https login.partner.microsoftonline.cn:443: your_Azure_AD_tenant_id
/kerberos />选择“确定”以关闭“显示内容”对话框。
在“指定 Kerberos 客户端的 KDC 代理服务器”对话框中选择“应用”。
轮换 Kerberos 密钥
可以出于管理目的定期轮换创建的 Microsoft 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 身份验证服务所需的 Microsoft Entra 服务帐户。
删除所有 Kerberos 设置
可以使用以下命令移除 Microsoft Entra 服务帐户和受信任的域对象:
Remove-AzureAdKerberosServer -Domain $domain `
-DomainCredential $domainCred `
-UserPrincipalName $cloudUserName