安全组
安全组是一个逻辑上的分组,为具有相同安全保护需求并相互信任的云主机、云容器、云数据库等实例提供访问策略。安全组创建后,用户可以在安全组中定义各种访问规则,当实例加入该安全组后,即受到这些访问规则的保护。
您在创建实例时(比如云主机),必须将实例加入一个安全组,如果此前您还未创建任何安全组,那么系统会自动为您创建默认安全组并关联至该实例。除了默认安全组,您还可以根据业务需求创建自定义安全组并关联至实例。一个实例可以关联多个安全组,多个安全组按照优先级顺序依次匹配流量。
安全组中包括入方向规则和出方向规则,您可以针对每条入方向规则指定来源、端口和协议,针对出方向规则指定目的地、端口和协议,用来控制安全组内实例入方向和出方向的网络流量。
以下图为例,在区域A内,某客户有一个虚拟私有云VPC-A和子网Subnet-A,在子网Subnet-A中创建一个云主机ECS-A,并为ECS-A关联一个安全组Sg-A来保护ECS-A的网络安全。
- 安全组Sg-A的入方向存在一条放通ICMP端口的自定义规则,因此可以通过个人PC (计算机)ping通ECS-A。但是安全组内未包含允许SSH流量进入实例的规则,因此您无法通过个人PC远程登录ECS-A。
- 当ECS-A需要通过EIP访问公网时,由于安全组Sg-A的出方向规则允许所有流量从实例流出,因此ECS-A可以访问公网。
说明您可以免费使用安全组资源,当前不收取任何费用。
安全组规则
安全组中包括入方向规则和出方向规则,用来控制安全组内实例的入方向和出方向的网络流量。
- 入方向规则:控制外部请求访问安全组内的实例,即流量流入实例。
- 出方向规则:控制安全组内实例访问外部的请求,即流量从实例流出。
安全组规则由协议端口、源地址/目的地址等组成,关键信息说明如下:
- 策略:支持允许或拒绝。当流量的协议、端口、源地址/目的地址成功匹配某个安全组规则后,会对流量执行规则对应的策略,允许或拒绝流量。
- 优先级:优先级可选范围为1-100,数字越小,规则优先级级别越高。安全组规则匹配流量时,首先按照优先级进行排序,其次按照策略排序,拒绝策略高于允许策略。
- 类型:支持设置IPv4和IPv6协议的规则。
- 协议端口:包括网络协议类型和端口范围。网络协议:匹配流量的协议类型,支持TCP、UDP、ICMP和GRE协议。端口范围:匹配流量的目的端口,取值范围为:1~65535。
- 源地址或目的地址:在入方向中,匹配流量的源地址。在出方向中,匹配流量的目的地址。您可以使用IP地址、安全组、IP地址组作为源地址或者目的地址。
安全组及规则的工作原理
安全组是有状态的。如果您从实例发送一个出站请求,且该安全组的出方向规则是放通的话,那么无论其入方向规则如何,都将允许该出站请求的响应流量流入。同理,如果该安全组的入方向规则是放通的,那无论出方向规则如何,都将允许入站请求的响应流量可以流出。
安全组使用连接跟踪来标识进出实例的流量信息,入方向安全组的规则变更,对原有流量立即生效。出方向安全组规则的变更,不影响已建立的长连接,只对新建立的连接生效。
当您在安全组内增加、删除、更新规则,或者在安全组内添加、移出实例时,系统会自动清除该安全组内所有实例入方向的连接,详细说明如下:
- 由入方向流量建立的连接,已建立的长连接将会断开。所有入方向流量立即重新建立连接,并匹配新的安全组入方向规则。
- 由出方向流量建立的连接,已建立的长连接不会断开,依旧遵循原有安全组规则。出方向流量新建立的连接,将会匹配新的安全组出方向规则。
注意对于已建立的长连接,流量断开后,不会立即建立新的连接,需要超过连接跟踪的老化时间后,才会新建立连接并匹配新的规则。比如,对于已建立的ICMP协议长连接,当流量中断后,需要超过老化时间30s后,将会新建立连接并匹配新的规则,详细说明如下:
不同协议的连接跟踪老化时间不同,比如已建立连接状态的TCP协议连接老化时间是600s,ICMP协议老化时间是30s。对于除TCP和ICMP的其他协议,如果两个方向都收到了报文,连接老化时间是180s,如果只是单方向收到了报文,另一个方向没有收到报文,则连接老化时间是30s。
TCP协议处于不同状态下的连接老化时间也不相同,比如TCP连接处于ESTABLISHED(连接已建立)状态时,老化时间是600s,处于FIN-WAIT(连接即将关闭)状态时,老化时间是30s。
安全组规则遵循白名单原理,当在规则中没有明确定义允许或拒绝某条流量时,安全组一律拒绝该流量流入或者流出实例。
在入方向中,当请求匹配上安全组中入方向规则的源地址,并且策略为“允许”时,允许该请求进入,其他请求一律拦截。因此,默认情况下您一般不用在入方向配置策略为“拒绝”的规则。下表中的入方向规则,确保安全组内实例内网网络互通,不建议您删除或者修改该安全组规则。
在出方向中,下表中的出方向规则允许所有流量从安全组内实例流出,即实例可访问外部任意IP和端口。如果您删除了该规则,则安全组内的实例无法访问外部,请您谨慎操作。
方向 | 策略 | 类型 | 协议端口 | 源地址/目的地址 |
---|---|---|---|---|
入方向 | 允许 | IPv4 | 全部 | 源地址:当前安全组 |
入方向 | 允许 | IPv6 | 全部 | 源地址:当前安全组 |
出方向 | 允许 | IPv4 | 全部 | 目的地址:0.0.0.0/0 |
出方向 | 允许 | IPv6 | 全部 | 目的地址:::/0 |
流量匹配安全组规则的顺序
一个实例可以关联多个安全组,并且一个安全组内可以包含多个安全组规则。安全组规则匹配流量时,首先按照优先级进行排序,其次按照策略匹配,拒绝策略高于允许策略。
如下图所示,以入方向的流量为例,实例的网络流量将按照以下原则匹配安全组规则,入方向和出方向的流量匹配顺序相同。
首先,流量按照安全组的顺序进行匹配。您可以自行调整安全组顺序,安全组序号越小,表示优先级越高。比如,安全组A的序号为1,安全组B的序号为2,安全组A的优先级高于安全组B,流量优先匹配安全组A内的入方向规则。
其次,流量按照安全组规则的优先级和策略进行匹配。
- 先按照安全组规则优先级匹配,优先级的数字越小,优先级越高。比如安全组规则A的优先级为1,安全组规则B的优先级为2,安全组规则A的优先级高于安全组规则B,流量优先匹配安全组规则A。
- 安全组规则优先级相同的情况下,再按照策略匹配,拒绝策略高于允许策略。
流量按照协议端口和源地址,遍历了所有安全组内的入方向规则。
如果成功匹配某个规则,则执行以下操作:
- 如果规则的策略是允许,则允许该流量访问安全组内实例。
- 如果规则的策略是拒绝,则拒绝该流量访问安全组内实例。
如果未匹配上任何规则,则拒绝该流量访问安全组内的实例。