Narayan Annamalai 网络高级项目经理
上周,我们在欧洲 TechEd 大会上宣布 正式发布网络安全组 ,这是 Azure 网络功能组的一项重要新增功能。网络安全组在虚拟网络 (VNet) 中提供分隔功能,并且可以完全控制进出 VNet 中某台虚拟机的流量。它还有助于实现 DMZ(非军事区)等方案,以允许用户严格确保后端服务(如数据库和应用程序服务器)的安全。
构建多层应用程序是在云中实现业务工作流的常用模式。通常,前端层中的实体(如 Web 代理和 DNS 服务器)位于暴露给Internet 的 DMZ 中。其他层中的功能(如应用程序服务器和后端实例)需要更高的安全级别,因此应与DMZ 隔离开。这些层仅接收来自前端某些实例的流量,且通常不会有流量流出到Internet。利用网络安全组,可以在 Azure 中托管这些多层应用程序体系结构。
下图是一个多层应用程序部署示例:
网络安全组可以控制进出在 Azure 中运行的服务的网络流量。网络安全组还可以应用于虚拟网络中的子网,因此,它们可以提供一个有效的机制,实现跨多个 VM 管理访问控制规则更新。上百甚至上千台计算机上的访问控制规则可以在几秒内发生变化,且无需更新或更改 VM。
除了分隔 Intranet 流量,网络安全组还可用于控制进出Internet 的流量。使用单个访问控制规则,用户可以拒绝整个子网与 Internet 的连接。
VM 和子网 ACL
网络安全组由描述流量过滤器的访问控制规则集组成。它们可以与同一个区域的虚拟机或子网关联。网络安全组中定义的规则充当过滤器。在入口路径中,它们在流量进入 VM 之前被应用。在出口路径中,它们在流量离开 VM 之后被应用。简而言之,这些规则应用于基础结构级别,不能通过用户进程修改,甚至不能通过 VM 中所运行的操作系统修改。网络安全组与子网关联后,将应用于该子网中的所有VM。对网络安全组所做的任何更改都将立即应用于子网中的所有 VM。
网络安全组的一些重要特征包括:
· 规则包含一个 5元组(源 IP、源端口、目标 IP、目标端口、协议)。
· 规则具有状态。这意味着,如果某个入站规则允许某端口(如端口 80)上的流量,对于流经相同端口的数据包,出站端不需要具有相匹配的规则。
· 每个网络安全组均包含默认规则,允许虚拟网络内部的连接和对 Internet 的出站访问。用户规则可以覆盖这些默认规则。
· 规则按照优先级处理。先处理值较小(意味着优先级较高)的规则,后处理值较大(意味着优先级较低)的规则。
· Azure 提供 INTERNET 和VIRTUAL_NETWORK 等默认标记,分别指虚拟网络外部的公用 IP 地址空间和客户的整个网络地址空间。标记可用作访问控制规则的一部分。
网络安全组可以应用于某个 VM 或子网,在有些情况下,也可以同时应用于二者。对于子网中VM 之间的流量模式相差甚远的情况,将具有精确规则的单个网络安全组与单个VM 关联以控制该 VM 的流量可能更适合。对于子网中 VM 的流量模式完全相同的情况(此为常见情况),将网络安全组与具有流量控制规则的子网关联以管理进出整个子网的流量更为适合。在有些情况下,大多数VM流量相同,但需要对一个或两个 VM 进行精确控制,则混合使用上述两种方法最合适。
如上图所示,如果存在与 VM 关联的网络安全组,则在入口路径中,将首先应用它的规则,然后再应用与子网关联的网络安全组中的规则。在出口路径中应用顺序与此相反。
另外,通常网络管理员会为整个子网定义网络安全组规则,而开发人员(VM的所有者) 描述单个 VM 的网络安全组规则。
网络安全组致力于为 VNet 中运行的服务提供对网络流量的粒度级访问控制,其目标是允许订阅最多达100 个网络安全组,每个网络安全组最多具有 200 条规则。如果确实存在需要更多规则或组的使用案例,可以与Microsoft 支持人员联系以取消此限制。
网络安全组仅可用于某个区域性 VNet 中的 VM。有关其他互操作性项目,请参阅下面的常见问题部分。
网络安全组当前只能通过 Power Shell 和 REST API 提供。
#创建网络安全组 New-AzureNetworkSecurityGroup -Name "MyVNetSG" -Location uswest -Label "Security group for my Vnet in West US" #向 NSG 添加、更新规则 Get-AzureNetworkSecurityGroup -Name "MyVNetSG" | Set-AzureNetworkSecurityRule -Name WEB -Type Inbound -Priority 100 -Action Allow -SourceAddressPrefix 'INTERNET' -SourcePortRange '*' -DestinationAddressPrefix '*' -DestinationPortRange '*' -Protocol TCP #从 NSG 中删除规则 Get-AzureNetworkSecurityGroup -Name "MyVNetSG" | Remove-AzureNetworkSecurityRule -Name WEB #将 NSG 与虚拟机关联 Get-AzureVM -ServiceName "MyWebsite" -Name "Instance1" | Set-AzureNetworkSecurityGroupConfig -NetworkSecurityGroupName "MyVNetSG" #从 VM 中删除 NSG Get-AzureVM -ServiceName "MyWebsite" -Name "Instance1" | Remove-AzureNetworkSecurityGroupConfig -NetworkSecurityGroupName "MyVNetSG" #将 NSG 与子网关联 Get-AzureNetworkSecurityGroup -Name "MyVNetSG" | Set-AzureNetworkSecurityGroupToSubnet -VirtualNetworkName 'VNetUSWest' -SubnetName 'FrontEndSubnet' #从子网中删除 NSG Get-AzureNetworkSecurityGroup -Name "MyVNetSG" | Remove-AzureNetworkSecurityGroupFromSubnet -VirtualNetworkName 'VNetUSWest' -SubnetName 'FrontEndSubnet' #删除 NSG Remove-AzureNetworkSecurityGroup -Name "MyVNetSG" #获取网络安全组的详细信息及规则 Get-AzureNetworkSecurityGroup -Name "MyVNetSG" -Detailed
有关其他详细信息,请参阅 MSDN 上的内容。
1. 我的 VM 端点上已经使用了端点 ACL,我还可以使用网络安全组吗?
不可以,您只能使用端点 ACL 或网络安全组。您可以从 VM 删除端点 ACL ,然后将 VM 关联到网络安全组。
2. 我的 VM 中有多个 NIC,网络安全组规则适用于所有 NIC 上的流量吗?
不适用,网络安全组规则仅适用于主 NIC 中的流量。将来我们会增加将网络安全组直接与 NIC 关联的功能。
3. 我已经创建了一个网络安全组,接下来应该怎么做?
创建网络安全组后,通过运行以下命令查找默认规则:
Get - AzureNetworkSecurityGroup - Name "MyVNetSG" - Detailed |
此命令将为您显示默认规则。下一步是将网络安全组与 VM 或子网关联。添加更多规则以控制实体上的网络流量。观察规则在数分钟内(通常几秒钟即可)生效。
4. 我已经为我的 VM 定义了RDP 端点,并且打算使用网络安全组,我是否需要访问控制规则才能从 Internet 连接到 RDP 端口?
是的,网络安全组中的默认规则不允许从 Internet 访问任何端口,用户必须创建特定规则才能允许 RDP 流量。
如果你有任何疑问, 欢迎访问 MSDN 社区,由专家来为您解答 Windows Azure各种技术问题,或者拨打世纪互联客户服务热线 400-089-0365/010-84563652咨询各类服务信息。
本文翻译自: http://azure.microsoft.com/blog/2014/11/04/network-security-groups/