教程:使用 Azure 防火墙检查专用终结点流量

Azure 专用终结点是 Azure 专用链接的构建基块。 在虚拟网络中部署的 Azure 资源可以通过专用终结点来与专用链接资源进行私密通信。

资源可通过专用终结点访问虚拟网络中部署的专用链接服务。 通过虚拟网络对等互连和本地网络连接对专用终结点进行访问扩展了连接性。

你可能需要检查或阻止从客户端到通过专用终结点公开的服务的流量。 使用 Azure 防火墙或第三方网络虚拟设备完成此检查。

有关涉及专用终结点和Azure 防火墙的详细信息和方案,请参阅 Azure 防火墙方案以检查发往专用终结点的流量

学习教程期间所创建 Azure 资源的示意图。

本教程介绍如何执行下列操作:

  • 为测试虚拟机创建虚拟网络和堡垒主机。
  • 创建专用终结点虚拟网络。
  • 创建测试虚拟机。
  • 部署 Azure 防火墙。
  • 创建 Azure SQL 数据库。
  • 为 Azure SQL 创建专用终结点。
  • 在专用终结点虚拟网络和测试虚拟机虚拟网络之间创建网络对等互连。
  • 将虚拟网络链接到专用 DNS 区域。
  • 在 Azure 防火墙中为 Azure SQL 配置应用程序规则。
  • 通过 Azure 防火墙在虚拟机和 Azure SQL 之间路由流量。
  • 测试与 Azure SQL 的连接,并在 Azure 防火墙日志中验证。

如果没有 Azure 订阅,请在开始前创建一个试用版订阅

先决条件

登录到 Azure 门户

登录 Azure 门户

创建虚拟网络和 Azure Bastion 主机

以下过程创建包含资源子网、Azure Bastion 子网和 Bastion 主机的虚拟网络:

  1. 在门户中,搜索并选择“虚拟网络”。

  2. 在“虚拟网络”页面上,选择“+ 创建”。

  3. 创建虚拟网络基本信息选项卡上输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“新建”。
    输入 test-rg 作为名称
    选择“确定”
    实例详细信息
    名称 输入“vnet-1”。
    区域 选择“(亚太)中国东部 2”。

    用于在 Azure 门户中创建虚拟网络的“基本信息”选项卡的屏幕截图。

  4. 选择“下一步”,转到“安全性”选项卡。

  5. 在“Azure Bastion”部分,选择“启用 Bastion”

    Bastion 使用浏览器通过安全外壳 (SSH) 或远程桌面协议 (RDP),通过使用其专用 IP 地址连接虚拟网络中的虚拟机。 虚拟机不需要公共 IP 地址、客户端软件或特殊配置。 有关详细信息,请参阅什么是 Azure Bastion?

    注意

    每小时定价从部署 Bastion 的时刻开始计算,无论出站数据的使用情况如何。 有关详细信息,请参阅定价SKU。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。

  6. 在“Azure Bastion”中,输入或选择以下信息:

    设置
    Azure Bastion 主机名 输入“堡垒”。
    Azure Bastion 公共 IP 地址 选择“创建公共 IP 地址”。
    在“名称”中输入 public-ip-bastion
    选择“确定”

    用于在 Azure 门户中创建虚拟网络时启用 Azure Bastion 主机的选项的屏幕截图。

  7. 选择下一步,转到IP 地址选项卡。

  8. 在“子网”的地址空间框中,选择“默认”子网。

  9. 编辑子网中,输入或选择以下信息:

    设置
    子网详细信息
    子网模板 保留默认值“默认”。
    名称 输入“subnet-1”。
    开始地址 保留默认值“10.0.0.0”。
    子网大小 保留默认值“/24 (256 个地址)”。

    子网配置详细信息的屏幕截图。

  10. 选择 添加

  11. 在窗口底部选择“查看 + 创建”。 验证通过后,选择“创建”。

为专用终结点创建虚拟网络

下面的过程创建含有子网的虚拟网络。

  1. 在门户中,搜索并选择“虚拟网络”。

  2. 在“虚拟网络”页面上,选择“+ 创建”。

  3. 创建虚拟网络基本信息选项卡上输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择 test-rg
    实例详细信息
    名称 输入“vnet-private-endpoint”。
    区域 选择“(亚太)中国东部 2”。
  4. 选择“下一步”,转到“安全性”选项卡。

  5. 选择“下一步”,转到“IP 地址”选项卡。

  6. 使用垃圾桶图标选择“删除地址空间”以删除默认地址空间。

  7. 选择“添加 IPv4 地址空间”。

  8. 输入 10.1.0.0 并将下拉框保留为 默认值 /16(65,536 个地址)。

  9. 选择“+添加子网”。

  10. 在“添加子网”中,输入或选择以下信息:

    设置
    子网详细信息
    子网模板 保留默认值“默认”。
    名称 输入 subnet-private。
    开始地址 保留默认值 10.1.0.0。
    子网大小 保留默认值“/24 (256 个地址)”。
  11. 选择添加

  12. 选择屏幕底部的“查看 + 创建”,然后在验证通过时选择“创建”。

创建测试虚拟机

以下过程会在虚拟网络中创建一个名为 vm-1 的测试虚拟机 (VM)。

  1. 在门户中,搜索并选择“虚拟机”。

  2. 在“虚拟机”中,选择“+ 创建”。

  3. 在“创建虚拟机”的“基本信息”选项卡上,输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    虚拟机名称 输入“vm-1”。
    区域 选择“(亚太)中国东部 2”。
    可用性选项 选择“无需基础结构冗余”。
    安全类型 保留默认值标准
    映像 选择“Ubuntu Server 22.04 LTS - Gen2”。
    大小 选择一个大小。
    管理员帐户
    身份验证类型 选择密码
    用户名 输入“azureuser”。
    Password 输入密码。
    确认密码 重新输入密码。
    入站端口规则
    公共入站端口 选择“无”。
  4. 选择页面顶部的“网络”选项卡。

  5. 在“网络”选项卡中,输入或选择以下信息:

    设置
    网络接口
    虚拟网络 选择“vnet-1”。
    子网 选择“subnet-1 (10.0.0.0/24)”。
    公共 IP 选择
    NIC 网络安全组 选择“高级”。
    配置网络安全组 选择“新建”。
    在“名称”中输入“nsg-1”。
    将其余字段保留默认设置,然后选择“确定”。
  6. 将其余设置保留为默认值,然后选择“查看 + 创建”。

  7. 检查设置,然后选择“创建”。

注意

虚拟网络中具有堡垒主机的虚拟机不需要公共 IP 地址。 Bastion 提供公共 IP,虚拟机使用专用 IP 在网络中进行通信。 可以从堡垒托管的虚拟网络的任何虚拟机中删除公共 IP。 有关详细信息,请参阅 将公共 IP 地址与 Azure VM 取消关联

注意

Azure 会为未分配公共 IP 地址的 VM 或位于内部基本 Azure 负载均衡器的后端池中的 VM 提供默认出站访问 IP。 默认出站访问 IP 机制会提供不可配置的出站 IP 地址。

发生以下事件之一时,将禁用默认出站访问 IP:

  • 将公共 IP 地址分配给 VM。
  • 虚拟机被放置在标准负载平衡器的后端池中,有无出站规则均可。
  • 向 VM 的子网分配了 Azure NAT 网关资源。

在灵活业务流程模式下通过使用虚拟机规模集创建的 VM 没有默认的出站访问权限。

有关 Azure 中的出站连接的详细信息,请参阅 Azure 中的默认出站访问权限使用用于出站连接的源网络地址转换 (SNAT)

部署 Azure 防火墙

  1. 在门户顶部的搜索框中,输入“防火墙”。 在搜索结果中选择“防火墙”。

  2. 在“防火墙”中,选择“+ 创建”。

  3. 在“创建防火墙”的“基本信息”选项卡中,输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    名称 输入 firewall
    区域 选择“(亚太)中国东部 2”。
    可用性区域 选择“无”。
    防火墙 SKU 选择“标准”。
    防火墙管理 选择“使用防火墙策略来管理此防火墙”。
    防火墙策略 选择“添加新订阅”。
    在“策略名称”中输入“firewall-policy”
    在“区域”中选择“中国东部 2”。
    选择“确定”
    选择虚拟网络 选择“新建”。
    虚拟网络名称 输入“vnet-firewall”。
    地址空间 输入“10.2.0.0/16”。
    子网地址空间 输入“10.2.1.0/26”。
    公共 IP 地址 选择“添加新订阅”。
    在“名称”中输入“public-ip-firewall”
    选择“确定”
  4. 选择“查看 + 创建”。

  5. 选择“创建”。

等待防火墙部署完成后,再继续。

启用防火墙日志

在本部分中,将启用防火墙日志并将其发送到 Log Analytics 工作区。

注意

订阅中必须具有 Log Analytics 工作区,然后才能启用防火墙日志。 有关详细信息,请参阅先决条件

  1. 在门户顶部的搜索框中,输入“防火墙”。 在搜索结果中选择“防火墙”。

  2. 选择 firewall

  3. 在“监视”下,选择“诊断设置”。

  4. 选择“+ 添加诊断设置”。

  5. 在“诊断设置”中,输入或选择以下信息:

    设置
    诊断设置名称 输入“diagnostic-setting-firewall”。
    日志
    类别 选择“Azure 防火墙应用程序规则(旧版 Azure 诊断)”和“Azure 防火墙网络规则(旧版 Azure 诊断)”。
    目标详细信息
    目标 选择“发送到 Log Analytics 工作区”
    订阅 选择订阅。
    Log Analytics 工作区 选择 Log Analytics 工作区。
  6. 选择“保存”。

创建 Azure SQL 数据库

  1. 在门户顶部的搜索框中,输入“SQL”。 在搜索结果中选择“SQL 数据库”。

  2. 在SQL 数据库中,选择“+ 创建”。

  3. 在“创建 SQL 数据库”的“基本信息”选项卡中,输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    数据库详细信息
    数据库名称 输入“sql-db”。
    服务器 选择“新建”。
    在“服务器名称”中输入 server-name(服务器名称必须唯一,请将 server-name 替换为唯一值)。
    在“位置”中,选择“(亚太)中国东部 2”。
    选择“使用 SQL 身份验证”。
    输入服务器管理员登录名和密码。
    选择“确定”
    是否要使用 SQL 弹性池? 请选择“否”。
    备份存储冗余
    备份存储冗余 选择“本地冗余备份存储”。
  4. 在完成时选择“下一步: 网络”。

  5. 在“创建 SQL 数据库”的“网络”选项卡中,输入或选择以下信息:

    设置
    网络连接
    连接方法 选择“专用终结点”。
    专用终结点
    选择“+ 添加专用终结点”。
    创建专用终结点
    订阅 选择订阅。
    资源组 选择“test-rg”。
    位置 选择“中国东部 2”。
    名称 输入“private-endpoint”。
    目标子资源 选择“sqlServer”。
    联网
    虚拟网络 选择“vnet-private-endpoint”。
    子网 选择“subnet-private-endpoint”。
    专用 DNS 集成
    与专用 DNS 区域集成 请选择“是”。
    专用 DNS 区域 保留默认值“privatelink.database.chinacloudapi.cn”
  6. 选择“确定”

  7. 选择“查看 + 创建”。

  8. 选择“创建”。

使用虚拟网络对等互连连接虚拟网络

在本部分中,使用虚拟网络对等互连连接虚拟网络。 网络 vnet-1 和 vnet-private-endpoint连接到 vnet-firewall。 vnet-1 和 vnet-private-endpoint 之间没有直接连接。

  1. 在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。

  2. 选择“vnet-firewall”。

  3. 在“设置”中选择“对等互连”。

  4. 在“添加”中选择“对等互连”。

  5. 在“添加对等互连”中,输入或选择以下信息:

    设置
    此虚拟网络
    对等互连链接名称 输入“vnet-firewall-to-vnet-1”。
    到远程虚拟网络的流量 选择“允许(默认)”。
    从远程虚拟网络转发的流量 选择“允许(默认)”。
    虚拟网络网关或路由服务器 选择“无(默认)”。
    远程虚拟网络
    对等互连链接名称 输入“vnet-1-to-vnet-firewall”。
    虚拟网络部署模型 选择“资源管理器”。
    订阅 选择订阅。
    虚拟网络 选择“vnet-1”。
    到远程虚拟网络的流量 选择“允许(默认)”。
    从远程虚拟网络转发的流量 选择“允许(默认)”。
    虚拟网络网关或路由服务器 选择“无(默认)”。
  6. 选择添加

  7. 在“添加”中选择“对等互连”。

  8. 在“添加对等互连”中,输入或选择以下信息:

    设置
    此虚拟网络
    对等互连链接名称 输入“vnet-firewall-to-vnet-private-endpoint”。
    允许“vnet-2”访问“vnet-1” 保留默认值“已选择”。
    允许“vnet-1”接收来自“vnet-private-endpoint”的转发流量 选中复选框。
    允许“vnet-1”中的网关将流量转发到“vnet-private-endpoint” 保留默认值“已清除”。
    允许“vnet-1”使用“vnet-private-endpoint”远程网关 保留默认值“已清除”。
    远程虚拟网络
    对等互连链接名称 输入“vnet-private-endpoint-to-vnet-firewall”。
    虚拟网络部署模型 选择“资源管理器”。
    订阅 选择订阅。
    虚拟网络 选择“vnet-private-endpoint”。
    允许“vnet-private-endpoint”访问“vnet-1” 保留默认值“已选择”。
    允许“vnet-private-endpoint”接收来自“vnet-1”的转发流量 选中复选框。
    允许“vnet-private-endpoint”中的网关将流量转发到“vnet-1” 保留默认值“已清除”。
    允许“vnet-private-endpoint”使用“vnet-1”远程网关 保留默认值“已清除”。
  9. 选择添加

  10. 验证两个网络对等节点的对等互连状态是否显示为“已连接”。

在上一部分中创建专用终结点期间创建的专用 DNS 区域必须链接到 vnet-1 和 vnet-firewall 虚拟网络。

  1. 在门户顶部的搜索框中,输入“专用 DNS 区域”。 在搜索结果中选择“专用 DNS 区域”。

  2. 选择“privatelink.database.chinacloudapi.cn”

  3. 在“设置”中,选择“虚拟网络链接”。

  4. 选择“+ 添加”。

  5. 在“添加虚拟网络链接”中,输入或选择以下信息:

    设置 “值”
    虚拟网络链接
    虚拟网络链接名称 输入“link-to-vnet-1”。
    订阅 选择订阅。
    虚拟网络 选择 vnet-1 (test-rg)
    配置 将“启用自动注册”的默认值保留为未选中状态。
  6. 选择“确定”

  7. 选择“+ 添加”。

  8. 在“添加虚拟网络链接”中,输入或选择以下信息:

    设置 “值”
    虚拟网络链接
    虚拟网络链接名称 输入“link-to-vnet-firewall”。
    订阅 选择订阅。
    虚拟网络 选择“vnet-firewall (test-rg)”。
    配置 将“启用自动注册”的默认值保留为未选中状态。
  9. 选择“确定”

在 vnet-1 和 vnet-private-endpoint 之间创建路由

vnet-1 和 vnet-private-endpoint 之间的网络链接不存在。 必须创建一个路由,以允许流量通过 Azure 防火墙在虚拟网络之间流动。

该路由通过 Azure 防火墙将流量从 vnet-1 发送到虚拟网络 vnet-private-endpoint 的地址空间。

  1. 在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。

  2. 选择“+ 新建”。

  3. 在“创建路由表”的“基本信息”选项卡中,输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    区域 选择“中国东部 2”。
    名称 输入“vnet-1-to-vnet-firewall”。
    传播网关路由 保留默认值“是”。
  4. 选择“查看 + 创建”。

  5. 选择“创建”。

  6. 在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。

  7. 选择“vnet-1-to-vnet-firewall”。

  8. 在“设置”中选择“路由”。

  9. 选择“+ 添加”。

  10. 在“添加路由”中,输入或选择以下信息:

    设置
    路由名称 输入“subnet-1-to-subnet-private-endpoint”。
    目标类型 选择“IP 地址”。
    目标 IP 地址/CIDR 范围 输入 10.1.0.0/16。
    下一跃点类型 选择“虚拟设备”。
    下一跃点地址 输入“10.2.1.4”。
  11. 选择添加

  12. 在“设置”中选择“子网”。

  13. 选择“+ 关联”。

  14. 在“关联子网”中,输入或选择以下信息:

    设置
    虚拟网络 选择“vnet-1 (test-rg)”。
    子网 选择 subnet-1
  15. 选择“确定”

使用 Azure 防火墙中配置应用程序规则

创建应用程序规则,允许从 vnet-1 到 Azure SQL Server 专用终结点 server-name.database.chinacloudapi.cn 的通信。 将 server-name 替换为 Azure SQL 服务器的名称

  1. 在门户顶部的搜索框中,输入“防火墙”。 在搜索结果中选择“防火墙策略”。

  2. 在“防火墙策略”中,选择“firewall-policy”。

  3. 在“设置” 中选择“应用程序规则”。

  4. 选择“+ 添加规则集合”。

  5. 在“添加规则集合”中,输入或选择以下信息:

    设置
    名称 输入“rule-collection-sql”。
    规则集合类型 保留“应用程序”的选择。
    优先级 输入 100
    规则集合操作 选择“允许”
    规则集合组 保留“DefaultApplicationRuleCollectionGroup”的默认值。
    规则
    Rule 1
    名称 输入“SQLPrivateEndpoint”。
    源类型 选择“IP 地址”。
    Source 输入“10.0.0.0/16”
    协议 输入“mssql:1433”
    目标类型 选择“FQDN”
    目标 输入“server-name.database.chinacloudapi.cn”。
  6. 选择 添加

测试从虚拟机到 Azure SQL 的连接

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 选择 vm-1

  3. 在“操作”中,选择“Bastion”。

  4. 输入虚拟机的用户名和密码。

  5. 选择“连接” 。

  6. 若要验证专用终结点的名称解析,请在终端窗口中输入以下命令:

    nslookup server-name.database.chinacloudapi.cn
    

    将收到类似于以下示例的消息。 返回的 IP 地址是专用终结点的专用 IP 地址。

    Server:    127.0.0.53
    Address:   127.0.0.53#53
    
    Non-authoritative answer:
    sql-server-8675.database.chinacloudapi.cncanonical name = sql-server-8675.privatelink.database.chinacloudapi.cn.
    Name:sql-server-8675.privatelink.database.chinacloudapi.cn
    Address: 10.1.0.4
    
  7. 通过在 Linux 上安装 SQL Server 命令行工具 sqlcmd 和 bcp 安装 SQL Server 命令行工具。 安装完成后,继续执行后续步骤。

  8. 使用以下命令连接到在前面步骤中创建的 SQL Server。

    • 将 ServerAdmin<> 替换为在 SQL Server 创建期间输入的管理员用户名。

    • 将 admin-password<> 替换为在 SQL Server 创建期间输入的管理员密码。

    • 将 server-name 替换为 SQL 服务器的名称

    sqlcmd -S server-name.database.chinacloudapi.cn -U '<server-admin>' -P '<admin-password>'
    
  9. 成功登录后,会显示 SQL 命令提示符。 输入 exit 可退出 sqlcmd 工具 。

验证 Azure 防火墙日志中的流量

  1. 在门户顶部的搜索框中,输入“Log Analytics”。 在搜索结果中选择“Log Analytics”。

  2. 选择 Log Analytics 工作区。 在此示例中,工作区名为“log-analytics-workspace”。

  3. 在“常规”设置中,选择“日志”。

  4. 在搜索框中的示例“查询”中,输入“应用程序规则”。 在“网络”中返回的结果中,为“应用程序规则日志数据”选择“运行”按钮。

  5. 在日志查询输出中,验证“FQDN”下是否列出了“server-name.database.chinacloudapi.cn”,而“规则”下是否列出了“SQLPrivateEndpoint”。

清理资源

使用创建的资源之后,可以删除资源组及其所有资源:

  1. 在 Azure 门户中,搜索并选择“资源组”。

  2. 在“资源组”页上,选择“test-rg”资源组。

  3. 在“test-rg”页上,选择“删除资源组”。

  4. 在“输入资源组名称以确认删除”中输入“test-rg”,然后选择“删除”