Azure 文件存储的网络注意事项

可以通过可从公共 Internet 访问的终结点、网络上的一个或多个专用终结点或者通过使用 Azure 文件同步在本地缓存 Azure 文件共享(仅限 SMB 文件共享),来访问 Azure 文件共享。 本文重点介绍如何配置 Azure 文件存储,以便通过公共和/或专用终结点直接访问。 若要了解如何使用 Azure 文件同步在本地缓存 Azure 文件共享,请参阅 Azure 文件同步简介

在阅读本概念指南之前,我们建议先阅读规划 Azure 文件存储部署

直接访问 Azure 文件共享通常需要在网络方面考虑到其他因素:

  • SMB 文件共享通过端口 445 进行通信,而许多组织和 Internet 服务提供商 (ISP) 会阻止出站 (Internet) 流量通过该端口。 这种做法源自于有关已弃用版和非 Internet 安全版本的 SMB 协议的旧安全指导原则。 尽管 SMB 3.x 是 Internet 安全协议,但组织或 ISP 策略可能无法更改。 因此,装载 SMB 文件共享后通常需要经过额外的网络配置,才能在 Azure 外部使用它。

  • NFS 文件共享依赖于网络级身份验证,因此只能通过受限网络进行访问。 使用 NFS 文件共享始终需要完成某种级别的网络配置。

为 Azure 文件存储配置公共和专用终结点是在 Azure 文件存储的顶级管理对象(即 Azure 存储帐户)上完成的。 存储帐户是代表共享存储池的管理结构,你可以在其中部署多个文件共享,以及其他 Azure 存储服务(例如 Blob 容器或队列)的存储资源。

适用于

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

安全传输

默认情况下,无论是通过公共终结点还是专用终结点访问数据,Azure 存储帐户都需要安全传输。 对于 Azure 文件存储,对 Azure 文件共享中存储的数据进行各种协议访问(包括 SMB、NFS 和 FileREST)都会强制执行“需要安全传输”设置。 可以禁用“需要安全传输”设置以允许未加密的流量。 在 Azure 门户中,还可能会看到此设置标记为“需要安全传输才能进行 REST API 操作”。

在“需要安全传输”设置方面,SMB、NFS 和 FileREST 协议的行为略有不同:

  • 在存储帐户上启用“需要安全传输”时,该存储帐户中的所有 SMB 文件共享都需要结合 AES-128-CCM、AES-128-GCM 或 AES-256-GCM 加密算法使用 SMB 3.x 协议,取决于 SMB 客户端与 Azure 文件存储之间可用/所需的加密协商。 可以通过 SMB 安全设置切换允许的 SMB 加密算法。 禁用“需要安全传输”设置会启用 SMB 2.1 和 SMB 3.x 装载,但不启用加密。

  • NFS 文件共享不支持加密机制,因此,若要使用 NFS 协议访问 Azure 文件共享,必须为存储帐户禁用“需要安全传输”。

  • 需要安全传输时,FileREST 协议只能与 HTTPS 结合使用。 目前 FileREST 仅在 SMB 文件共享上受支持。

公共终结点

存储帐户中 Azure 文件共享的公共终结点是一个 Internet 公开的终结点。 公共终结点是存储帐户的默认终结点,但是,可根据需要将其禁用。

SMB、NFS 和 FileREST 协议都可以使用公共终结点。 但是,每个协议的访问规则略有不同:

  • 可以通过启用了 SMB 3.x 和加密的存储帐户公共终结点从全球任何位置访问 SMB 文件共享。 这意味着,已经过身份验证的请求(例如已由用户登录标识授权的请求)可以安全地从 Azure 区域内部或外部发起。 如果需要使用 SMB 2.1 或 SMB 3.x 但不启用加密,必须满足两个条件:

    1. 必须禁用存储帐户的“需要安全传输”设置。
    2. 请求必须从 Azure 区域内部发起。 如前所述,允许在任何位置从 Azure 区域内部或外部发出加密的 SMB 请求。
  • 当且仅当存储帐户的公共终结点限制为使用服务终结点的特定虚拟网络时,才能从存储帐户的公共终结点访问 NFS 文件共享。 有关服务终结点的详细信息,请参阅公共终结点防火墙设置

  • 可以通过公共终结点访问 FileREST。 如果需要安全传输,则仅接受 HTTPS 请求。 如果禁用安全传输,则无论 HTTP 请求源于何处,公共终结点都会接受这些请求。

公共终结点防火墙设置

存储帐户防火墙限制存储帐户对公共终结点的访问。 使用存储帐户防火墙,可以仅限从特定 IP 地址/IP 地址范围对特定虚拟网络进行访问,或完全禁用公共终结点。

将公共终结点的流量限制为发送到一个或多个虚拟网络时,使用的是虚拟网络的称为“服务终结点”的功能。 定向到 Azure 文件存储服务终结点的请求仍会发送到存储帐户公共 IP 地址;但是,网络层会对请求执行附加验证,以验证它是否来自已授权的虚拟网络。 SMB、NFS 和 FileREST 协议都支持服务终结点。 但是,与 SMB 和 FileREST 不同,NFS 文件共享只能通过服务终结点使用公共终结点进行访问。

若要详细了解如何配置存储帐户防火墙,请参阅配置 Azure 存储防火墙和虚拟网络

专用终结点

除了存储帐户的默认公共终结点以外,Azure 文件存储还提供创建一个或多个专用终结点的选项。 专用终结点是只能在 Azure 虚拟网络内部访问的终结点。 为存储帐户创建专用终结点时,存储帐户将从虚拟网络地址空间中获取一个专用 IP 地址,这非常类似于本地文件服务器或 NAS 设备接收本地网络专用地址空间中的 IP 地址。

单个专用终结点与特定的 Azure 虚拟网络子网相关联。 存储帐户可以在多个虚拟网络中具有专用终结点。

对 Azure 文件存储使用专用终结点可以:

  • 结合专用对等互连使用 VPN 或 ExpressRoute 连接,从本地网络安全连接到 Azure 文件共享。
  • 通过将存储帐户防火墙配置为阻止公共终结点上的所有连接,来保护 Azure 文件共享。 默认情况下,创建专用终结点不会阻止连接到公共终结点。
  • 阻止数据从虚拟网络(和对等互连边界)渗出,从而提高虚拟网络的安全性。

若要创建专用终结点,请参阅配置 Azure 文件存储的专用终结点

通过虚拟专用网络或 ExpressRoute 以隧道方式传输流量

若要使用专用终结点从本地访问 SMB 或 NFS 文件共享,必须在本地网络与 Azure 之间建立网络隧道。 虚拟网络 (VNet) 类似于传统的本地网络。 与 Azure 存储帐户或 Azure VM 一样,VNet 是在资源组中部署的 Azure 资源。

Azure 文件存储支持通过以下机制在本地工作站和服务器与 Azure SMB/NFS 文件共享之间以隧道方式传输流量:

  • VPN 网关是特定类型的虚拟网关,用于通过 Internet 在 Azure 虚拟网络和备用位置(例如,本地)之间发送加密的流量。 Azure VPN 网关是一种 Azure 资源,可以与存储帐户或其他 Azure 资源一起部署在资源组中。 VPN 网关公开了两种不同类型的连接:
  • ExpressRoute,使你可以在 Azure 与不经过 Internet 的本地网络之间创建定义的路由。 因为 ExpressRoute 在本地数据中心和 Azure 之间提供了专用路径,所以当存在网络性能方面的顾虑时,ExpressRoute 可能会很有用。 组织的策略或法规要求使用确定的路径访问云中的资源时,ExpressRoute 也是一个不错的选择。

注意

尽管我们建议使用专用终结点来帮助将本地网络扩展到 Azure,但在技术上,可以通过 VPN 连接路由到公共终结点。 但是,这需要对服务于存储帐户的 Azure 存储群集的公共终结点 IP 地址进行硬编码。 由于存储帐户可能随时在存储群集之间移动,并且群集会频繁地新增和删除,因此需要定期在路由规则中对所有可能的 Azure 存储 IP 地址进行硬编码。

DNS 配置

创建专用终结点时,默认还会创建(或更新现有的)对应于 privatelink 子域的专用 DNS 区域。 严格地说,无需创建专用 DNS 区域就能为存储帐户使用专用终结点。 但是,一般情况下,我们强烈建议创建专用 DNS 区域,而在使用 Active Directory 用户主体装载 Azure 文件共享或者从 FileREST API 访问文件共享时,则明确要求创建专用 DNS 区域。

在专用 DNS 区域中,我们将为 storageaccount.privatelink.file.core.chinacloudapi.cn 创建 A 记录,并为存储帐户的常规名称创建遵循模式 storageaccount.file.core.chinacloudapi.cn 的 CNAME 记录。 由于 Azure 专用 DNS 区域将连接到包含专用终结点的虚拟网络,因此,可以通过在 Azure VM 上的 PowerShell 中调用 Resolve-DnsName cmdlet(或者在 Windows 和 Linux 中运行 nslookup)来观察 DNS 配置:

Resolve-DnsName -Name "storageaccount.file.core.chinacloudapi.cn"

对于本示例,存储帐户 storageaccount.file.core.chinacloudapi.cn 解析为专用终结点的专用 IP 地址(正好是 192.168.0.4)。

Name                                       Type   TTL   Section    NameHost
----                                       ----   ---   -------    --------
storageaccount.file.core.chinacloudapi.cn  CNAME  29    Answer     csostoracct.privatelink.file.core.chinacloudapi.cn

Name       : storageaccount.privatelink.file.core.chinacloudapi.cn
QueryType  : A
TTL        : 1769
Section    : Answer
IP4Address : 192.168.0.4


Name                   : privatelink.file.core.chinacloudapi.cn
QueryType              : SOA
TTL                    : 269
Section                : Authority
NameAdministrator      : azureprivatedns-host.microsoft.com
SerialNumber           : 1
TimeToZoneRefresh      : 3600
TimeToZoneFailureRetry : 300
TimeToExpiration       : 2419200
DefaultTTL             : 300

如果从本地运行同一命令,则会看到同一存储帐户名称解析为存储帐户的公共 IP 地址;storageaccount.file.core.chinacloudapi.cnstorageaccount.privatelink.file.core.chinacloudapi.cn 的 CNAME 记录,后者又是托管存储帐户的 Azure 存储群集的 CNAME 记录:

Name                                         Type   TTL   Section    NameHost
----                                         ----   ---   -------    --------
storageaccount.file.core.chinacloudapi.cn    CNAME  60    Answer     storageaccount.privatelink.file.core.chinacloudapi.cn

storageaccount.privatelink.chinacloudapi.cn  CNAME  60    Answer     file.par20prdstr01a.store.core.chinacloudapi.cn


Name       : file.par20prdstr01a.store.core.chinacloudapi.cn
QueryType  : A
TTL        : 60
Section    : Answer
IP4Address : 52.239.194.40

这反映了存储帐户可以同时公开公共终结点以及一个或多个专用终结点这一事实。 为了确保存储帐户名称解析为专用终结点的专用 IP 地址,必须更改本地 DNS 服务器上的配置。 可通过多种方式实现此目的:

  • 修改客户端上的 hosts 文件,使 storageaccount.file.core.chinacloudapi.cn 解析为所需的专用终结点专用 IP 地址。 对于生产环境,强烈建议不要这样做,因为需要对装载 Azure 文件共享的每个客户端进行这些更改,而系统不会自动处理对存储帐户或专用终结点所做的更改。
  • 在本地 DNS 服务器中为 storageaccount.file.core.chinacloudapi.cn 创建 A 记录。 这种方法的优势在于,本地环境中的客户端能够自动解析存储帐户,而无需配置每个客户端。 但是,与修改 hosts 文件一样,此解决方法较不可靠,因为不会反映所做的更改。 尽管此解决方法不太可靠,但在某些环境中,它却是最佳的选择。
  • core.chinacloudapi.cn 区域从本地 DNS 服务器转发到 Azure 专用 DNS 区域。 可以通过特殊 IP 地址 (168.63.129.16) 访问 Azure 专用 DNS 主机,该 IP 地址只能在链接到 Azure 专用 DNS 区域的虚拟网络内部访问。 若要解决此限制,可以在虚拟网络中运行其他 DNS 服务器,以便将 core.chinacloudapi.cn 转发到 Azure 专用 DNS 区域。 为了简化此设置,我们提供了 PowerShell cmdlet 用于在 Azure 虚拟网络中自动部署 DNS 服务器并根据需要对其进行配置。 若要了解如何设置 DNS 转发,请参阅配置 Azure 文件存储的 DNS

基于 QUIC 的 SMB

对于文件服务器角色提供的 SMB 服务器,Windows Server 2022 Azure Edition 支持名为“QUIC”的新传输协议。 QUIC 可以取代 TCP,它建立在 UDP 的基础之上,相比 TCP 而言其优势巨大,同时仍然能够提供可靠的传输机制。 SMB 协议的一个关键优势是,所有传输都通过端口 443(而非使用端口 445)完成 - 此端口是广泛开放的出站端口,支持 HTTPS。 这实际上意味着,SMB over QUIC 提供了一个“SMB VPN”用于通过公共 Internet 进行文件共享。 Windows 11 随附了支持 SMB over QUIC 的客户端。

目前,Azure 文件存储不直接支持 SMB over QUIC。 但可通过在 Windows Server 上运行的 Azure 文件同步访问 Azure 文件共享,如下图所示。 此外,还可以选择在本地或不同 Azure 数据中心设置 Azure 文件同步缓存,从而为分散的工作团队提供本地缓存。 若要详细了解此选项,请参阅部署 Azure 文件共享SMB over QUIC

Diagram for creating a lightweight cache of your Azure file shares on a Windows Server 2022 Azure Edition V M using Azure File Sync.

另请参阅