【问题标题】:Associate a Network Security Group (NSG) to subnet将网络安全组 (NSG) 关联到子网
【发布时间】:2015-12-06 19:07:57
【问题描述】:

我在创建 VNET/子网时遇到了一些困难。我也在使用 ASE,为此我只能使用 Classic VNET。

Azure 提供两种类型的 VNET。根据您创建它的方式(通过 Azure 门户、xplat-cli、旧门户、powershell),此 VNET 可以是“经典”(由蓝色的“<...>”图标表示)或“资源管理器”(由图标“<...>”为绿色)。

据我所知,似乎不可能将 NSG 分配给经典 VNET。这是否意味着我不能在我的 ASE 上拥有 NSG(因为 ASE 只能在经典 VNET 之上创建)?这似乎不对..

【问题讨论】:

    标签: azure associate ase


    【解决方案1】:

    假设您使用 Powershell,服务管理模式下的Set-AzureNetworkSecurityGroupToSubnet cmdlet 会将 NSG 关联到子网。

    更新:

    PS> Switch-AzureMode AzureServiceManagement
    PS> (Get-AzureVNetSite -VNetName "Group vnetnsg vnetnsg").Subnets
    
    Name     AddressPrefix ExtensionData
    ----     ------------- -------------
    default  10.0.0.0/24
    subnet-1 10.0.1.0/24
    
    PS> New-AzureNetworkSecurityGroup -Name "NsgOnSubnet" -Location "West Europe"
    
    Name        Location    Label
    ----        --------    -----
    NsgOnSubnet West Europe
    
    PS> Set-AzureNetworkSecurityGroupToSubnet -Name NsgOnSubnet -VirtualNetworkName "Group vnetnsg vnetnsg" -SubnetName "subnet-1"
    PS> Get-AzureNetworkSecurityGroupAssociation -VirtualNetworkName "Group vnetnsg vnetnsg" -SubnetName "subnet-1"
    
    Name        Location    Label
    ----        --------    -----
    NsgOnSubnet West Europe
    

    【讨论】:

    • 该命令仅在 VNET 是“资源管理器”时才有效。就我而言,我需要将 NSG 关联到 VNET 创建为“经典”的子网。
    • 请参阅服务管理中的更新,例如“经典”VNet。如果您无法将 NSG 关联到 VNet 中的子网,请提供您正在运行的命令。
    • 使用给定的 powershell cmdlet 就可以了!这似乎是现在设置它的唯一可能方法(使用 powershell)。当 VNET 创建为“经典”时,NSG 选项仅可通过 Portal 使用。我想知道这是否仍在由 Microsoft 开发。我必须使用多种方式来配置 Azure 以使我的环境正常工作。某些功能是特定于 powershell、xplat-cli、旧 azure 门户或预览 azure 门户的。这是不好的:/ Thx,MrBink。
    • 门户网站肯定处于不断变化的状态。目前,尽管 ASM 和 ARM 模式之间存在差异,但 CLI 客户端(即 Azure PowerShell 和 xplat-cli)提供了最一致的体验和 Azure 的全部功能。我建议花一些时间学习 CLI 工具——当您开始自动化环境时,它会带来好处。
    【解决方案2】:

    This Microsoft article 解释了 NSG 可以在 Classic 和 ARM 部署方法中应用的位置,并且都没有指定整个 VNet;您拥有的最接近的选项是子网,它应该提供相同的功能;即使您必须将相同的 NSG 应用于多个子网,如果您有多个子网。

    如果您想阻止同一子网中的虚拟机之间的流量,您需要针对虚拟机(经典)或 NIC (ARM) 应用 NSG。

    有一个很棒的 ARM 模板 here,它展示了如何设置 NSG 并将它们应用到子网。如果您想对 NIC 执行相同操作,请参阅以下摘录(假设 NSG 已创建):

    {
      "apiVersion": "2015-06-15",
      "type": "Microsoft.Network/networkInterfaces",
      "name": "nicName",
      "location": "[resourceGroup().location]",
      "properties": {
        "ipConfigurations": [
          {
            "name": "yourNICName",
            "properties": {
              "networkSecurityGroup": {
                "id": "[resourceId('Microsoft.Network/networkSecurityGroups', parameters('yourNSGName'))]"
              },
              "privateIPAllocationMethod": "Dynamic",
              "subnet": {
                "id": "[variables('yourSubnetRef')]"
              }
            }
          }
        ]
      }
    },
    

    【讨论】:

      【解决方案3】:

      对于使用资源管理器部署模型创建的 VNET 和网络安全组

      New-AzureRmResourceGroup -Name TestResourceGroup -Location centralus
      $frontendSubnet = New-AzureRmVirtualNetworkSubnetConfig -Name frontendSubnet -AddressPrefix "10.0.1.0/24"
      
      $virtualNetwork = New-AzureRmVirtualNetwork -Name MyVirtualNetwork -ResourceGroupName TestResourceGroup -Location
      centralus -AddressPrefix "10.0.0.0/16" -Subnet $frontendSubnet
      
      $rdpRule = New-AzureRmNetworkSecurityRuleConfig -Name rdp-rule -Description "Allow RDP" -Access Allow -Protocol
      Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix *
      -DestinationPortRange 3389
      
      $networkSecurityGroup = New-AzureRmNetworkSecurityGroup -ResourceGroupName TestResourceGroup -Location centralus
      -Name "NSG-FrontEnd" -SecurityRules $rdpRule
      
      Set-AzureRmVirtualNetworkSubnetConfig -Name frontendSubnet -VirtualNetwork $virtualNetwork -AddressPrefix
      "10.0.1.0/24" -NetworkSecurityGroup $networkSecurityGroup
      $virtualNetwork | Set-AzureRmVirtualNetwork
      

      此示例创建一个资源组,其中一个虚拟网络仅包含一个子网。然后它创建一个 具有 RDP 流量允许规则的网络安全组。 Set-AzureRmVirtualNetworkSubnetConfig cmdlet 是 用于修改前端子网的内存表示,使其指向新创建的网络 安全组。然后调用 Set-AzureRmVirtualNetwork cmdlet 将修改后的状态写回 服务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-30
        • 2022-01-24
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        • 2015-03-08
        • 1970-01-01
        • 2018-09-16
        相关资源
        最近更新 更多