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

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

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

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

  • 创建包含一个子网的虚拟网络
  • 添加子网并启用服务终结点
  • 创建 Azure 资源并且仅允许从一个子网对其进行网络访问
  • 将虚拟机 (VM) 部署到每个子网
  • 确认从某个子网对资源的访问
  • 确认已拒绝从某个子网和 Internet 来访问资源

本教程使用 Azure 门户。 也可以使用 Azure CLIPowerShell 完成此操作。

先决条件

  • Azure 订阅

登录 Azure

登录 Azure 门户

创建虚拟网络和堡垒主机

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

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

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

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

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

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

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

  5. 在“安全性”选项卡的“Azure Bastion”部分中,选择“启用 Bastion”。

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

    注意

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

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

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

    在 Azure 门户的“创建虚拟网络”中启用堡垒主机的屏幕截图。

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

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

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

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

    默认子网重命名和配置的屏幕截图。

  10. 选择“保存”。

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

启用服务终结点

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

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

  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”。
    源端口范围 保留默认值 *
    目标 选择“服务标记”。
    目标服务标记 选择“存储”
    服务 保留默认值“自定义”。
    目标端口范围 输入445
    SMB 协议用于连接到在后续步骤中创建的文件共享。
    协议 选择“任何”
    操作 选择“允许”
    优先级 保留默认值“100”。
    名称 输入allow-storage-all

    创建用于访问存储的出站安全规则时的屏幕截图。

  6. 选择+ 添加

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

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

    创建用于阻止 Internet 访问的出站安全规则时的屏幕截图。

  8. 选择 添加

将网络安全组与子网相关联

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

  2. 选择“nsg-storage”。

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

  4. 选择“+ 关联”。

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

    专用子网与网络安全组关联的屏幕截图。

  6. 选择“确定”

限制对资源的网络访问

对于通过为服务终结点启用的 Azure 服务创建的资源,限制对其的网络访问时所需的步骤因服务而异。 请参阅各个服务的文档来了解适用于每个服务的具体步骤。 本教程的余下内容以示例的形式介绍了限制 Azure 存储帐户进行网络访问的步骤。

创建存储帐户

为本文中的步骤创建 Azure 存储帐户。 如果已有存储帐户,可以改为使用它。

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

  2. 选择“+ 新建”。

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

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

  5. 选择创建

在存储帐户中创建文件共享

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

  2. 在“存储帐户”中,选择在前面步骤中创建的存储帐户。

  3. 在“数据存储”中,选择“文件共享”。

  4. 选择“+ 文件共享”。

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

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

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

  8. 依次选择“查看 + 创建”、“创建”。

限制对子网的网络访问

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

限制对子网的网络访问:

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

  2. 选择存储帐户。

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

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

  5. 在“虚拟网络”中,选择“+ 添加现有虚拟网络”。

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

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

    存储帐户对之前创建的子网和虚拟网络的限制的屏幕截图。

  7. 选择 添加

  8. 选择“保存”按钮保存虚拟网络配置。

    存储账户屏幕及子网限制确认的屏幕截图。

创建虚拟机

要测试对存储帐户的网络访问,请向每个子网部署虚拟机。

创建测试虚拟机

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

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

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

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

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    虚拟机名称 输入“vm-1”。
    区域 选择“中国东部 2”。
    可用性选项 选择“无需基础结构冗余”。
    安全类型 保留默认值标准
    映像 选择Windows Server 2022 Datacenter - x64 Gen2
    VM 架构 保留默认值“x64”。
    大小 选择一个大小。
    管理员帐户
    身份验证类型 选择密码
    用户名 输入“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。
  • 虚拟机被放置在标准负载平衡器的后端池中,有无出站规则均可。
  • 向虚拟机的子网分配了 Azure 虚拟网络 NAT 网关 资源。

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

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

创建第二个虚拟机

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

    设置 Value
    虚拟机名称 输入vm-private
    子网 选择“subnet-private”。
    公共 IP 选择
    NIC 网络安全组 选择“无”。

    警告

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

确认对存储帐户的访问

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

获取存储帐户访问密钥

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

  2. 在“存储帐户”中,选择存储帐户。

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

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

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

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

  6. 选择“vm-private”。

  7. 在“操作”中选择“Bastion”。

  8. 输入在创建虚拟机时指定的用户名和密码。 选择“连接” 。

  9. 打开 Windows PowerShell。 使用以下脚本将 Azure 文件共享映射到驱动器 Z。

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

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

     $key = @{
         String = "<storage-account-key>"
     }
     $acctKey = ConvertTo-SecureString @key -AsPlainText -Force
    
     $cred = @{
         ArgumentList = "Azure\<storage-account-name>", $acctKey
     }
     $credential = New-Object System.Management.Automation.PSCredential @cred
    
     $map = @{
         Name = "Z"
         PSProvider = "FileSystem"
         Root = "\\<storage-account-name>.file.core.chinacloudapi.cn\file-share"
         Credential = $credential
     }
     New-PSDrive @map
    

    PowerShell 将返回类似于以下示例的输出:

    Name        Used (GB)     Free (GB) Provider      Root
    ----        ---------     --------- --------      ----
    Z                                      FileSystem    \\storage8675.file.core.chinacloudapi.cn\f...
    

    Azure 文件共享已成功映射到驱动器 Z。

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

确认已拒绝对存储帐户的访问

从 vm-1

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

  2. 选择 vm-1

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

  4. 输入在创建虚拟机时指定的用户名和密码。 选择“连接” 。

  5. 重复上述命令,尝试将驱动器映射到存储帐户中的文件共享。 对于此过程,可能需要再次复制存储帐户访问密钥:

    $key = @{
        String = "<storage-account-key>"
    }
    $acctKey = ConvertTo-SecureString @key -AsPlainText -Force
    
    $cred = @{
        ArgumentList = "Azure\<storage-account-name>", $acctKey
    }
    $credential = New-Object System.Management.Automation.PSCredential @cred
    
    $map = @{
        Name = "Z"
        PSProvider = "FileSystem"
        Root = "\\<storage-account-name>.file.core.chinacloudapi.cn\file-share"
        Credential = $credential
    }
    New-PSDrive @map
    
  6. 会收到以下错误信息:

    New-PSDrive : Access is denied
    At line:1 char:5
    +     New-PSDrive @map
    +     ~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (Z:PSDriveInfo) [New-PSDrive], Win32Exception
        + FullyQualifiedErrorId : CouldNotMapNetworkDrive,Microsoft.PowerShell.Commands.NewPSDriveCommand
    
  7. 关闭与vm-1的 Bastion 连接。

在本地计算机中:

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

  2. 在“存储帐户”中,选择存储帐户。

  3. 在“数据存储”中,选择“文件共享”。

  4. 选择“文件共享”。

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

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

    “拒绝访问”错误消息的屏幕截图。

注意

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

清理资源

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

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

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

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

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

后续步骤

本教程的内容:

  • 你已为虚拟网络子网启用服务终结点。

  • 我们已了解,可为通过多个 Azure 服务部署的资源启用服务终结点。

  • 你已创建一个 Azure 存储帐户,并已将对该存储帐户的网络访问限制为只能从某个虚拟网络子网中的资源进行。

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

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