在 Azure 文件存储上启用 Microsoft Entra 域服务身份验证

Azure 文件存储采用以下方法来支持使用 Kerberos 身份验证协议通过服务器消息块 (SMB) 对 Windows 文件共享进行基于标识的身份验证:

  • 本地 Active Directory 域服务 (AD DS)
  • Microsoft Entra 域服务
  • 用于混合用户标识的 Microsoft Entra Kerberos

本文重点介绍如何启用和配置 Microsoft Entra 域服务(以前为 Azure Active Directory 域服务),以便通过 Azure 文件共享进行基于标识的身份验证。 在此身份验证方案中,Microsoft Entra 凭据和 Microsoft Entra 域服务凭据相同,可以互换使用。

强烈建议查看工作原理部分,选择合适的 AD 源来进行身份验证。 选择的 AD 源不同,设置也会不同。

如果你不熟悉 Azure 文件存储,我们建议在阅读本文之前先阅读规划指南

注意

Azure 文件存储支持通过具有 RC4-HMAC 和 AES-256 加密的 Microsoft Entra 域服务进行 Kerberos 身份验证。 建议使用 AES-256。

Azure 文件存储支持使用 Microsoft Entra ID 进行完全或部分同步的 Microsoft Entra 域服务的身份验证。 对于存在范围同步的环境,管理员应注意,Azure 文件存储仅接受授予已同步主体的 Azure RBAC 角色分配。 Azure 文件存储服务将忽略分配给未从 Microsoft Entra ID 同步到 Microsoft Entra 域服务标识的角色分配。

适用于

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

先决条件

在通过 SMB 为 Azure 文件共享启用 Microsoft Entra 域服务之前,请确保满足以下先决条件:

  1. 选择或创建 Microsoft Entra 租户。

    可以使用新的或现有的租户。 要访问的租户和文件共享必须与同一订阅相关联。

    若要创建新的 Microsoft Entra 租户,可以添加 Microsoft Entra 租户和 Microsoft Entra 订阅。 如果已有一个 Microsoft Entra 租户,但想要创建新租户以便与 Azure 文件共享一同使用,请参阅创建 Azure Active Directory 租户

  2. 在 Microsoft Entra 租户上启用 Microsoft Entra 域服务。

    若要支持使用 Microsoft Entra 凭据进行身份验证,必须为 Microsoft Entra 租户启用 Microsoft Entra 域服务。 如果你不是 Microsoft Entra 租户的管理员,请与管理员联系并按照分步指南操作,以使用 Azure 门户启用 Microsoft Entra 域服务

    Microsoft Entra 域服务部署通常需要大约 15 分钟才能完成。 在继续执行下一步之前,请验证 Microsoft Entra 域服务的运行状况状态是否显示“正在运行”,以及是否启用了密码哈希同步。

  3. 使用 Microsoft Entra 域服务将 Azure VM 加入域。

    若要使用来自 VM 的 Microsoft Entra 凭据访问 Azure 文件共享,你的 VM 必须已通过 Microsoft Entra 域服务加入域。 有关如何将 VM 加入域的详细信息,请参阅将 Windows Server 虚拟机加入托管域。 只有在运行于高于 Windows 7 或 Windows Server 2008 R2 版本的 OS 上的 Azure VM 上才支持通过 SMB 为 Azure 文件共享启用 Microsoft Entra 域服务身份验证。

    注意

    仅当 VM 对 Microsoft Entra 域服务的域控制器具有畅通无阻的网络连接时,未加入域的 VM 才能使用 Microsoft Entra 域服务身份验证访问 Azure 文件共享。 通常,这需要站点到站点或点到站点 VPN。

  4. 选择或创建 Azure 文件共享。

    选择与 Microsoft Entra 租户相同订阅关联的新的或现有文件共享。 有关创建新的文件共享的信息,请参阅在 Azure 文件中创建文件共享。 为获得最佳性能,建议将文件共享与计划访问共享的 VM 放置在同一区域。

  5. 通过使用存储帐户密钥装载 Azure 文件共享来验证 Azure 文件连接。

    要验证是否已正确配置 VM 和文件共享,请尝试使用存储帐户密钥装载文件共享。 有关详细信息,请参阅在 Windows 中装载 Azure 文件共享并对其进行访问

工作流概述

在通过 SMB 为 Azure 文件共享启用 Microsoft Entra 域服务身份验证之前,请验证是否已正确配置 Microsoft Entra ID 和 Azure 存储环境。 建议逐步完成先决条件,确保已完成所有必需步骤。

按照以下步骤授予使用 Microsoft Entra 凭据访问 Azure 文件存储资源的权限:

  1. 通过 SMB 为存储帐户启用 Microsoft Entra 域服务身份验证,使用关联的 Microsoft Entra 域服务部署注册存储帐户。
  2. 将共享级权限分配给 Microsoft Entra 标识(用户、组或服务主体)。
  3. 使用存储帐户密钥连接到 Azure 文件共享,并为目录和文件配置 Windows 访问控制列表 (ACL)。
  4. 从加入域的 VM 装载 Azure 文件共享。

下图说明了通过 SMB 为 Azure 文件存储启用 Microsoft Entra 域服务身份验证的端到端工作流。

显示通过 SMB 为 Azure 文件存储启用 Microsoft Entra ID 的工作流的图表。

为帐户启用 Microsoft Entra 域服务身份验证

若要通过 SMB 为 Azure 文件存储启用Microsoft Entra 域服务身份验证,可以使用 Azure 门户、Azure PowerShell 或 Azure CLI 为存储帐户设置属性。 设置此属性会通过关联的 Microsoft Entra 域服务部署隐式“域加入”存储帐户。 然后,为存储帐户中的所有新文件和现有文件共享启用通过 SMB 的 Microsoft Entra 域服务身份验证。

请记住,只有在成功将 Microsoft Entra 域服务部署到 Microsoft Entra 租户后,才能通过 SMB 启用 Microsoft Entra 域服务身份验证。 有关详细信息,请参阅先决条件

若要使用 Azure 门户通过 SMB 启用 Microsoft Entra 域服务身份验证,请执行以下步骤:

  1. 在 Azure 门户中,转到现有的存储帐户或创建存储帐户

  2. 选择“数据存储”>“文件共享”。

  3. 在“文件共享设置”部分中,选择“基于标识的访问: 未配置”。

    屏幕截图:存储帐户中的“文件共享”窗格,其中突出显示了“基于标识的访问”。

  4. 在“Microsoft Entra 域服务”下选择“设置”,然后通过勾选复选框来启用该功能

  5. 选择“保存”。

    “配置基于标识的访问”窗格的屏幕截图,其中 Microsoft Entra 域服务已作为源启用。

默认情况下,Microsoft Entra 域服务身份验证使用 Kerberos RC4 加密。 建议按照以下说明将其配置为改用 Kerberos AES-256 加密。

该操作要求在由 Microsoft Entra 域服务管理的 Active Directory 域上运行操作,以访问域控制器来请求更改域对象的属性。 下面的 cmdlet 是 Windows Server Active Directory PowerShell cmdlet,而不是 Azure PowerShell cmdlet。 因此,这些 PowerShell 命令必须从加入 Microsoft Entra 域服务域的客户端计算机上运行。

重要

本部分中的 Windows Server Active Directory PowerShell cmdlet 必须在 Windows PowerShell 5.1 中从已加入 Microsoft Entra 域服务域的客户端计算机上运行。 PowerShell 7.x 在此方案中不起作用。

以拥有所需权限的 Microsoft Entra 域服务用户身份登录加入域的客户端计算机。 你必须对域对象的 msDS-SupportedEncryptionTypes 属性具有写入访问权限。 通常,AAD DC 管理员组的成员将拥有所需的权限。 打开普通(未提升的)PowerShell 会话,并执行以下命令。

# 1. Find the service account in your managed domain that represents the storage account.

$storageAccountName= "<InsertStorageAccountNameHere>"
$searchFilter = "Name -like '*{0}*'" -f $storageAccountName
$userObject = Get-ADUser -filter $searchFilter

if ($userObject -eq $null)
{
   Write-Error "Cannot find AD object for storage account:$storageAccountName" -ErrorAction Stop
}

# 2. Set the KerberosEncryptionType of the object

Set-ADUser $userObject -KerberosEncryptionType AES256

# 3. Validate that the object now has the expected (AES256) encryption type.

Get-ADUser $userObject -properties KerberosEncryptionType

重要

如果你以前使用 RC4 加密并将存储帐户更新为使用 AES-256,则应在客户端上运行 klist purge,然后重新装载文件共享,以便使用 AES-256 获取新的 Kerberos 票证。

分配共享级权限

若要通过基于标识的身份验证访问 Azure 文件存储资源,标识(用户、组或服务主体)必须具有共享级别的必要权限。 此过程类似于指定 Windows 共享权限,可以在其中指定特定用户对文件共享的访问类型。 本部分中的指导演示如何将文件共享的读取、写入或删除权限分配给标识。 强烈建议通过显式声明操作和数据操作来分配权限,而不是使用通配符 (*)。

大多数用户应为特定的 Microsoft Entra 用户或组分配共享级别权限,然后配置 Windows ACL,以便在目录和文件级别进行精细访问控制。 但是,也可以设置默认共享级别权限以允许参与者、提升参与者或读取者访问所有经过身份验证的标识。

Azure 文件存储有 5 个 Azure 内置角色,有些角色允许向用户和组授予共享级权限:

  • 存储文件数据共享特权参与者”可以通过替换现有的 Windows ACL,通过 SMB 在 Azure 文件共享中读取、写入、删除和修改 Windows ACL。
  • 存储文件数据特权读取者”可以通过替代现有 Windows ACL,通过 SMB 在 Azure 存储文件共享中进行读取访问。
  • “存储文件数据 SMB 共享参与者”可以通过 SMB 在 Azure 存储文件共享中进行读取、写入和删除访问。
  • 存储文件数据 SMB 共享提升参与者允许通过 SMB 在 Azure 文件共享中读取、写入、删除和修改 Windows ACL。
  • “存储文件数据 SMB 共享读取者”可以通过 SMB 在 Azure 存储文件共享中进行读取访问。

重要

对文件共享的完全管理控制权限(包括文件所有权权限)需要使用存储帐户密钥。 Microsoft Entra 凭据不支持管理控制。

你可以使用 Azure 门户、PowerShell 或 Azure CLI 将内置角色分配给用户的 Microsoft Entra 标识,以便授予共享级别权限。 请注意,共享级别 Azure 角色分配可能需要一些时间才能生效。 我们建议使用共享级别权限对代表一组用户和标识的 AD 组进行高级访问管理,然后利用 Windows ACL 在目录/文件级别进行精细访问控制。

将 Azure 角色分配给 Microsoft Entra 标识

重要

请通过显式声明操作和数据操作来分配权限,而不是使用通配符 (*) 字符。 如果数据操作的自定义角色定义包含通配符,则将向分配给该角色的所有标识授予访问所有可能的数据操作的权限。 这意味着,也将向所有此类标识授予添加到平台的任何新数据操作。 对于使用通配符的客户来说,通过新操作或数据操作授予额外的访问权限可能是不必要的行为。

若要使用 Azure 门户将 Azure 角色分配给 Microsoft Entra 标识,请执行以下步骤:

  1. 在 Azure 门户中,转到文件共享,或创建文件共享
  2. 选择“访问控制 (IAM)”。
  3. 选择“添加角色分配”
  4. 在“添加角色分配”边栏选项卡中,从“角色”列表中选择适当的内置角色,例如“存储文件数据 SMB 共享读取者”和“存储文件数据 SMB 共享参与者”)。 让“分配访问权限至”保留默认设置:Microsoft Entra 用户、组或服务主体。 按名称或电子邮件地址选择目标 Microsoft Entra 标识。
  5. 选择“查看 + 分配”以完成角色分配。

配置 Windows ACL

使用 RBAC 分配共享级别权限后,可以在根目录、目录或文件级别分配 Windows ACL。 将共享级别权限视为确定用户是否可以访问共享的高级网关守卫,而 Windows ACL 则更具体地执行操作,确定用户可以在目录或文件级别执行的操作。

Azure 文件存储支持全套基本和高级权限。 可以通过装载共享,然后使用 Windows 文件资源管理器或运行 Windows icaclsSet-ACL 命令,在 Azure 文件共享中查看和配置对目录和文件的 Windows ACL。

文件共享的根目录支持以下权限集:

  • BUILTIN\Administrators:(OI)(CI)(F)
  • NT AUTHORITY\SYSTEM:(OI)(CI)(F)
  • BUILTIN\Users:(RX)
  • BUILTIN\Users:(OI)(CI)(IO)(GR,GE)
  • NT AUTHORITY\Authenticated Users:(OI)(CI)(M)
  • NT AUTHORITY\SYSTEM:(F)
  • CREATOR OWNER:(OI)(CI)(IO)(F)

有关详细信息,请参阅通过 SMB 配置目录和文件级别权限

使用存储帐户密钥装载文件共享

在配置 Windows ACL 之前,必须先使用存储帐户密钥将文件共享装载到加入域的 VM。 为此,请以 Microsoft Entra 用户身份登录到加入域的 VM,打开 Windows 命令提示符,然后运行以下命令。 记住将 <YourStorageAccountName><FileShareName><YourStorageAccountKey> 替换为自己的值。 如果 Z: 已在使用中,请将其替换为可用的驱动器号。 可以通过在 Azure 门户中导航到存储帐户并选择“安全 + 网络”>“访问密钥”找到你的存储帐户密钥,也可以使用 Get-AzStorageAccountKey PowerShell cmdlet 找到它。

请务必在此阶段使用 net use Windows 命令而不是 PowerShell 来装载共享。 如果使用 PowerShell 装载共享,则共享对 Windows 文件资源管理器或 cmd.exe 不可见,并且你将无法配置 Windows ACL。

注意

你可能会看到已将完全控制 ACL 应用于某个角色。 这通常已经提供了分配权限的功能。 但是,由于有两个级别(共享级别和文件/目录级别)的访问检查,因此这是有限制的。 只有拥有 SMB 提升参与者角色并创建新文件或目录的用户才能分配对这些新文件或目录的权限,而不使用存储帐户密钥。 所有其他文件/目录权限分配都需要首先使用存储帐户密钥连接到共享。

net use Z: \\<YourStorageAccountName>.file.core.chinacloudapi.cn\<FileShareName> /user:localhost\<YourStorageAccountName> <YourStorageAccountKey>

使用 Windows 文件资源管理器配置 Windows ACL

装载 Azure 文件共享后,必须配置 Windows ACL。 可以使用 Windows 文件资源管理器或 icacls 执行此操作。

按照以下步骤使用 Windows 文件资源管理器为文件共享(包括根目录)下的所有目录和文件授予完全权限。

  1. 打开 Windows 文件资源管理器,右键单击文件/目录,然后选择“属性”。
  2. 选择“安全”选项卡。
  3. 选择“编辑”以更改权限。
  4. 可以更改现有用户的权限,或选择“添加”向新用户授予权限。
  5. 在添加新用户的提示窗口中,在“输入要选择的对象名称”框中输入要向其授予权限的目标用户名,然后选择“检查名称”以查找目标用户的完整 UPN 名称 。
  6. 选择“确定”。
  7. 在“安全性”选项卡中,选择要授予新用户的所有权限。
  8. 选择“应用”。

使用 icacls 配置 Windows ACL

使用以下 Windows 命令为文件共享(包括根目录)下的所有目录和文件授予完全权限。 请务必将示例中的占位符值替换为你自己的值。

icacls <mounted-drive-letter>: /grant <user-email>:(f)

若要详细了解如何使用 icacls 设置 Windows ACL,以及各种受支持的权限,请参阅 icacls 的命令行参考

从加入域的 VM 装载文件共享

以下过程验证是否正确设置了文件共享和访问权限,以及你是否可以从加入域的 VM 访问 Azure 文件共享。 请注意,共享级别 Azure 角色分配可能需要一些时间才能生效。

使用已授予权限的 Microsoft Entra 标识登录加入域的 VM。 请务必使用 Microsoft Entra 凭据登录。 如果驱动器已使用存储帐户密钥装载,则需要断开驱动器的连接或重新登录。

运行下面的 PowerShell 脚本或使用 Azure 门户永久装载 Azure 文件共享,并将其映射来驱动 Windows 上的驱动器 Z:。 如果 Z: 已在使用中,请将其替换为可用的驱动器号。 由于你已经过身份验证,因此无需提供存储帐户密钥。 脚本将检查此存储帐户是否可通过 TCP 端口 445(这是 SMB 使用的端口)访问。 记住将 <storage-account-name><file-share-name> 替换为自己的值。 有关详细信息,请参阅将 Azure 文件共享与 Windows 配合使用

除非使用自定义域名,否则即使设置了用于共享的专用终结点,也应使用后缀 file.core.chinacloudapi.cn 装载 Azure 文件共享。

$connectTestResult = Test-NetConnection -ComputerName <storage-account-name>.file.core.chinacloudapi.cn -Port 445
if ($connectTestResult.TcpTestSucceeded) {
    cmd.exe /C "cmdkey /add:`"<storage-account-name>.file.core.chinacloudapi.cn`" /user:`"localhost\<storage-account-name>`""
    New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<storage-account-name>.file.core.chinacloudapi.cn\<file-share-name>" -Persist
} else {
    Write-Error -Message "Unable to reach the Azure storage account via port 445. Check to make sure your organization or ISP is not blocking port 445, or use Azure P2S VPN, Azure S2S VPN, or Express Route to tunnel SMB traffic over a different port."
}

还可以通过 Windows 提示符使用 net-use 命令来装载文件共享。 记住将 <YourStorageAccountName><FileShareName> 替换为自己的值。

net use Z: \\<YourStorageAccountName>.file.core.chinacloudapi.cn\<FileShareName>

从未加入域的 VM 或已加入其他 AD 域的 VM 装载文件共享

仅当 VM 可与 Microsoft Entra 域服务在 Azure 中的域控制器建立无障碍连接时,未加入域的 VM 或加入不同于存储帐户的域的 VM 才能使用 Microsoft Entra 域服务身份验证访问 Azure 文件共享。 通常,这需要设置站点到站点或点到站点 VPN。 访问文件共享的用户必须在 Microsoft Entra 域服务托管域中具有标识(从 Microsoft Entra ID 同步到 Microsoft Entra 域服务)的标识,并且必须提供显式凭据(用户名和密码)。

若要从未加入域的 VM 装载文件共享,用户必须:

  • 提供凭据,例如 DOMAINNAME\username,其中 DOMAINNAME 是 Microsoft Entra 域服务域,username 则是标识在 Microsoft Entra 域服务中的用户名,或者
  • 或者使用 username@domainFQDN 表示法,其中,domainFQDN 是完全限定的域名。

使用这些方法之一,客户端就可以联系 Microsoft Entra 域服务域中的域控制器来请求和接收 Kerberos 票证。

例如:

net use Z: \\<YourStorageAccountName>.file.core.chinacloudapi.cn\<FileShareName> /user:<DOMAINNAME\username>

net use Z: \\<YourStorageAccountName>.file.core.chinacloudapi.cn\<FileShareName> /user:<username@domainFQDN>

后续步骤

若要授予其他用户对文件共享的访问权限,请按照分配共享级权限配置 Windows ACL 中的说明进行操作。

有关 Azure 文件存储的基于标识的身份验证的详细信息,请参阅以下资源: