将网络安全组 (NSG) 关联到子网
Associate a Network Security Group (NSG) to subnet
我在创建 VNET/Subnet 时遇到了一些困难。我也在使用 ASE,为此我只能使用经典 VNET。
Azure 提供两种类型的 VNET。根据您创建它的方式(通过 Azure 门户、xplat-cli、旧门户、powershell),此 VNET 可以是 "Classic"(由蓝色的“<...>”图标表示)或 "Resource Manager (indicated by the icon " <...>”为绿色)。
据我所知,似乎无法将 NSG 分配给经典 VNET。这是否意味着我不能在我的 ASE 上使用 NSG(因为 ASE 只能在经典 VNET 之上创建)?这似乎不对..
假设您使用 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
This Microsoft article 解释了在经典和 ARM 部署方法中都可以应用 NSG 的地方,并且都没有指定整个 VNet;您拥有的最接近的选项是子网,它应该提供相同的功能;即使您必须将相同的 NSG 应用于多个子网,如果您有多个子网。
如果您想阻止 同一子网 中 VM 之间的流量,您需要对 VM(经典)或 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')]"
}
}
}
]
}
},
对于使用资源管理器部署模型创建的 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 将修改后的状态写回
服务。
我在创建 VNET/Subnet 时遇到了一些困难。我也在使用 ASE,为此我只能使用经典 VNET。
Azure 提供两种类型的 VNET。根据您创建它的方式(通过 Azure 门户、xplat-cli、旧门户、powershell),此 VNET 可以是 "Classic"(由蓝色的“<...>”图标表示)或 "Resource Manager (indicated by the icon " <...>”为绿色)。
据我所知,似乎无法将 NSG 分配给经典 VNET。这是否意味着我不能在我的 ASE 上使用 NSG(因为 ASE 只能在经典 VNET 之上创建)?这似乎不对..
假设您使用 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
This Microsoft article 解释了在经典和 ARM 部署方法中都可以应用 NSG 的地方,并且都没有指定整个 VNet;您拥有的最接近的选项是子网,它应该提供相同的功能;即使您必须将相同的 NSG 应用于多个子网,如果您有多个子网。
如果您想阻止 同一子网 中 VM 之间的流量,您需要对 VM(经典)或 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')]"
}
}
}
]
}
},
对于使用资源管理器部署模型创建的 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 将修改后的状态写回 服务。