为Azure文件共享配置目录级和文件级权限

适用于: ✔️ SMB 文件共享

必须先将共享级别权限分配给具有Azure基于角色的访问控制(RBAC)的标识,然后才能配置目录级和文件级权限。 传播共享级别权限后,请按照本文中的步骤配置Windows访问控制列表(ACL),也称为 NTFS 权限,以便进行更精细的访问控制。

先决条件

请参阅下表,确定可用于配置哪种身份验证类型的 ACL 的工具。

工具 AD DS (混合) Entra 域服务(混合模式) Entra Kerberos (混合)
Windows文件资源管理器 ✔️ ✔️ ✔️
icacls ✔️ ✔️ ✔️
Azure 门户 ✔️
PowerShell (RestSetAcls 模块) ✔️

若要使用Windows文件资源管理器或 icacls 配置 ACL,需要运行Windows的客户端计算机。 还需要装载具有管理员级访问权限的文件共享。 如果存储帐户的标识源是Active Directory 域服务 (AD DS) 或 Microsoft Entra Kerberos,则此计算机必须具备与本地 Active Directory 的不受限制的网络连接。 如果标识源Microsoft Entra Domain Services,则计算机必须与Microsoft Entra Domain Services管理的域的域控制器建立未受限制的网络连接;这些域控制器位于Azure中。

若要使用 Azure 门户或 PowerShell RestSetAcls 模块,域控制器不具有依赖关系。 但是,身份必须是混合的。 对于 RestSetAcls,需要运行Windows的客户端计算机。

Azure RBAC 和 Windows ACL 如何协同工作

共享级权限(RBAC 角色)充当上层门卫,用于确定用户能否访问共享资源。 Windows ACL(NTFS 权限)在更精细的级别运行,以控制用户可以在目录或文件级别执行的操作。 可以在根、目录或文件级别设置Windows ACL。

当用户尝试访问文件或目录时,将强制实施共享级别、文件级和目录级权限。 如果它们之间存在差异,则仅应用限制性最大的一个。

例如,如果用户在文件级别具有读/写访问权限,但只有共享级别的读取访问权限,则只能读取该文件。 如果权限被撤消,则应用相同的规则:如果用户在共享级别具有读/写访问权限,但只有文件级别的读取访问权限,则他们仍只能读取文件。

下表显示了共享级别权限和Windows ACL 如何协同工作,以确定对Azure Files中的文件或目录的访问权限。

无 RBAC 角色 RBAC - SMB 共享读取器 RBAC - SMB 共享贡献者 RBAC - SMB 共享高级贡献者
NTFS - 无 访问被拒绝 访问被拒绝 访问被拒绝 访问被拒绝
NTFS - 读取 访问被拒绝 读取 读取 读取
NTFS - 读取和执行 访问被拒绝 读取 读取 读取
NTFS - 列表文件夹 访问被拒绝 读取 读取 读取
NTFS - 写入 访问被拒绝 读取 读取和写入 读取和写入
NTFS - 修改 访问被拒绝 读取 读取、写入、删除 读取、写入、删除、将权限应用于自己的文件夹/文件
NTFS - 完整 访问被拒绝 读取 读取、写入、删除 读取、写入、删除、对他人文件夹/文件应用权限

若要使用基于标识的身份验证而不是存储帐户密钥(建议)配置 ACL,需要额外的 RBAC 角色:Storage 文件数据 SMB 管理员。此角色授予共享级别访问权限和 takeOwnership 权限,该权限允许用户使用 Windows takeown 命令获取任何文件或目录的所有权,即使没有现有的 ACL 条目也是如此。 拥有所有权后,用户可以修改 ACL。 有关详细信息,请参阅 使用 SMB 管理员的Windows权限模型

支持的 Windows ACL

Azure Files支持整套基本和高级Windows ACL。

用户 定义
BUILTIN\Administrators 代表文件服务器的管理员的内置安全组。 对于Azure Files,此组为空,无法将其添加到其中。
BUILTIN\Users 表示文件服务器用户的内置安全组。 默认情况下,它包括 NT AUTHORITY\Authenticated Users。 对于传统的文件服务器,可以为每个服务器配置成员身份定义。 对于Azure Files,没有托管服务器,因此BUILTIN\Users包含与 NT AUTHORITY\Authenticated Users 相同的用户组。
NT AUTHORITY\SYSTEM 文件服务器操作系统的服务帐户。 此服务帐户不适用于Azure Files上下文。 它包含在根目录中,以便与混合方案的Windows文件服务器体验保持一致。
NT AUTHORITY\Authenticated Users Active Directory中可以获取有效 Kerberos 票证的所有用户。
CREATOR OWNER 对象所有者。 每个对象(目录或文件)都有一个所有者。 如果将 ACL 分配给 CREATOR OWNER 某个对象,则作为对象的所有者的用户具有对该对象的 ACL 定义权限。

文件共享的根目录包含以下权限:

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

有关这些权限的详细信息,请参阅 icacls 的命令行参考

使用管理员级访问权限装载文件共享

在使用文件资源管理器或 icacls 配置 Windows ACL 之前,请使用管理员级访问权限装载文件共享。 如果使用 Azure 门户或 RestSetAcls PowerShell 模块配置 ACL,请跳过本部分,然后使用 Azure 门户配置 Windows ACL ,或使用 PowerShell 为标识配置 Windows ACL

有两个选项可用于装载具有管理员级访问权限的文件共享:

  • 使用 Windows 权限模型用于 SMB 管理(推荐):将内置 RBAC 角色 Storage File Data SMB Admin 分配给将配置 ACL 的管理员用户。 然后使用 基于标识的身份验证 并配置 ACL 来装载文件共享。 如果文件或目录中的现有 ACL 拒绝管理员访问权限,则管理员可以使用 Windows takeown 命令获取文件或目录的所有权,然后修改 ACL。 此方法更安全,因为它不需要存储帐户密钥来装载文件共享。

  • 使用存储帐户密钥(不太安全):使用存储帐户密钥装载文件共享,然后配置 ACL。 使用存储帐户密钥进行装载可提供即时完全访问权限,而无需拥有文件或目录的所有权。 存储帐户密钥是敏感凭据。 出于安全原因,仅当无法使用基于标识的身份验证时,才使用此选项。

如果用户具有完全控制 ACL 和 Storage 文件数据 SMB 共享高级贡献者角色(或具有所需权限的自定义角色),则可以在不使用 SMB 管理员或存储帐户密钥 Windows 权限模型的情况下配置 ACL。

使用 Windows 权限模型来管理 SMB 管理员

请使用 Windows 权限模型来替代存储帐户密钥进行 SMB 管理。 借助此功能,可以将内置的 RBAC 角色 存储文件数据 SMB 管理员 分配给管理员用户,以便他们可以使用基于标识的身份验证装载共享并配置 ACL。

如果文件或目录上的现有 ACL 授予管理员足够的权限(例如修改或完全控制),管理员可以直接配置 ACL。 如果现有 ACL 拒绝访问,则管理员可以使用 Windows takeown 命令获取目标文件或目录的所有权,然后修改 ACL 以授予相应的访问权限。

注意

分配存储文件数据 SMB 管理员 RBAC 角色的方式与使用存储帐户密钥进行身份验证的方式不同。 使用存储帐户密钥装载共享时,无需拥有所有权即可立即访问所有文件和目录。 使用存储文件数据 SMB 管理员角色,现有 ACL 仍适用于正常文件访问。 当现有 ACL 不授予管理员足够权限来修改 ACL 时,该角色权限允许使用 takeown 命令来获取任何文件或目录的所有权,这是一个非常特殊的特权。

存储文件数据 SMB 管理员 RBAC 角色包含以下三个数据操作:

  • Microsoft.Storage/storageAccounts/fileServices/readFileBackupSemantics/action
  • Microsoft.Storage/storageAccounts/fileServices/writeFileBackupSemantics/action
  • Microsoft.Storage/storageAccounts/fileServices/takeOwnership/action

若要为 SMB 管理员使用Windows权限模型,请执行以下步骤:

  1. 将 存储文件数据 SMB 管理员 RBAC 角色分配给配置 ACL 的用户。 有关如何分配角色的说明,请参阅使用 Azure 门户分配Azure角色。

  2. 让用户使用其域标识装载文件共享。 只要为存储帐户配置了基于 identity 身份验证,就可以在不使用存储帐户密钥的情况下装载共享并配置和编辑Windows ACL。

    1. 登录到已加入域的设备或具有畅通无阻网络连接到域控制器的设备。 如果您的身份源是 Microsoft Entra Domain Services,请以 Microsoft Entra 用户身份登录。

    2. 通过运行以下命令打开Windows命令提示符并装载文件共享。 将 <YourStorageAccountName><FileShareName> 替换为自己的值。 如果驱动器 Z 已在使用中,请将其替换为可用的驱动器号。

      使用net use命令在此阶段挂载共享,而不要使用 PowerShell。 如果使用 PowerShell 装载共享,则Windows文件资源管理器或 cmd.exe看不到该共享,并且很难配置Windows ACL。

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

警告

如果可能,请使用 SMB 管理员的 Windows 权限模型装载共享,而不是使用存储帐户密钥。

登录到已加入域的设备或具有畅通无阻网络连接到域控制器的设备。 如果您的身份源是 Microsoft Entra Domain Services,请以 Microsoft Entra 用户身份登录。

打开Windows命令提示符,并通过运行以下命令装载文件共享。 将 、 和 替换为自己的值<YourStorageAccountName><FileShareName><YourStorageAccountKey>。 如果驱动器 Z 已在使用中,请将其替换为可用的驱动器号。 可以通过 Azure 门户进入存储帐户,然后选择 Security + networking>访问密钥找到您的存储帐户密钥,或者可以使用 Get-AzStorageAccountKey PowerShell命令。

使用net use命令在此阶段挂载共享,而不要使用 PowerShell。 如果使用 PowerShell 装载共享,则Windows文件资源管理器或 cmd.exe看不到该共享,并且很难配置Windows ACL。

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

配置Windows ACL

可以使用 icacls 配置Windows ACL,也可以使用Windows文件资源管理器。 如果您的存储帐户的标识源是 Microsoft Entra Kerberos,您还可以使用 Azure 门户或 RestSetAcls PowerShell 模块。

如果本地文件服务器中有针对 AD DS 标识配置的Windows ACL 的文件,则可以将其复制到 Azure Files,同时使用传统文件复制工具(如 Robocopy 或最新版本的 Azure AzCopy)来保留 ACL。 如果通过 Azure File Sync 将目录和文件分层到 Azure Files,ACL 将保持其本机格式,并予以保留。

重要

如果使用 Microsoft Entra Kerberos 对混合标识进行身份验证,则必须将混合标识同步到Microsoft Entra ID才能强制实施 ACL。

可以为未同步到Microsoft Entra ID的标识设置文件级和目录级 ACL。 但是,不会强制实施这些 ACL,因为用于身份验证和授权的 Kerberos 票证不包含尚未同步的身份标识。 如果使用本地 AD DS 作为标识源,则可以在 ACL 中包含未同步的标识。 AD DS 将这些安全标识符(SID)置于 Kerberos 票证中,并强制实施 ACL。

使用 icacls 配置Windows ACL

若要向文件共享下的所有目录和文件(包括根目录)授予完全权限,请在具有无障碍网络连接到 Active Directory 域控制器的计算机上运行以下 Windows 命令。 请务必将示例中的占位符值替换为你自己的值。 如果标识源Microsoft Entra Domain Services,则 <user-upn><user-email>

icacls <mapped-drive-letter>: /grant <user-upn>:(f)

有关如何使用 icacls 设置 Windows ACL 和受支持的权限类型的详细信息,请参阅 icacls 的命令行参考

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

如果登录到已加入域Windows客户端,可以使用Windows文件资源管理器向文件共享下的所有目录和文件(包括根目录)授予完全权限。 使用文件资源管理器仅适用于混合标识。

重要

如果客户端未加入域中,或者你的环境有多个 Active Directory 林,请不要使用文件资源管理器配置 ACL。 请改用 icacls。 因为 Windows 文件资源管理器的 ACL 配置要求,客户机必须加入到存储帐户所在的 Active Directory 域,这存在此限制。

若要使用Windows文件资源管理器配置 ACL,请执行以下步骤:

  1. 打开Windows文件资源管理器,右键单击文件或目录,然后选择Properties

  2. 选择“安全”选项卡。

  3. 选择 “编辑” 以更改权限。

  4. 更改现有用户的权限,或选择“ 添加” 以向新用户授予权限。

  5. 在提示窗口中添加新用户,输入想要在 “输入对象名称以选中 ”框中授予权限的目标用户名。 若要查找目标用户的完整用户主体名称(UPN),请选择“ 检查名称”。

    您可能需要为本地部署的 Active Directory 指定域名和域 GUID。 可以从域管理员或已加入on-premises Active Directory的客户端获取此信息。

  6. 选择“确定”

  7. 在“ 安全 ”选项卡上,选择要授予新用户的所有权限。

  8. 选择“应用”。

使用 Azure 门户配置 Windows ACL

如果将 Microsoft Entra Kerberos 配置为存储帐户的标识源,则可以使用 Azure 门户为每个 Entra 用户或组配置Windows ACL。

  1. 登录到 Azure 门户

  2. 请前往需要配置 Windows ACL 的文件共享位置。

  3. 在服务菜单上,选择“ 浏览”。 如果要在根文件夹中设置 ACL,请从顶部菜单中选择 “管理访问权限 ”。

    Azure门户的截图,显示如何管理文件共享的根文件夹的访问权限。

  4. 若要为文件或目录设置 ACL,请右键单击文件或目录,然后选择“ 管理访问权限”。

    Azure门户的截图,显示如何为文件或目录设置Windows ACL。

  5. 该窗格显示可用的用户和组。 可以选择性地添加新用户或组。 选择任何用户或组最右侧的铅笔图标,添加或编辑用户或组访问指定文件或目录的权限。

    Azure门户的截图,显示了Entra用户和组的列表。

  6. 编辑权限。 拒绝始终优先于允许,当两者都设置时。 如果未设置,则继承默认权限。

    Azure门户的屏幕截图,显示如何为 Entra 用户或组添加或编辑权限。

  7. 选择 “保存” 以设置 ACL。

使用 PowerShell 为标识配置 Windows ACL

如果需要将 ACL 批量分配给用户,请使用 RestSetAcls PowerShell 模块 通过 Azure 文件 REST API 自动执行该过程。 此模块不需要与Active Directory建立网络连接。

例如,如果要设置提供用户 testUser@contoso.com 读取访问权限的根 ACL:

$AccountName = "<storage-account-name>" # replace with the storage account name 
$AccountKey = "<storage-account-key>" # replace with the storage account key 
$context = New-AzStorageContext -StorageAccountName $AccountName -StorageAccountKey $AccountKey 
Add-AzFileAce -Context $context -FileShareName test -FilePath "/" -Type Allow -Principal "testUser@contoso.com" -AccessRights Read,Synchronize -InheritanceFlags ObjectInherit,ContainerInherit 

下一步

配置目录级和文件级权限后,可以在 WindowsLinux 装载 SMB 文件共享。