将 Azure 文件存储与多个 Active Directory 林配合使用

许多组织希望在包含多个本地 Active Directory 域服务 (AD DS) 林的环境中为 SMB Azure 文件共享使用基于标识的身份验证。 这是一个常见的 IT 方案,尤其是由于发生公司合并或收购,被收购公司的 AD 林与母公司的 AD 林相隔离的情况下。 本文介绍林信任关系的工作原理,并提供多林设置和验证的分步说明。

重要

如果你要使用 Azure 基于角色的访问控制 (RBAC) 来为特定的 Microsoft Entra 用户或组设置共享级权限,则必须先使用 Microsoft Entra Connect 将本地 AD 帐户同步到 Microsoft Entra ID。 或者,可以使用默认共享级权限

适用于

文件共享类型 SMB NFS
标准文件共享 (GPv2)、LRS/ZRS Yes No
标准文件共享 (GPv2)、GRS/GZRS Yes No
高级文件共享 (FileStorage)、LRS/ZRS Yes No

先决条件

  • 具有不同林并位于不同虚拟网络 (VNET) 中的两个 AD DS 域控制器
  • 拥有执行管理任务所需的足够 AD 权限(例如域管理员)
  • 如果使用 Azure RBAC,则两个林都必须可由单个 Microsoft Entra Connect 同步服务器访问

林信任关系的工作原理

仅支持对存储帐户所注册到的域服务的 AD 林进行 Azure 文件存储本地 AD DS 身份验证。 默认情况下,只能使用 AD DS 凭据从单个林访问 Azure 文件共享。 如果需要从不同的林访问 Azure 文件共享,则必须配置林信任。

林信任是两个 AD 林之间的传递信任,它允许一个林的任一域中的用户在另一个林的任一域中进行身份验证。

多林设置

若要配置多林设置,请执行以下步骤:

  • 收集域信息,以及域之间的 VNET 连接
  • 建立并配置林信任
  • 设置基于标识的身份验证和混合用户帐户

收集域信息

在本练习中,我们有两个本地 AD DS 域控制器,这些域控制器具有两个不同的林并位于不同的 VNET 中。

Domain VNET
林 1 onpremad1.com DomainServicesVNet WUS
林 2 onpremad2.com vnet2/workloads

建立并配置信任

要使林 1 中的客户端能够访问林 2 中的 Azure 文件存储域资源,必须在这两个林之间建立信任。 按照以下步骤建立信任。

  1. 登录到已加入林 2 域的计算机,并打开“Active Directory 域和信任”控制台。

  2. 右键单击本地域“onpremad2.com”,然后选择“信任”选项卡。

  3. 选择“新建信任”启动“新建信任向导”。

  4. 指定要与其建立信任的域名(在本例中为 onpremad1.com),然后选择“下一步”。

  5. 对于“信任类型”,请选择“林信任”,然后选择“下一步”。

    注意

    Azure 文件存储仅支持林信任。 不支持其他信任类型,例如外部信任。

  6. 对于“信任方向”,请选择“双向”,然后选择“下一步”。

    Screenshot of Active Directory Domains and Trusts console showing how to select a two-way direction for the trust.

  7. 对于“信任方”,请选择“仅限此域”,然后选择“下一步”。

  8. 可以对指定林中的用户进行身份验证,以使用本地林中的所有资源(林范围的身份验证),或仅使用你选择的那些资源(选择性身份验证)。 对于“传出信任身份验证级别”,请选择“林范围的身份验证”,这是当两个林属于同一组织时的首选选项。 选择“下一页”。

  9. 输入信任密码,然后选择“下一步”。 在指定的域中创建此信任关系时,必须使用相同的密码。

    Screenshot of Active Directory Domains and Trusts console showing how to enter a password for the trust.

  10. 此时你应会看到一条消息,指出已成功创建信任关系。 若要配置信任,请选择“下一步”。

  11. 确认传出信任,然后选择“下一步”。

  12. 输入另一个域中拥有管理员特权的用户的用户名和密码。

身份验证通过后,即会建立信任,你应该可以在“信任”选项卡中看到指定的域 onpremad1.com。

设置基于标识的身份验证和混合用户帐户

建立信任后,请按照以下步骤为每个域创建存储帐户和 SMB 文件共享,在存储帐户中启用 AD DS 身份验证,然后创建同步到 Microsoft Entra ID 的混合用户帐户。

  1. 登录到 Azure 门户并创建两个存储帐户,例如 onprem1sa 和 onprem2sa。 为了获得最佳性能,建议将存储帐户部署到计划从其访问共享的客户端所在的区域中。

    注意

    不需要创建第二个存储帐户。 这些说明旨在举例展示如何访问属于不同林的存储帐户。 如果只有一个存储帐户,则可以忽略第二个存储帐户设置说明。

  2. 在每个存储帐户中创建 SMB Azure 文件共享

  3. 使用 Microsoft Entra Connect Sync 应用程序将本地 AD 同步到 Microsoft Entra ID。

  4. 将林 1 中的 Azure VM 加入本地 AD DS 的域。 若要了解如何加入域,请查看将计算机加入域

  5. 在与林 1 关联的存储帐户(例如 onprem1sa)中启用 AD DS 身份验证。 这会在本地 AD 中创建名为 onprem1sa 的计算机帐户来表示 Azure 存储帐户,然后将存储帐户加入 onpremad1.com 域。 可以通过在“Active Directory 用户和计算机”中查找 onpremad1.com 来验证是否创建了表示存储帐户的 AD 标识。 在此示例中,你将看到一个名为 onprem1sa 的计算机帐户。

  6. 通过导航到“Active Directory”>“onpremad1.com”创建用户帐户。 右键单击“用户”,选择“创建”,输入用户名(例如 onprem1user),然后选中“密码永不过期”框(可选)。

  7. 可选:如果你要使用 Azure RBAC 分配共享级权限,则必须使用 Microsoft Entra Connect 将用户同步到 Microsoft Entra ID。 通常,Microsoft Entra Connect Sync 每隔 30 分钟同步更新一次。 但是,你可以通过打开提升的 PowerShell 会话并运行 Start-ADSyncSyncCycle -PolicyType Delta 来强制立即同步。 可能需要先通过运行 Import-Module ADSync 来安装 ADSync 模块。 若要验证用户是否已同步到 Microsoft Entra ID,请使用与多林租户关联的 Azure 订阅登录到 Azure 门户,然后选择“Microsoft Entra ID”。 选择“管理”>“用户”,然后搜索添加的用户(例如 onprem1user)。 “已启用本地同步”应设置为“是”。

  8. 使用 Azure RBAC 角色或默认共享级权限设置共享级权限。

    • 如果用户已同步到 Microsoft Entra ID,则你可以向存储帐户 onprem1sa 中的用户 onprem1user 授予共享级权限(Azure RBAC 角色),使该用户可以装载文件共享。 为此,请导航到在 onprem1sa 中创建的文件共享,然后按照为特定的 Microsoft Entra 用户或组分配共享级权限中的说明操作。
    • 否则,可以使用适用于所有经过身份验证的标识的默认共享级权限

林 2onpremad2.com(存储帐户 onprem2sa/用户 onprem2user)重复步骤 4-8。 如果你有两个以上的林,请对每个林重复这些步骤。

配置目录和文件级别权限(可选)

在多林环境下,使用 icacls 命令行实用工具为两个林中的用户配置目录和文件级权限。 请参阅使用 icacls 配置 Windows ACL

如果 icacls 失败,提示“拒绝访问”错误,请按照以下步骤使用存储帐户密钥装载共享来配置目录和文件级权限。

  1. 删除现有共享装载:net use * /delete /y

  2. 使用存储帐户密钥重新装载共享:

    net use <driveletter> \\storageaccount.file.core.chinacloudapi.cn\sharename /user:AZURE\<storageaccountname> <storageaccountkey>
    
  3. Forest1 中的客户端,使用加入到 Forest1 的存储帐户为 Forest2 中的用户设置 icacls 权限。

注意

多林环境下,不建议使用文件资源管理器来配置 ACL。 虽然可以通过文件资源管理器为属于加入存储帐户域的林的用户设置文件/目录级权限,但如果用户不属于加入存储帐户域的同一个林,则不能这样为其设置权限。

配置域后缀

如上所述,Azure 文件存储在 AD DS 中的注册方式与常规文件服务器几乎相同,它会创建一个标识(默认情况下是一个计算机帐户,但也可以是服务登录帐户)来表示 AD DS 中用于身份验证的存储帐户。 唯一的区别是,存储帐户的已注册服务主体名称 (SPN) 以 file.core.chinacloudapi.cn 结尾,这与域后缀不匹配。 由于域后缀不同,需要配置后缀路由策略来启用多林身份验证。

由于后缀 file.core.chinacloudapi.cn 是所有 Azure 文件存储资源的后缀,而不是特定 AD 域的后缀,因此客户端的域控制器不知道要将请求转发到哪个域,从而导致在其自己的域中找不到资源的所有请求都会失败。

例如,当林 1 的域中的用户想要与针对林 2 的域注册的存储帐户共享文件时,他们将做不到这一点,因为该存储帐户的服务主体没有与林 1 中任何域的后缀相匹配的后缀。

可以使用以下方法之一来配置域后缀:

修改存储帐户名称后缀并添加 CNAME 记录

可以通过修改与 Azure 文件共享关联的存储帐户名称的后缀来解决域路由问题,然后添加 CNAME 记录以将新后缀路由到存储帐户的终结点。 如果使用此配置,已加入域的客户端可以访问已加入任何林的存储帐户。 这适用于包含两个或更多林的环境。

在本示例中,有 onpremad1.com 和 onpremad2.com 域,以及 onprem1sa 和 onprem2sa,后两者是与相应域中 SMB Azure 文件共享关联的存储帐户。 这些域位于不同的林中,它们信任彼此访问自己林中的资源。 我们想要允许从属于每个林的客户端访问这两个存储帐户。 为此,需要修改存储帐户的 SPN 后缀:

onprem1sa.onpremad1.com -> onprem1sa.file.core.chinacloudapi.cn

onprem2sa.onpremad2.com -> onprem2sa.file.core.chinacloudapi.cn

这样,客户端就可以使用 net use \\onprem1sa.onpremad1.com 装载共享,因为 onpremad1 或 onpremad2 中的客户端知道需要搜索 onpremad1.com 来找到该存储帐户的适当资源。

若要使用此方法,请完成以下步骤:

  1. 确保已在两个林之间建立信任,并按照前面部分中所述设置基于标识的身份验证和混合用户帐户

  2. 使用 setspn 工具修改存储帐户的 SPN。 可以通过运行以下 Active Directory PowerShell 命令找到 <DomainDnsRoot>(Get-AdDomain).DnsRoot

    setspn -s cifs/<storage-account-name>.<DomainDnsRoot> <storage-account-name>
    
  3. 使用 Active Directory DNS 管理器添加 CNAME 条目,并针对存储帐户加入到的域中的每个存储帐户执行以下步骤。 如果使用的是专用终结点,请添加 CNAME 条目以映射到专用终结点名称。

    1. 打开 Active Directory DNS 管理器。

    2. 转到你的域(例如 onpremad1.com)。

    3. 转到“正向查找区域”。

    4. 选择与你的域同名的节点(例如 onpremad1.com)并右键单击“新建别名(CNAME)”。

    5. 对于别名,输入你的存储帐户名称。

    6. 对于完全限定的域名 (FQDN),请输入 <storage-account-name>.<domain-name>,例如 mystorageaccount.onpremad1.com。

    7. 对于目标主机 FQDN,请输入 <storage-account-name>.file.core.chinacloudapi.cn

    8. 选择“确定”

      Screenshot showing how to add a CNAME record for suffix routing using Active Directory DNS Manager.

现在,你应该可以在已加入域的客户端中使用已加入任何林的存储帐户。

注意

确保 FQDN 的主机名部分与如上所述的存储帐户名称匹配。 否则,将收到拒绝访问错误:“文件名、目录名或卷标签语法不正确。”在 SMB 会话设置过程中,网络跟踪将显示 STATUS_OBJECT_NAME_INVALID (0xc0000033) 消息。

添加自定义名称后缀和路由规则

如果你已按照上一部分所述修改了存储帐户名称后缀并添加了 CNAME 记录,则可以跳过此步骤。 如果你不想进行 DNS 更改或修改存储帐户名称后缀,可为 file.core.chinacloudapi.cn 自定义后缀配置从林 1 到林 2 的后缀路由规则。

注意

配置名称后缀路由不会影响访问本地域中的资源的功能。 只需在客户端自己的域中找不到资源时,允许客户端将请求转发到与后缀匹配的域即可。

首先,在林 2 中添加新的自定义后缀。 确保你拥有更改配置的适当管理权限,并且已在两个林之间建立信任。 然后,执行以下步骤:

  1. 登录到已加入林 2 中的域的计算机或 VM。
  2. 打开“Active Directory 域和信任”控制台。
  3. 右键单击“Active Directory 域和信任”。
  4. 选择“属性”,然后选择“添加”。
  5. 将“file.core.chinacloudapi.cn”添加为 UPN 后缀。
  6. 选择“应用”,然后单击“确定”关闭向导。

接下来,在林 1 中添加后缀路由规则,以将其重定向到林 2。

  1. 登录到已加入林 1 中的域的计算机或 VM。
  2. 打开“Active Directory 域和信任”控制台。
  3. 右键单击想要其访问文件共享的域,然后选择“信任”选项卡,并选择来自传出信任的林 2 域。
  4. 选择“属性”,然后选择“名称后缀路由”。
  5. 检查“*.file.core.chinacloudapi.cn”后缀是否显示。 否则请选择“刷新”。
  6. 选择“*.file.core.chinacloudapi.cn”,然后选择“启用”和“应用”。

验证信任是否正常工作

现在,我们将通过运行 klist 命令显示 Kerberos 凭据缓存和密钥表的内容,来验证信任是否正常工作。

  1. 登录到已加入林 1 中域的计算机或 VM,然后打开 Windows 命令提示符。
  2. 若要显示林 2 中已加入域的存储帐户的凭据缓存,请运行以下命令之一
  3. 应该会看到与下面类似的输出。 根据用于配置域后缀的方法,klist 输出略有不同。
Client: onprem1user @ ONPREMAD1.COM
Server: cifs/onprem2sa.file.core.chinacloudapi.cn @ 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
  1. 登录到已加入林 2 中域的计算机或 VM,然后打开 Windows 命令提示符。
  2. 若要在林 1 中显示已加入域的存储帐户的凭据缓存,请运行以下命令之一:
  3. 应该会看到与下面类似的输出。 根据用于配置域后缀的方法,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.chinacloudapi.cn @ 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 后缀,使多林身份验证正常工作。

重要

只能在包含两个林的环境中使用此方法。 如果你的林数超过两个,请使用其他某种方法来配置域后缀。

首先,在林 1 中添加新的自定义后缀。

  1. 登录到已加入林 1 中的域的计算机或 VM。
  2. 打开“Active Directory 域和信任”控制台。
  3. 右键单击“Active Directory 域和信任”。
  4. 选择“属性”,然后选择“添加”。
  5. 添加备用 UPN 后缀,例如“onprem1sa.file.core.chinacloudapi.cn”。
  6. 选择“应用”,然后单击“确定”关闭向导。

接下来,在林 2 中添加后缀路由规则。

  1. 登录到已加入林 2 中的域的计算机或 VM。
  2. 打开“Active Directory 域和信任”控制台。
  3. 右键单击要访问文件共享的域,选择“信任”选项卡,然后选择已在其中添加了后缀路由名称的林 2 的传出信任。
  4. 选择“属性”,然后选择“名称后缀路由”。
  5. 检查“onprem1sa.file.core.chinacloudapi.cn”后缀是否显示。 否则请选择“刷新”。
  6. 选择“onprem1sa.file.core.chinacloudapi.cn”,然后选择“启用”和“应用”。

后续步骤

有关详细信息,请参阅以下资源: