你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

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

本文重点介绍如何启用和配置 Azure AD DS,以便通过 Azure 文件共享进行基于标识的身份验证。 在此身份验证方案中,Azure AD 凭据和 Azure AD DS 凭据相同,可以互换使用。

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

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

注意

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

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

适用于

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

先决条件

在通过 SMB 为 Azure 文件共享启用 Azure AD DS 之前,请确保满足以下先决条件:

  1. 选择或创建 Azure AD 租户。

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

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

  2. 启用 Azure AD 租户上的 Azure AD 域服务。

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

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

  3. 使用 Azure AD DS 将 Azure VM 加入域。

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

    注意

    仅当 VM 可以访问 Azure AD DS 的域控制器时,未加入域的 VM 才能使用 Azure AD DS 身份验证访问 Azure 文件共享。 通常,这需要站点到站点或点到站点 VPN。

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

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

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

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

区域可用性

使用 Azure AD DS 的 Azure 文件存储身份验证在所有 Azure 公共区域、Gov 区域和中国区域都可用。

工作流概述

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

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

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

下图说明了通过 SMB 为 Azure 文件存储启用 Azure AD DS 身份验证的端到端工作流。

显示通过 SMB 为 Azure 文件启用 Azure AD 的工作流的图表

为帐户启用 Azure AD DS 身份验证

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

请注意,只有在将 Azure AD DS 成功部署到 Azure AD 租户后,才能通过 SMB 启用 Azure AD DS 身份验证。 有关详细信息,请参阅先决条件

若要使用 Azure 门户通过 SMB 启用 Azure AD DS 身份验证,请执行以下步骤:

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

  2. 在“文件共享”部分中,选择“Active Directory: 未配置” 。

    存储帐户中“文件共享”窗格的屏幕截图,其中突出显示了 Active Directory。

  3. 选择“Azure Active Directory 域服务”,然后通过勾选复选框来启用该功能。

  4. 选择“保存” 。

    “Active Directory”窗格的屏幕截图,其中启用了 Azure Active Directory 域服务。

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

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

重要

本部分中的 Windows Server Active Directory PowerShell cmdlet 必须在 Windows PowerShell 5.1 中从已加入 Azure AD DS 域的客户端计算机上运行。 PowerShell 7.x 和 Azure Cloud Shell 在此场景中不起作用。

以具有所需权限的 Azure AD DS 用户身份登录到加入域的客户端计算机(通常情况下,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 共享权限,可以在其中指定特定用户对文件共享的访问类型。 本部分中的指导演示如何将文件共享的读取、写入或删除权限分配给标识。 强烈建议通过显式声明操作和数据操作来分配权限,而不是使用通配符 (*)。

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

我们引入了三种 Azure 内置角色以用于向用户和组授予共享级别权限:

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

重要

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

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

将 Azure 角色分配给 Azure AD 标识

重要

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

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

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

配置 Windows ACL

使用 RBAC 分配共享级别权限后,可以在根目录、目录或文件级别分配 Windows ACL(也称为 NTFS 权限)。 将共享级别权限视为确定用户是否可以访问共享的高级网关守卫,而 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。 为此,请以 Azure AD 用户身份登录到加入域的 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.windows.net\<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 角色分配可能需要一些时间才能生效。

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

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

始终使用 file.core.windows.net 装载 Azure 文件共享(即使为共享设置了专用终结点)。 基于标识的身份验证不支持将 CNAME 用于文件共享装载。

$connectTestResult = Test-NetConnection -ComputerName <storage-account-name>.file.core.windows.net -Port 445
if ($connectTestResult.TcpTestSucceeded) {
    cmd.exe /C "cmdkey /add:`"<storage-account-name>.file.core.windows.net`" /user:`"localhost\<storage-account-name>`""
    New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<storage-account-name>.file.core.windows.net\<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.windows.net\<FileShareName>

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

仅当 VM 可以访问 Azure AD DS 在 Azure 中的域控制器时,未加入域的 VM 才能使用 Azure AD DS 身份验证访问 Azure 文件共享。 通常,这需要设置站点到站点或点到站点 VPN 来允许此连接。 访问文件共享的用户必须在 Azure AD DS 托管域中具有标识和凭据(从 Azure AD 同步到 Azure AD DS 的 Azure AD 标识)。

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

  • 提供显式凭据,例如 DOMAINNAME\username,其中 DOMAINNAME 是 Azure AD DS 域,username 是 Azure AD DS 中标识的用户名,或者
  • 使用 username@domainFQDN 表示法,其中,domainFQDN 是完全限定的域名。

使用这些方法之一,将允许客户端联系 Azure AD DS 域中的域控制器来请求和接收 Kerberos 票证。

例如:

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

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

后续步骤

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

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