使用适用于 Azure SQL 数据库中的服务器的虚拟网络服务终结点和规则

适用于:Azure SQL 数据库

虚拟网络规则是一种防火墙安全功能,用于控制Azure SQL 数据库中数据库和弹性池的服务器是否接受来自虚拟网络中特定子网发送的通信。 本文解释了为什么虚拟网络规则有时是你在 SQL 数据库中安全允许与数据库通信的最佳选择。

注意

在本文中,服务器指的是托管 Azure SQL 数据库 数据库的逻辑服务器。

若要创建虚拟网络规则,首先必须具有可供规则引用的虚拟网络服务终结点。

注意

Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。

创建虚拟网络规则

如果只想创建虚拟网络规则,则可跳到本文后面的步骤和说明。

虚拟网络规则详细信息

此部分介绍虚拟网络规则的多项详细信息。

只有一个地理区域

一个虚拟网络服务终结点只适用于一个 Azure 区域。 终结点不允许其他区域接受来自子网的通信。

任何虚拟网络规则都只能应用于基础终结点应用到的区域。

服务器级而非数据库级

每个虚拟网络规则都适用于整个服务器,而不仅仅是该服务器上某个特定的数据库。 换句话说,虚拟网络规则在服务器级而非数据库级应用。

与之不同的是,IP 规则适用于这其中的任一级别。

安全管理角色

在管理虚拟网络服务终结点时,安全角色是分开的。 下述每个角色都需要采取行动:

  • 网络管理员(网络参与者角色):启用终结点。
  • 数据库管理员(SQL Server 参与者角色):更新访问控制列表 (ACL),将给定的子网添加到服务器。

Azure RBAC 替代方案

网络管理员和数据库管理员角色的权限超出虚拟网络规则的管理需要, 你只需要其中部分功能。

你可以在Azure中使用基于角色的访问控制(RBAC),创建一个只包含必要子集功能的自定义角色。 你可以使用自定义角色,无需让网络管理员或数据库管理员参与。如果你把用户添加到自定义角色,那么你的安全暴露面会比把该用户添加到另外两个主要管理员角色小得多。

注意

在某些情况下,Azure SQL 数据库中的数据库和虚拟网络子网位于不同的订阅中。 在这些情况下,必须确保以下配置:

  • 用户具有启动多项操作(例如启用服务终结点和向给定服务器添加虚拟网络子网)所需的权限。
  • 两个订阅都注册了 Microsoft.Sql 该服务提供者。

限制

对于 SQL 数据库,虚拟网络规则功能具有以下限制:

  • 在 Azure SQL 数据库中数据库的防火墙中,每个虚拟网络规则都引用一个子网。 你必须将所有这些引用的子网托管在与数据库托管的同一地理区域内。
  • 对于任何虚拟网络,每个服务器最多可以有 128 个 ACL 条目。
  • 虚拟网络规则仅适用于 Azure 资源管理器虚拟网络,不适用于经典部署模型网络。
  • 在防火墙上,IP地址范围适用于以下网络项目,但虚拟网络规则不适用:
  • 两个订阅必须位于同一个 Microsoft Entra 租户中。

使用服务终结点时的注意事项

在使用 Azure SQL 数据库的服务终结点时,请查看以下注意事项:

  • 需要到 Azure SQL 数据库公共 IP 的出站连接。 您必须将网络安全组(NSG)对 SQL 数据库 IP 开放,以实现连接。 为此,可以将 NSG 服务标记用于 SQL 数据库。

ExpressRoute

如果您在本地使用 ExpressRoute 进行公共对等互连或 Microsoft 对等互连,则需要标识所用的 NAT IP 地址。 进行公共对等互连时,每条 ExpressRoute 线路默认情况下会使用两个 NAT IP 地址。当流量进入 Azure 网络主干时,会向 Azure 服务流量应用这些地址。 对于 Microsoft 对等互连,客户或服务提供商中的任一方提供所使用的 NAT IP 地址。 若要允许访问服务资源,必须在资源 IP 防火墙设置中允许这些公共 IP 地址。 若要查找公共对等互连 ExpressRoute 线路 IP 地址,请通过 Azure 门户开具 ExpressRoute 支持票证。 若要详细了解适用于 ExpressRoute 公共对等互连和 Microsoft 对等互连的 NAT,请参阅 Azure 公共对等互连的 NAT 要求。

若要允许从线路到 Azure SQL 数据库的通信,必须为 NAT 的公共 IP 地址创建 IP 网络规则。

将虚拟网络服务终结点与 Azure 存储配合使用的影响

Azure 存储 支持限制连接到存储账户的虚拟网络服务端点。 如果 SQL 数据库使用该配置的账户,请审查对 blob 审计的影响。

Azure SQL 数据库 对 Blob 存储的审计

Azure SQL 审核可将 SQL 审核日志写入你自己的存储帐户。 如果此存储帐户使用虚拟网络服务终结点功能,请参阅如何将审计日志写入受 VNet 和防火墙保护的存储帐户。

向服务器添加虚拟网络防火墙规则

在此功能增强之前,你必须先开启虚拟网络服务端点,才能在防火墙中实施生效的虚拟网络规则。 这些终结点将指定的虚拟网络子网关联到 SQL 数据库中的一个数据库。 截至2018年1月,您可以通过设置 IgnoreMissingVNetServiceEndpoint 标志来规避这一要求。 现在,你可以向服务器添加虚拟网络防火墙规则,而无需启用虚拟网络服务终结点。

仅设置防火墙规则无助于保护服务器。 你还必须启用虚拟网络服务终结点才能使安全措施生效。 启用服务终结点时,你的虚拟网络子网会经历停机,直到完成从关闭到开启的转换。 在使用大型虚拟网络的情况下,这一停机时间尤其明显。 你可以使用 IgnoreMissingVNetServiceEndpoint 标志来减少或消除过渡期间的停机时间。

你可以使用 PowerShell 设置 IgnoreMissingVNetServiceEndpoint 标志。 有关详细信息,请参阅使用 PowerShell 创建 Azure SQL 数据库的虚拟网络服务终结点和规则。

使用 Azure 门户创建虚拟网络规则

本部分介绍了如何使用 Azure 门户在 Azure SQL 数据库中的数据库中创建虚拟网络规则。 该规则告诉你的数据库接受来自你标记为 虚拟网络服务终端的特定子网的通信。

注意

要将服务端点添加到服务器的虚拟网络防火墙规则中,首先确保该子网的服务端点已开启。

如果子网上未开启服务终结点,门户会要求你启用它们。 在你添加规则的窗格中选择“启用”按钮。

先决条件

必须已经有一个子网使用特定的虚拟网络服务终结点类型名称进行标记,且该名称必须与 Azure SQL 数据库相关。

  • 相关的终结点类型名称为 Microsoft.Sql。
  • 如果您的子网可能未使用类型名称标记,请参阅验证子网是否是端点。

Azure 门户操作步骤

  1. 登录到 Azure 门户。

  2. 搜索并选择“SQL Server”,然后选择你的服务器。 在“安全性”下,选择“网络”。

  3. 在“公共访问”选项卡下,确保“公用网络访问”设置为“选择网络”,否则将隐藏“虚拟网络”设置。 在“虚拟网络”部分选择“+ 添加现有虚拟网络”。

    显示网络的逻辑服务器属性的屏幕截图。

  4. 在新的“创建/更新”窗格中,使用你的 Azure 资源的名称填写各个框。

    提示

    必须包括子网的正确地址前缀。 可以在门户中找到“地址前缀”值。 转到“所有资源”“所有类型”>“虚拟网络”。 筛选器会显示虚拟网络。 选择你的虚拟网络,然后选择“子网”。 “地址范围”列包含你需要的地址前缀。

    屏幕截图显示了如何填写新规则的各个框。

  5. 查看“防火墙”窗格中生成的虚拟网络规则。

    屏幕截图显示了“防火墙”窗格中的新规则。

  6. 将“允许 Azure 服务和资源访问此服务器”设置为“否”。

    重要

    如果将“允许 Azure 服务和资源访问此服务器”保持在选中状态,则服务器将接受来自 Azure 边界内任何子网的通信。 该通信来自被识别为处于为 Azure 数据中心定义的范围内的 IP 地址之一。 从安全角度来看,将此控件设置为“开启”可能会导致过度访问。 结合使用 Azure 虚拟网络服务终结点功能与 SQL 数据库的虚拟网络规则功能,可以共同减少您的安全攻击面。

  7. 选择窗格底部的“确定”按钮。

注意

以下状态适用于这些规则:

  • 就绪:表示您启动的操作已成功。
  • 失败:表示你发起的操作失败。
  • 已删除:仅适用于 Delete 操作,表示规则已被删除且不再适用。
  • InProgress:表示操作正在进行。 操作处于这种状态时,会应用旧规则。

使用 PowerShell 创建虚拟网络规则

你可以使用脚本,通过使用 PowerShell cmdlet New-AzSqlServerVirtualNetworkRule 或 az network vnet create 创建虚拟网络规则。 有关详细信息,请参阅使用 PowerShell 创建 Azure SQL 数据库的虚拟网络服务终结点和规则。

使用 REST API 创建虚拟网络规则

在内部,用于 SQL 虚拟网络操作的 PowerShell cmdlet 会调用 REST API。 可以直接调用 REST API。 有关详细信息,请参阅虚拟网络规则:操作。

排查错误 40914 和 40615

连接错误 40914 与虚拟网络规则(如 Azure 门户中的“防火墙”窗格所指定的那样)相关。
错误40615类似,但它与防火墙上的 IP地址规则 有关。

错误 40914

消息文本:“无法打开登录时请求的服务器 ‘[server-name]’。 不允许客户端访问服务器。”

错误说明:客户端位于包含虚拟网络服务器终结点的子网中。 但服务器没有虚拟网络规则赋予子网与数据库通信的权利。

错误解决方法:在 Azure 门户的“防火墙”窗格中,使用虚拟网络规则控件为子网添加虚拟网络规则。

错误 40615

消息文本:“无法打开登录时请求的服务器 ‘’。 不允许 IP 地址为 ‘{1}’ 的客户端访问此服务器。”

错误说明:客户端尝试从无权连接到服务器的 IP 地址进行连接。 服务器防火墙没有 IP 地址规则允许客户端从给定 IP 地址与数据库进行通信。

错误解决方法:输入客户端 IP 地址作为 IP 规则。 使用Azure门户中的防火墙面板完成此步骤。

Azure Synapse Analytics 的虚拟网络服务终结点

欲了解更多信息,请参见 Azure Synapse Analytics 的虚拟网络服务端点与规则。