教程:使用虚拟网络服务终结点限制对 PaaS 资源的网络访问

通过虚拟网络服务终结点,您可以将一些 Azure 服务资源的网络访问限制为虚拟网络子网。 您还可以删除资源的 Internet 访问。 服务终结点提供从您的虚拟网络到受支持的 Azure 服务的直接连接,使您能够使用虚拟网络的专用地址空间来访问 Azure 服务。 通过服务终结点发往Azure资源的流量始终保留在Azure主干网络上。

教程中创建的 Azure 资源的图示。

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

  • 使用一个子网创建虚拟网络
  • 添加子网并启用服务终结点
  • 创建一个Azure资源,并仅允许从一个子网访问网络。
  • 将虚拟机 (VM) 部署到每个子网
  • 确认从子网访问资源
  • 确认拒绝从子网和互联网访问资源

先决条件

创建资源组

  1. 登录到 Azure 门户。

  2. 在门户顶部的搜索框中输入“资源组”。 在搜索结果中选择“资源组”。

  3. 选择“+ 新建”。

  4. 在“创建资源组”的“基本信息”选项卡中,输入或选择以下信息:

    设置 值
    项目详细信息
    订阅 选择订阅。
    资源组 输入 test-rg。
    区域 选择“中国北部 3”。
  5. 选择“查看 + 创建”。

  6. 选择创建。

创建虚拟网络

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

  2. 选择“+ 新建”。

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

    设置 值
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    名称 输入“vnet-1”。
    区域 选择“中国北部 3”。
  4. 选择“下一步”,转到“安全性”选项卡。

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

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

  7. 在 “编辑子网”中,输入或选择以下信息:

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

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

部署Azure Bastion

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

注意事项

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

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

  2. 选择“+ 新建”。

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

    设置 值
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    名称 输入堡垒。
    区域 选择“中国北部 3”。
    层 选择 “开发人员”。
    配置虚拟网络
    虚拟网络 选择“vnet-1”。
  4. 选择“查看 + 创建”。

  5. 选择创建。

启用服务终结点

每个服务、每个子网均启用服务终结点。

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

  2. 在“虚拟网络”中,选择“vnet-1”。

  3. 在vnet-1的“设置”部分,选择“子网”。

  4. 选择“+ 子网”。

  5. 在“添加子网”页面上,输入或选择以下信息:

    设置 值
    名称 子网专用
    子网地址范围 保留默认值10.0.2.0/24。
    服务终结点
    服务 选择 Microsoft.Storage
  6. 选择“保存”。

注意

在为其中有资源的现有子网启用服务终结点之前,请参阅更改子网设置。

限制子网的网络访问

默认情况下,子网中的所有虚拟机实例均可与任何资源通信。 可以通过创建网络安全组并将其关联到子网来限制与子网中所有资源的通信。

  1. 在门户页面顶部的搜索框中,搜索“网络安全组”。 在搜索结果中选择“网络安全组”。

  2. 在“网络安全组”中,选择“+ 创建”。

  3. 在“创建网络安全组”的“基本信息”选项卡中,输入或选择以下信息 :

    设置 值
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    名称 输入 nsg-storage。
    区域 选择“中国北部 3”。
  4. 选择查看 + 创建,然后选择创建。

创建出站网络安全组 (NSG) 规则

  1. 在门户页面顶部的搜索框中,搜索“网络安全组”。 在搜索结果中选择“网络安全组”。

  2. 选择 nsg-storage。

  3. 在“设置”中,选择“出站安全规则” 。

  4. 选择“+ 添加”。

  5. 创建允许与Azure 存储服务的出站通信的规则。 在“添加出站安全规则”中,输入或选择以下信息:

    设置 值
    源 选择“服务标记”。
    源服务标记 选择“VirtualNetwork”。
    源端口范围 保留默认值 *。
    目标 选择“服务标记”。
    目标服务标记 选择 Storage。
    服务 保留默认值“自定义”。
    目标端口范围 输入445。
    协议 选择“任何”。
    动作 选择“允许”。
    优先级 保留默认值“100”。
    名称 输入 allow-storage-all。
  6. 选择“+ 添加”。

  7. 创建另一条出站安全规则,拒绝到 Internet 的通信。 此规则将覆盖所有网络安全组中允许出站 Internet 通信的默认规则。 使用添加出站安全规则中的以下值完成上述步骤:

    设置 值
    源 选择“服务标记”。
    源服务标记 选择“VirtualNetwork”。
    源端口范围 保留默认值 *。
    目标 选择“服务标记”。
    目标服务标记 选择“Internet”。
    服务 保留默认值“自定义”。
    目标端口范围 输入 *。
    协议 选择“任何”。
    动作 选择“拒绝”。
    优先级 保留默认值110。
    名称 输入deny-internet-all。
  8. 选择 添加 。

  9. 在门户页面顶部的搜索框中,搜索“网络安全组”。 在搜索结果中选择“网络安全组”。

  10. 选择 nsg-storage。

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

  12. 选择“+ 关联”。

  13. 在 关联子网中,在 虚拟网络中选择 vnet-1。 在“子网”中选择“子网专用“。

  14. 选择“确定”。

将网络访问限制到资源

通过 Azure 服务创建的资源,限制对其网络访问所需的步骤因服务的不同而不同,这些步骤是为服务终结点启用的。 请参阅各个服务的文档来了解适用于每个服务的具体步骤。 本教程的其余部分包括限制 Azure 存储账户网络访问的步骤,作为一个示例。

创建存储账户

  1. 在门户顶部的搜索框中,输入 Storage 帐户。 在搜索结果中选择存储帐户。

  2. 选择“+ 新建”。

  3. 在“创建存储帐户”的“基本信息”选项卡中,输入或选择以下信息:

    设置 值
    项目详细信息
    订阅 选择Azure订阅。
    资源组 选择“test-rg”。
    实例详细信息
    存储帐户名称 输入唯一名称。 本教程使用 storage1。 如果该名称不可用,请输入一个唯一的名称。
    位置 选择“(亚洲)中国北部 3”。
    性能 保留默认值“标准”。
    冗余 选择 本地冗余存储(LRS)。
  4. 选择“查看”。

  5. 选择创建。

重要

Microsoft 建议使用最安全的可用身份验证流。 本程序中描述的身份验证流程需要对应用程序有非常高的信任度,并且存在其他流程中不存在的风险。 请仅在无法使用其他更安全的流(例如托管标识)时才使用此流。

有关使用托管标识连接到存储帐户的详细信息,请参阅 使用托管标识访问 Azure 存储。

在 storage 帐户中创建文件共享

  1. 在门户顶部的搜索框中,输入 Storage 帐户。 在搜索结果中选择存储帐户。

  2. 在 Storage 帐户中,选择在上一步中创建的storage帐户。

  3. 在 Data storage 中,选择 File 共享。

  4. 选择 + 文件共享。

  5. 在“新文件共享”中,输入或选择以下信息:

    设置 值
    名称 输入文件共享。
    层 保留默认值“事务优化”。
  6. 选择“下一步:备份”。

  7. 取消选择“启用备份”。

  8. 选择查看 + 创建,然后选择创建。

将网络访问限制到一个子网

默认情况下,存储帐户接受来自任何网络的客户端(包括互联网)的网络连接。 可以限制来自 Internet 及所有虚拟网络中所有其他子网的网络访问(位于 vnet-1 虚拟网络中的 subnet-private 子网除外)。

要将网络访问限制到某个子网,

  1. 在门户顶部的搜索框中,输入 Storage 帐户。 在搜索结果中选择存储帐户。

  2. 选择存储帐户。

  3. 在“安全性 + 网络”中,选择“网络”。

  4. 在防火墙和虚拟网络选项卡中,选择公共网络访问中的启用所选虚拟网络和 IP 地址选项。

  5. 在 Virtual networks 中,选择 + 添加现有virtual network。

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

    设置 值
    订阅 选择订阅。
    虚拟网络 选择“vnet-1”。
    子网 选择“subnet-private”。

    限制存储帐户仅限于以前创建的子网和虚拟网络的截图。

  7. 选择 添加 。

  8. 选择 保存 以保存虚拟网络配置。

将虚拟机部署到子网

若要测试存储帐户的网络访问权限,请在每个子网中部署一台虚拟机。

创建第一个虚拟机

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

  2. 选择+ 创建,然后选择Azure虚拟机。

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

    设置 值
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    虚拟机名称 输入“vm-1”。
    区域 选择“(亚洲)中国北部 3”。
    可用性选项 选择“无需基础结构冗余”。
    安全类型 选择“标准” 。
    图像 选择“Ubuntu Server 24.04 LTS - x64 Gen2”。
    VM 架构 保留默认值“x64”。
    大小 选择一个大小。
    管理员帐户
    身份验证类型 选择“SSH 公钥”。
    用户名 输入用户名。
    SSH 公钥源 选择“生成新密钥对”。
    密钥对名称 输入 vm-1-key。
    入站端口规则
    公共入站端口 选择“无”。
  4. 选择“下一步: 磁盘”,然后选择“下一步: 网络”。

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

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

  7. 选择创建。

注意事项

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

注意事项

Azure为未分配公共 IP 地址的虚拟机,或者位于内部基本 Azure 负载均衡器后端池中的虚拟机,提供默认的出站访问 IP。 默认出站访问 IP 机制提供一个无法配置的出站 IP 地址。

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

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

在灵活协调模式下使用虚拟机规模集创建的 VM 没有默认的出站访问。

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

创建第二个虚拟机

  1. 创建第二个虚拟机,重复上一部分中的步骤。 替换“创建虚拟机”中的以下值:

    设置 值
    虚拟机名称 输入vm-private。
    SSH 公钥源 选择“生成新密钥对”。
    密钥对名称 输入 vm-private-key。
    子网 选择“subnet-private”。
    公共 IP 选择“无”。
    网络接口 (NIC) 网络安全组 选择“无”。

    警告

    在部署完成之前,请不要继续执行下一步。

确认访问存储帐户

之前创建的虚拟机已被分配到 subnet-private 子网,用于确认对存储帐户的访问。 在上一部分中创建的虚拟机已分配给 subnet-1 子网,用于确认对存储帐户的访问已被阻止。

获取存储帐户访问密钥

  1. 在门户顶部的搜索框中,输入 Storage 帐户。 在搜索结果中选择存储帐户。

  2. 在 存储帐户中,选择您的存储帐户。

  3. 在 安全与网络中,选择 访问密钥。

  4. 复制key1值。 可能需要选择“显示”按钮以显示密钥。

    存储帐户访问密钥的截图。

  5. 在门户顶部的搜索框中,输入虚拟机。 在搜索结果中选择Virtual machines。

  6. 选择“vm-private”。

  7. 在操作中选择Bastion。

  8. 从本地文件中为身份验证类型选择 SSH 私钥。

  9. 输入在创建虚拟机时指定的用户名。

  10. 选择下载的 vm-private-key 私钥文件。

  11. 选择“连接” 。

  12. 使用以下命令装载 Azure 文件共享。

    • 将 <storage-account-key> 替换为在上一步中复制的密钥。

    • 将 <storage-account-name> 替换为您的存储帐户的名称。 在此示例中,它是storage8675。

     sudo mkdir /mnt/file-share
    
     sudo mount -t cifs //<storage-account-name>.file.core.chinacloudapi.cn/file-share /mnt/file-share -o vers=3.0,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino
    
  13. 你收到$提示时没有出现错误。 Azure文件共享已成功装载到 /mnt/file-share。

  14. 运行以下命令确认装载:

     df -h /mnt/file-share
    

    应该会看到与下面类似的输出:

    Filesystem                                       Size  Used Avail Use% Mounted on
    //<storage-account-name>.file.core.chinacloudapi.cn/file-share  5.0G   0   5.0G   0% /mnt/file-share
    
  15. 关闭与vm-private的 Bastion 连接。

确认存储帐户的访问被拒绝

从 vm-1

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

  2. 选择 vm-1。

  3. 在操作中选择Bastion。

  4. 从本地文件中为身份验证类型选择 SSH 私钥。

  5. 输入在创建虚拟机时指定的用户名。

  6. 选择下载的 vm-1 密钥 私钥文件。

  7. 选择“连接” 。

  8. 重复上述命令,尝试在存储帐户中装载文件共享。 对于此过程,您可能需要再次复制存储帐户的访问密钥:

     sudo mkdir /mnt/file-share
    
     sudo mount -t cifs //<storage-account-name>.file.core.chinacloudapi.cn/file-share /mnt/file-share -o vers=3.0,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino
    
  9. 访问被拒绝,你会收到错误 mount error(13): Permission denied 。 装载失败,因为 vm-1 位于 子网 1 中,该子网没有 Azure 存储的服务终结点。

  10. 关闭与vm-1的 Bastion 连接。

从本地计算机上

  1. 在门户顶部的搜索框中,输入 Storage 帐户。 在搜索结果中选择存储帐户。

  2. 在 存储帐户中,选择您的存储帐户。

  3. 在 Data storage 中,选择 File 共享。

  4. 选择“文件共享”。

  5. 在左侧菜单中,选择“浏览”。

  6. 会收到以下错误信息:

    访问被拒绝错误消息的截图。

注意事项

访问被拒绝,因为您的计算机不在 subnet-private 子网的 vnet-1 虚拟网络中。

清理资源

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

  1. 在Azure portal中,搜索并选择资源组。

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

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

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

后续步骤

本教程的内容:

  • 为“虚拟网络”子网启用了服务终结点。

  • 你得知,可以为从多个 Azure 服务部署的资源启用服务端点。

  • 你创建了一个 Azure 存储帐户,并将其网络访问限制为仅虚拟网络子网中的资源。

若要详细了解服务终结点,请参阅服务终结点概述和管理子网。

如果你的帐户中有多个虚拟网络,你可能需要在这些虚拟网络之间建立连接,使资源能够相互通信。 若要了解如何连接虚拟网络,请继续学习下一教程。