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

对 Azure Database for MySQL 使用虚拟网络服务终结点和规则

适用于:Azure Database for MySQL - 单一服务器

重要

Azure Database for MySQL - 单一服务器位于停用路径上。 强烈建议升级到 Azure Database for MySQL 灵活服务器。 有关迁移到 Azure Database for MySQL - 灵活服务器的详细信息,请参阅Azure Database for MySQL单一服务器会发生什么情况?

“虚拟网络规则”是一种防火墙安全功能,用于控制是否允许 Azure Database for MySQL 服务器接受从虚拟网络中的特定子网发送的通信。 本文说明了为何有时候最好选择虚拟网络规则功能来安全地允许与 Azure Database for MySQL 服务器的通信。

若要创建虚拟网络规则,首先必须存在可供规则引用的虚拟网络 (VNet) 和虚拟网络服务终结点。 下图说明了虚拟网络服务终结点如何与 Azure Database for MySQL 配合使用:

VNet 服务终结点的工作原理示例

注意

Azure 的所有区域均提供此功能,其中 Azure Database for MySQL 部署用于常规用途和内存优化服务器。 在 VNet 对等互连的情况下,如果流量通过具有服务终结点的公共 VNet 网关流动,并且应该流向对等机,请创建 ACL/VNet 规则,以便网关 VNet 中的 Azure 虚拟机能够访问 Azure Database for MySQL 服务器。

还可以考虑将专用链接用于连接。 专用链接在 VNet 中为 Azure Database for MySQL 服务器提供专用 IP 地址。

术语和说明

虚拟网络: 可以让虚拟网络与 Azure 订阅相关联。

子网: 虚拟网络包含子网。 你所拥有的任何 Azure 虚拟机 (VM) 都会分配到子网。 一个子网可能包含多个 VM 或其他计算节点。 虚拟网络之外的计算节点不能访问虚拟网络,除非已将安全性配置为允许这样的访问。

虚拟网络服务终结点:虚拟网络服务终结点是一个子网,其属性值包括一个或多个正式的 Azure 服务类型名称。 本文介绍 Microsoft.Sql 的类型名称,即名为“SQL 数据库”的 Azure 服务。 此服务标记也适用于 Azure Database for MySQL 和 PostgreSQL 服务。 务必要注意的一点是,将 Microsoft.Sql 服务标记应用到 VNet 服务终结点时,它将为子网上的所有 Azure SQL 数据库、Azure Database for MySQL 和 Azure Database for PostgreSQL 服务器配置服务终结点流量。

虚拟网络规则: 适用于 Azure Database for MySQL 服务器的虚拟网络规则是一个子网,该子网列在 Azure Database for MySQL 服务器的访问控制列表 (ACL) 中。 该子网必须包含 Microsoft.Sql 类型名称才会列在 Azure Database for MySQL 服务器的 ACL 中。

虚拟网络规则要求 Azure Database for MySQL 服务器接受来自该子网上所有节点的通信。

虚拟网络规则的优势

在你执行相应操作之前,子网上的 VM 不能与 Azure Database for MySQL 服务器通信。 建立通信的一项操作是创建虚拟网络规则。 若要弄清楚为何选择 VNet 规则方法,必须进行一个比较和对比式的讨论,其中涉及到防火墙提供的竞争性安全选项。

A. 允许访问 Azure 服务

“连接安全性”窗格有一个标签为“允许访问 Azure 服务”的“启用/禁用”按钮。 “启用”设置允许来自所有 Azure IP 地址和所有 Azure 子网的通信。 这些 Azure IP 或子网可能不是你所拥有的。 此“启用”设置可能超出你在开放方面对 Azure Database for MySQL 数据库的需要。 虚拟网络规则功能提供精细得多的控制。

B. IP 规则

可以通过 Azure Database for MySQL 防火墙指定 IP 地址范围,处于该范围内的通信允许进入 Azure Database for MySQL 数据库。 此方法适用于 Azure 专用网络外部的稳定 IP 地址。 但是,Azure 专用网络内部的许多节点都配置了动态 IP 地址。 某些情况下(例如重启 VM 时),动态 IP 地址可能会变化。 处于生产环境中时,在防火墙规则中指定一个动态 IP 地址并不明智。

可以通过获取 VM 的静态 IP 地址,对 IP 选项进行“补救”。 有关详细信息,请参阅使用 Azure 门户为虚拟机配置专用 IP 地址

但是,静态 IP 方法可能会变得难以管理,在规模大时操作成本高。 虚拟网络规则更易于制定和管理。

虚拟网络规则详细信息

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

只有一个地理区域

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

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

服务器级而非数据库级

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

安全管理角色

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

  • 网络管理员: 启用终结点。
  • 数据库管理员: 更新访问控制列表 (ACL),将给定的子网添加到 Azure Database for MySQL 服务器。

Azure RBAC 备用:

网络管理员和数据库管理员角色的权限超出虚拟网络规则的管理需要, 只有部分权限是必需的。

可以选择在 Azure 中使用 Azure 基于角色的访问控制 (Azure RBAC),创建一个只有部分必需功能的自定义角色。 在涉及到网络管理员或数据库管理员时,可以使用自定义角色来代替。与向两个主要的管理员角色添加用户相比,向自定义角色添加用户的安全风险较低。

注意

在某些情况下,Azure Database for MySQL 和 VNet 子网位于不同的订阅中。 在这些情况下,必须确保以下配置:

  • 两个订阅都必须属于同一 Azure Active Directory 租户。
  • 用户具有启动操作所需的权限,例如启用服务终结点,以及向给定服务器添加 VNet-子网。
  • 确保两个订阅都注册了 Microsoft.Sql 和 Microsoft.DBforMySQL 资源提供程序。 有关详细信息,请参阅资源管理器注册

限制

对于 Azure Database for MySQL,虚拟网络规则功能具有以下限制:

  • Web 应用可以映射到 VNet/子网中的专用 IP。 即使已从给定 VNet/子网启用服务终结点,从 Web 应用到服务器的连接也将具有 Azure 公共 IP 源,而不是 VNet/子网源。 若要启用从 Web 应用到具有 VNet 防火墙规则的服务器的连接,必须在该服务器上允许 Azure 服务访问服务器。

  • 在 Azure Database for MySQL 的防火墙中,每个虚拟网络规则都引用一个子网。 引用的所有这些子网都必须托管在同一个托管 Azure Database for MySQL 的地理区域内。

  • 对于任何给定的虚拟网络,每个 Azure Database for MySQL 服务器最多可以有 128 个 ACL 条目。

  • 虚拟网络规则仅适用于 Azure 资源管理器虚拟网络,不适用于经典部署模型网络。

  • 使用 Microsoft.Sql 服务标记为 Azure Database for MySQL 启用虚拟网络服务终结点也会为以下所有 Azure 数据库服务启用终结点:Azure Database for MySQL、Azure Database for PostgreSQL、Azure SQL 数据库和 Azure Synapse Analytics。

  • 只有常规用途和内存优化服务器才支持 VNet 服务终结点。

  • 如果在子网中启用了Microsoft.Sql,则表示你只想使用 VNet 规则进行连接。 该子网中资源的非 VNet 防火墙规则将不起作用。

  • 在防火墙上,IP 地址范围适用于以下网络项,但虚拟网络规则并不适用:

ExpressRoute

如果网络通过使用 ExpressRoute 连接到 Azure 网络,则每个线路在 Microsoft Edge 配置有两个公共 IP 地址。 这两个 IP 地址用于通过使用 Azure 公共对等互连连接到 Azure 存储等 Microsoft 服务。

若要允许从线路到 Azure Database for MySQL 的通信,必须为线路的公共 IP 地址创建 IP 网络规则。 为查找 ExpressRoute 线路的公共 IP 地址,请使用 Azure 门户开具 ExpressRoute 支持票证。

在未打开 VNET 服务终结点的情况下,将 VNET 防火墙规则添加到服务器

仅设置 VNet 防火墙规则无助于将服务器保护到 VNet。 还必须打开 VNet 服务终结点才能使安全性生效。 打开服务终结点时,VNet 子网会遇到停机,直到它完成从“关”到“开” 的转换。 这在大型 VNet 的上下文中尤其如此。 可以使用 IgnoreMissingServiceEndpoint 标志,减少或消除转换期间的停机时间。

可以使用 Azure CLI 或门户设置 IgnoreMissingServiceEndpoint 标志。

后续步骤

有关创建 VNet 规则的文章,请参阅: