云思路 | 云服务的安全(1)网络安全组

来源:互联网 发布:产品设计软件 axure 编辑:程序博客网 时间:2024/05/15 11:57

和朋友商量了下,回顾过去34年的客户关系管理平台项目经历,其实不知不觉的我们已经很依赖于云服务带来的便捷以及高效。朋友更多在国内的阿里云上而我主要在国外的AWS上。后面的文章里我们将会一点点的写下我们在做群脉SCRM开发使用云服务过程中的一些经验和教训,当作对自己一种总结的同时也希望能给大家一些借鉴。

 

让我们从最简单的服务器开始,既然使用云服务基本都会用到云服务器,在阿里云上是ECS,在Amazon上叫EC2.基本上只要账号里有钱,新建服务器的步骤已经简化到和在线买东西一样方便了。

 

我看到不少开发或者IT运维人员上来就直接开始新建服务器了,盯着一堆服务器秒秒钟创建出来是有点变态爽.但这个时候有多少人关注过这么一个问题,我的网络拓扑呢?我的访问策略呢?云服务的确能很快的让你从零开始搭建起你的服务器环境,毕竟平台的初衷是让尽可能多的不具备IT运维能力的人或组织来使用它的服务。

 

Cloud还不是那么红火的年代,当我们要规划一个项目服务器的时候,通常我们会做以下几件事:

 

·预估系统的吞吐量并适当增加一年左右的增长

·根据预估,以及HA方案制定需要的服务器数量以及配置

·规划网络拓扑结构,分割网段,内网访问策略,公网访问策略

·配置防火墙,防止DDOSDOS攻击

 

 

那这些在云服务平台上还存在吗,作为使用者还需要去考虑吗?答案是肯定的,只不过云服务提供商帮你做了其中的一部分,从本文开始就让我来帮大家梳理下我遇见过的云服务上的安全考虑,在开始说本文的重点的前,我觉得有必要梳理下几个基本概念:

 

云服务网络
不论是Amazon,阿里云,还是Azuru,对网络都有2个基本概念。

 

 

·经典网络

统一部署在云服务提供商的公共基础网络内,网络的规划和管理由云服务提供商负责,这类网络更适合对网络易用性要求比较高的客户。

 

 

·VPC网络

专有网络,是指用户在云服务提供商的基础网络内建立一个可以自定义的专有隔离网络,用户可以自定义这个专有网络的网络拓扑和IP地址分段

 

对大部分用户,除非有自己专职的IT网络团队,基本上都是使用经典网络。但有个概念要清楚的,经典网络的网络结构是扁平的,你可以想成所有你买的服务器在一个大的内网局域网(当然实际情况要复杂的多)。

 

区域概念

大型云服务提供商都是划分区域机房的(在AWSZone),在购买服务器时候选择什么区域是要提前规划的,基本也就2个原则:

 

1使用者就近原则

2异地灾备

 

 

但是这里我要提一个醒(因为当年我也曾犯过傻), 不同区域的服务器之间内网不互通的。内网不互通意味着啥呢:

 

·你很豪,带宽管够,因为数据传输走的都是公网(固定带宽的忽略)

·你的负载均衡是木有办法跨地域的哦

·好好想想服务响应速度,当中还要走一次公网请求是什么感觉。

 

所以不要等到你付钱购买了服务器后再发现买的服务器区域都是不同的。

 

多管理账户

多管理账户在很多组织里是很常见的分割管理的方式,就像我现在的公司就有多个阿里云账户分配给不同的组。那这又有什么问题呢?还是2点:

 

 1在创建新的服务时候先考虑下区域的问题(上面已经提过了)

 2内网互通策略 (本文的重点,终于出来了)

 

 

安全组概念

前面提到过,大部分用户使用都是在经典网络下使用服务器,而经典网络可以简单的理解为是一个扁平网络。那我们如何在这种情况下划分安全区,分割网络访问呢? 最简单的例子如下图:



这个图是比较常见的一个系统架构,那很自然的会有以下的访问策略定义

 

·中间件(Queue集群,Redis集群)都是不需要对外网公开,只允许内网Application服务器访问特定端口。

·数据库Master,不允许外网访问,只允许application服务器集群访问特定端口。只允许访问Slave服务器

·数据库Slave,不允许外网访问,不允许访问其他服务器。只允许Master服务器访问特定端口。

·Application集群,不允许外网访问,只允许前端API服务器集群访问特定端口。

·反向代理,公网访问特定接口,可访问API服务器以及Web服务器的特定端口。

 

 

那安全组的概念就出来了, 安全组是一种软件虚拟的防火墙,具备状态检测包过滤功能。安全组用于设置单台或多台云服务器的网络访问控制,它是重要的云端网络安全隔离手段,用于在云端划分安全域。

 

·安全组是一个逻辑上的分组,这个分组是由同一个地域(Region)内具有相同安全保护需求并相互信任的实例组成。

·每个实例至少属于一个安全组,在创建的时候就需要指定。

·同一安全组内的实例之间内网互通,不同安全组的实例之间默认内网不互通。

 

默认情况下当我们购买一个ECS/EC2实例时,都会加入到一个默认的安全组.因此如果不去指定,那恭喜你,所有服务器都可以互通了。这个当然不影响正常提供业务服务,但安全性将是最大的问题。

 

好,我们来看下安全组下规则的具体设定:




一个安全组规则会根据网络对四个方向的流量进行规定:

·内网入(进入实例的流量)

·内网出 (从实例流出的流量)

·公网入(进入实例的流量)

·公网出(从实例流出的流量)

 

 

除了这些还有下面几个属性(摘自阿里云文档)

 

·安全组规则:公网和内网,VPC专有网络的安全组规则只支持内网,不支持公网。

·授权策略:接受访问和拒绝访问

·支持的协议(例如 TCPUDPICMPGRE或者ALL)。

·端口范围:协议为TCPUDP时,端口取值范围为1~65535;例如“1/200”是端口号范围为1-200“-1/-1”表示所有端口 ;协议为ICMPGREALL时端口号范围值为-1/-1

·授权对象的选择

1授权对象类型为地址段访问,IP地址范围(采用CIDR格式),默认值为0.0.0.0/0(表示不受限制),其他支持的格式如10.159.6.18/1210.159.6.186。仅支持IPV4

2授权对象类型为安全组访问,如果该安全组的网络类型是经典网络,选择同一地域下的另一个经典网络类型的安全组;如果该安全组的网络类型为专有网络,选择同一经典网络下的另一个安全组。

 

 

·输入优先级,优先级范围:1-100,优先级数值越小,优先级越高。如果两个安全组的规则相同,只是访问策略不同,生效的是拒绝访问,接受访问不生效。

 

 

好,回过头来看下那张系统架构图,我们应该会需要四个安全组

 

·前端安全组           

公网入可以访问特定端口,内网出可以访问指定安全组(比如应用服务器安全组)的机器

 

·应用服务器安全组

拒绝所有公网入流量,内网入允许特定端口

 

·中间件安全组

拒绝所有公网入流量,内网入允许特定端口(与应用服务器端口不同)

 

 

·数据库安全组

拒绝所有公网入流量,内网入允许特定机器的特定端口

 

按照之前项目的习惯,我们一般还会有几个通用安全组

·运维安全组

拒绝所有公网入流量,默认打开SSH端口以及自动化部署框架及配置管理框架访问服务器及端口

 

 

·监控安全组

允许公网访问,默认允许所有服务器的特定端口的内网入流量

 

有了安全组的好处也是显而易见的,以后再增加某种类型的机器只要加入到对应安全组就可以,不需要再额外配置。同样,如果某种类型机器的访问规则变了,比如,所有redis的默认服务端口从3306改到3396(一般都会改掉防止redis crack攻击),这时只要统一改安全组规则就好。

 

最后一部分说几个常见场景和问题:

多帐号下的安全组设定

继续接上面的,一个组织有多个管理账户很正常,比如DBA管理所有的数据库。DevOps管理应用服务器和中间件。网络组负责反向代理,以及其他工具服务器等等。

 

这个时候问题就来了,不同账号下创建的服务器以及安全组在一个系统里是要互通的,可以做到吗?

可以,但是一定要记住是要在一个区域下!

 

前面说了,安全组毕竟只是个逻辑概念,只要在一个区域下,服务器就还是在一个内网范围内。我们假设有两个账户下有安全组Group_AGroup_B,每个安全组都已经把需要内网打通的机器都加进来,这个时候体力活就来了:

 

·在A账户下的Group_A需要创建多条规则,指定B账户里允许内网访问过来的机器的内部IP

·在B账户下的Group_B 需要创建多条规则,指定A账户里允许内网访问过来的机器的内部IP

 

 

如果互通的机器很多,可以支持地址段。

 

但要是两个账户属于不同的组织,或者有一个账号不属于你控制的,怎么办呢?  

 

发工单! 找万能的客服。记住哦,要两个账号同时发2个工单

需要内网打通的不同的帐号需要全部提交工单,说明哪些IP和哪些IP进行内网互通,或者帐号下所有服务器内网互通。并且在每一个工单中,都把已经提交的内网互通的工单号列出来(自身的工单号除外),以便阿里云售后工程师进行安全验证。

 

安全组规则优先级

我在的群脉SCRM项目,做的是定制的企业级客户管理系统,有上百台云服务器,因此很多安全规则也是可以共享的,打个比方,所有前端服务器都会开80端口,而为了做监控,所有服务器由都要开一个8089监听端口,所以一台ECS是允许被加入到多个安全组里的。这个时候就有了规则优先级的问题:

 

·安全组的优先级并非常规理解的只在安全组内具有可比性,因为不同安全组策略会最终合并应用到关联的实例上。所以,不同安全组下的规则如果冲突的时候,规则优先级更高的策略会生效;--这点很重要,设置的时候要注意

 

 

·如果不同安全组下存在规则优先级一样的互斥策略,越晚创建的安全组优先级越高;

·规则优先级可选范围为1-100,默认值为1,即最高优先级。数字越大,代表优先级越低;

·相同优先级的授权规则,授权策略为拒绝的规则优先;

 

 

安全组生效时间

这个问题是我实际遇见过一次,也被纠结了很久没搞定,结果在阿里云的文档里找到了答案。

有一次我增加了一条安全组规则,但是貌似没起作用还是可以访问通,搞了N多个小时没搞定。最后无奈发了工单。



回复原因是:

如果在安全策略变更前后,一直是有数据包在传输,且包间隔很短,那么安全组策略并不会应用新的规则。

安全组策略是有状态的。


暂停下服务解决问题.... 好吧,平台是人家的,说啥都是对的。


0 0