演讲嘉宾简介:王帝(丞浩),阿里云技术专家,2017年10月加入阿里云弹性计算团队,主要负责网络安全组的优化和演进。
以下内容根据演讲视频以及PPT整理而成。观看回放
更多课程请进入“玩转ECS详情页”了解
使用过ECS的朋友一定不会对安全组陌生,他是ECS实例的虚拟防火墙。配置安全组是创建ECS实例或者发生网络属性变更必不可少的一步。下面我就为大家分享一下安全组的相关内容。
本次分享主要围绕以下三个部分,安全组的简介,基本操作和最佳实践。
一、安全组简介
ECS网络访问控制
首先什么是安全组,阿里云ECS的网络访问控制,是由子网ACL和安全组两层实现的。大家知道阿里云提供VPC专有网络,是用户独有的云上私有网络。VPC专用网络为用户独立出一块网络区域,使得用户可以自行规划自己的网段,在没有配置公网IP的情况下,VPC是完全与外界隔离的。
交换机绑定网络ACL,ACL会对应一些控制规则,所有经过交换机的网络流量都需经过这些规则,一般配置的是黑名单规则(当然也支持指定白名单),例如不允许哪些网端的数据包流入或流出。
再往下一层就是我们今天要讲的安全组,相对于子网ACL是生效在交换机上,安全组实例级别的防火墙,生效在ECS上面。所有经过用户的ECS网络流量都需经过安全组。
安全组是一种虚拟防火墙,具备状态检测和数据包过滤能力,用于在云端划分安全域。通过配置安全组规则,您可以控制安全组内ECS实例的入流量和出流量。
安全组是一个逻辑上的分组,由同一地域内具有相同安全保护需求并相互信任的实例组成。此外,安全组与子网ACL之间的明显区别是安全组具有状态,安全组会自动允许返回的数据流不受任何规则的影响,简单来说就是主动请求别人就一定会收到回包。而交换机则不是,入流量也会走一遍所设置的子网ACL规则,如果被拦截是收不到回包的。有些用户会将安全组与iptables对比,其实这两者是独立的。
阿里建议用户单独使用安全组,如果用户的场景需要配置iptables,ECS也是完全支持的。相对于子网ACL的黑名单方式,安全组一般是白名单。
ECS或弹性网卡必须至少属于一个安全组,安全组组内默认互通可以配置规则控制网络联通。
二、安全组的基本操作
下面再给大家分享一下在阿里云ECS控制台是如何操作管理安全组的。
为了方便理解,我们把对安全组的操作暂时分为两类,组的操作和规则的操作。
组的操作是针对安全组本身的操作,比如创建、删除、改名字,以及可能导致安全组内IP发生变化的操作,还有组内添加实例网卡、替换组等。规则的操作则是改变组内规则的操作,比如添加,删除,修改,克隆等操作。
先说组的操作,比如组内加减实例,网卡等操作比较简单,我们就不特别介绍了,重点介绍一下替换组。
替换组:实例可以从组A替换到组B,在替换过程中不会发生网络闪断或抖动的情况,用户只需保证新老组的规则是兼容的,在整个替换过程中不会对网络有任何的影响和抖动。
再说规则的操作,我们重点介绍一下还原,导出导入,Classic Link和克隆组。
**
规则还原:**对两组规则进行合并或替换,一般在做实验性质的网络变更之前可以先克隆出一个组,测试后可以通过规格还原功能恢复成原来的样子。下图为规格还原的页面,展示出哪些规格为新增哪些为删除。
导出导入:将安全组下载成JSON文件或是CSV文件用于备份。
Classic Link:通过添加一条安全组规则实现VPC和经典网络之间的网络联通。
克隆组:克隆组支持跨地域或跨网络类型的安全组复制,可以从经典网络到VPC或是到一个新Regen并快速复制一个组。
三、最佳实践
最后再给大家介绍一下比较好的安全组配置实践,比如如何合理的配置规则,如何使用五元组,如何基于安全组做断网演练。
安全组规则格式
首先先介绍一下安全组规则配置有两种方式:
CIDR:图中示例展示,授权192.168.0.0/24的地址DR机器访问22端口。
组织授权:图中示例展示,拒绝另一组访问的所有端口,完全切断两组之间的流量。
以上两个示例都为入方向规则,一般情况下不知道对方使用哪个端口接连自己,所以不限制,区别在于自己任选哪个端口对外暴露给任意对象。
相对于上图的四元组,阿里也支持五元组。
五元组为五个参数:源地址、源端口、目的地址、目的端口、传输层协议,相比四元组多了目的地址。以入方向规则为例,使用五元组可以实现不放行整个组,可单独放行某一个IP段,这样某些平台内网络服务为了防范第三方产品对用户ECS的实例发起非法访问,需要在安全组内设置五元组规则,更精确的控制出和入的流量。另外,如果用户组内联通策略是拒绝场景,想精确控制组内ECS之间的联通策略也需要使用五元组。五元组场景较为特殊,而绝大多数场景四元组是可以胜任的。
规则配置建议
先规划对于分布式应用来说,不同的应用类型应放到不同组中。使用白名单方式管理安全组,不建议用户使用先加一条低优先级全通,再逐条拒绝的方式。要慎用0.0.0.0/0全通策略。遵守规则最小化配置原则。尽量使用CIDR段,因为单组容量有限,而且CIDR地址段更容易扩展和维护。不限制协议使用all,不是每个协议都配一遍。安全组规则变更非常高危,要认真写好备注以便于后续的维护。
潜在高危安全组概览
阿里云ECS会定期检查用户的实例,如果实例暴露在公共环境并且开放高危端口,阿里会对用户做出预警,且用户在资源概览页面中可以查看自己的高危安全组。
如何给应用划分安全组
为了避免测试环境和正式环境之间互相干扰,阿里会将测试环境和正式环境放在不同VPC中进行隔离。将有公网服务放在一组内网服务放在一组。不同应用类型应使用不同安全组,例如Web服务、应用服务、数据库或缓存,都应该放在不同安全组中。下图中的示例,由于都需使用跳板机,所以都授权了跳板机组G1,Web服务器需要联通应用服务器,应用服务器又需要联通数据库,所以分别做了组组授权。这样做完网络安全组的规划使得应用分层清晰,便于后续的维护,同时也满足了隔离性和安全性的要求。
使用安全组进行断网演练
基于安全组可进行断网演练用于高可用容灾或混沌工程等场景,如下图中case,演练数据挂掉时系统的表现,可以将此DB加入专门的断网组,断网组+全阻断规格来实现快速规模化断网。
拆解断网过程
创建断网组:因为组内默认联通策略是组内互通的,所以先改为组内不互通。
加入实例:先将演练数据库加入断网组内,这时对业务无任何影响且正常运行。
添加规则:当真正进行断网演练时需要执行该步骤,给断网组出和入各加一条全阻断规则,加完后此时服务器的流量就会完全被切断。
删除规则:当演练完毕后,需要将全阻断规则删除,即可恢复业务。
如果需要不定期做容灾演练,只需重复步骤三、四即可。
企业级安全组
传统安全组组内容量上限是2000IP,如要进行更大规模则需使用企业组,企业组支持单组60000以上的IP,未来支持的容量会更多。
典型的企业组场景例如阿里云的容器服务ACK或是用户自建K8s集群,其实ECS只是作为S层,ECS之间只需网络互通即可。容器的网络访问控制并不是安全组实现的,而是通过Network Policy等方式来实现的。下图中的示例显示是较为常见的部署方式,VPC下挂两个虚拟交换机分别在两个可用区做跨地域容灾,将所有实例放入一个组中,无需复杂的规则配置,只需配置内网全通和出方向全通就可实现VPC内互通。下图中只配置了三条规则,两条入方向全通和一条出方向全通,这是较为常见的容器服务安全组架构。如果用户不需要组组授权并且对组内的实例规模有要求,那么请使用企业级安全组。如果当前传统组想切换至企业组,有两种方式可实现,第一种新建一个企业组后采用替换组的方式将实例逐个挪入到企业组中,第二种是阿里协助用户将原来的传统组升级成企业组。
云产品托管安全组
用户在使用阿里云云产品时,如云防火墙、NAT网关等,云产品都会替用户创建安全组,为了避免用户误操作造成产品不可用,阿里采用了托管模式,托管组即用户可建不可操作,避免产生问题。
以上是对本次分享的全部,希望对大家有所帮助,谢谢各位。
关注百晓生,笑谈云计算