安全组是一种虚拟防火墙,具备状态检测和数据包过滤能力,用于在云端划分安全域。通过配置安全组规则,您可以控制安全组内一台或多台ECS实例的入流量和出流量。

安全组特点

安全组具有以下功能特点:
  • 一台ECS实例至少属于一个安全组,可以同时加入多个安全组。
  • 一个安全组可以管理同一个地域内的多台ECS实例,这些实例要求具有相同安全保护需求并相互信任。
  • 在没有设置允许访问的安全组规则的情况下,不同安全组内的ECS实例默认内网不通。
  • 同一安全组内的ECS实例之间可以实现内网互通。
  • (仅普通安全组)可以通过安全组规则授权两个安全组之间互访。
  • 安全组支持有状态应用。一个有状态的会话连接中,会话的最长保持时间是910秒。安全组会默认放行同一会话中的通信。例如,在会话期内,如果连接的数据包在入方向是允许的,则在出方向也是允许的。

安全组类型

安全组分为普通安全组和企业安全组。下表列举了两种类型安全组的差异。

安全组类型 安全组规则类型 安全组规则优先级 入方向访问策略 出方向访问策略 适用场景
普通安全组 默认安全组规则 默认值为1,可修改 默认放行80、443、22、3389及ICMP协议,可修改。 允许所有访问请求 对网络精细化控制要求较高、希望使用多种ECS实例规格、以及网络连接数适中的用户场景。
手动添加的安全组规则 在1~100之间取值,数值越低,优先级越高 支持允许和拒绝策略,可按需添加。 * 按需添加 *
企业安全组 默认安全组规则 固定为1,该值不支持修改 默认放行80、443、22、3389及ICMP协议,可修改。 拒绝所有访问请求 对运维效率、ECS实例规格以及计算节点的规模有更高需求的用户场景。
手动添加的安全组规则 支持允许策略,可按需添加。* 按需添加 *

* 手动添加安全组规则的步骤,请参见添加安全组规则

本文主要讲解普通安全组的相关概念。企业安全组详情,请参见企业安全组

默认安全组

通过ECS管理控制台创建实例时,若您未在该地域创建安全组,则阿里云会在创建实例的同时,创建一个默认安全组。默认安全组为普通安全组,网络类型和ECS实例一致。默认安全组
默认安全组的默认安全组规则如下:
  • 入方向:
    • 默认放行:ICMP协议、SSH 22端口、RDP 3389端口,授权对象为0.0.0.0/0。
    • 更多选择:HTTP 80端口和HTTPS 443端口,需自行勾选。
    • 规则优先级:110。
  • 出方向:允许所有访问。

使用限制

有关安全组的使用限制及配额,请参见使用限制安全组章节。

使用流程

安全组的使用流程如下图所示。

  • 管理ECS实例使用流程
  • 管理弹性网卡使用流程-弹性网卡

安全组规则

建立数据通信前,安全组逐条匹配安全组规则查询是否放行访问请求。一条安全组规则由下表中的属性确定。
网络类型 规则方向 授权策略 协议类型 端口范围 优先级 授权类型 授权对象
专有网络VPC 支持入方向和出方向 支持允许、拒绝 TCP、UDP、ICMP和GRE 应用或协议开启的端口 手动添加的规则支持1~100,默认规则为110 支持安全组访问、IP地址段访问 支持设置IP地址段和安全组ID
经典网络 支持公网出、入方向,内网出、入方向

不同通信场景需要设置的安全组规则属性不同。更多规则配置示例,请参见安全组应用案例

例如,您使用Xshell客户端远程连接Linux系统ECS实例时,当安全组检测到从公网或内网有SSH请求,会逐一检查入方向上安全组规则、发送请求的设备的IP地址是否已存在、优先级是为同类规则第一、授权策略是否为允许、22端口是否开启等。只有匹配到一条安全组规则允许放行该请求时,方才建立数据通信。下图为使用Xshell远程连接Linux系统ECS实例的规则匹配举例。安全组规则匹配示意图

规则优先级

同类型规则间依赖优先级决定最终执行的规则。尤其是当ECS实例加入了多个安全组时,多个安全组会从高到低依次匹配规则。优先级数值越小,代表优先级越高,取值范围:
  • 手动添加的安全组规则:1~100。
  • 系统添加的安全组规则:110。仅默认安全组及通过模板创建的安全组规则的优先级为110。
说明 企业安全组不支持规则优先级设置。
如果两条安全组规则的协议类型、端口范围、授权类型、授权对象都相同,最终生效的安全组规则如下:
  • 优先级相同:拒绝策略的规则优先生效,允许策略的规则不生效。
  • 优先级不同:优先级高的规则生效。

实践建议

使用安全组时:
  • 仅允许少量请求访问ECS实例时,可以将安全组作为白名单使用。即先设置安全组为拒绝全部访问,然后逐一添加允许通信的访问请求策略。
  • 不建议使用一个安全组管理所有应用,不同的分层一定有不同的隔离需求。
  • 不建议为每台ECS实例单独设置一个安全组,您只需将具有相同安全保护需求的ECS实例加入同一安全组即可。
添加安全组规则时:
  • 建议您设置简洁的安全组规则。例如,如果您给一台ECS实例分配了多个安全组,该ECS实例很可能会同时遵循数百条安全组规则,任何规则变更都可能引起网络不通的故障。
  • 如果您需要修改生产环境的安全组规则,建议您提前在克隆的安全组上进行调试,避免影响线上应用。详情请参见克隆安全组
  • 为应用添加安全组规则时遵循最小授权原则。例如,您可以:
    • 选择开放具体的端口,如80/80。不要设置为端口范围,如1/80。
    • 添加安全组规则时,谨慎授权0.0.0.0/0(全网段)访问源。