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

安全组和安全组规则

安全组是一个逻辑上的分组,由同一地域内具有相同安全保护需求的实例组成。安全组具有以下通用特性:
  • 实例至少加入一个安全组,可以同时加入多个安全组。
    说明 实例上挂载的弹性网卡中,辅助网卡可以加入和实例不同的安全组。
  • 在安全组未添加安全组规则时,不同安全组内的实例之间内网隔离。
  • 在安全组未添加安全组规则时,拒绝所有入方向的访问请求。
  • 安全组为有状态应用。一个有状态的会话连接中,会话的最长保持时长是910秒。安全组会默认放行同一会话中的通信。例如,在会话期内,如果连接的数据包在入方向是允许的,则在出方向也是允许的。
安全组分为普通安全组和企业安全组。企业安全组面向企业级场景,可以容纳更多的实例、弹性网卡和私网IP,而且访问策略更加严格。在安全组通用特性基础上,企业安全组还具有以下特性:
  • 仅支持专有网络。
  • 在企业安全组未添加安全组规则时,拒绝所有出方向的访问请求。
  • 在企业安全组未添加安全组规则时,同一企业安全组内的实例之间内网隔离。
说明 不支持同时加入普通安全组和企业安全组。更多安全组相关的使用限制及配额说明,请参见安全组使用限制
在安全组未添加安全组规则时,允许和拒绝访问请求的示意图如下。
  • 普通安全组normal-sg-default
  • 企业安全组enterprise-sg-default
在安全组特性的基础上,您可以通过配置安全组规则自定义允许和拒绝访问请求的规则,新增和修改的安全组规则自动应用于安全组内所有实例。安全组规则支持针对IP地址、CIDR地址块、其他安全组、前缀列表授权。
说明 仅普通安全组支持针对其他安全组授权。

如果一台实例加入了多个安全组,则所有安全组的安全组规则均应用于该实例。在检测到访问请求时,系统会逐一检查适用于实例的安全组规则,根据安全组规则的协议、端口、优先级等属性进行判断,匹配到允许访问的安全组规则时才会建立会话。更多安全组规则的属性说明和示例,请参见安全组规则概述

在控制台创建安全组时,系统会自动添加常用的安全组规则,您可以按需修改或删除这些安全组规则。自动添加的安全组规则包括:
  • 普通安全组:5条入方向安全组规则,即针对TCP协议允许所有IP访问HTTP(80)、HTTPS(443)、SSH(22)、RDP(3389)端口,并针对ICMP(IPv4)协议允许所有IP访问所有端口。
    如果在控制台创建安全组时保留了上述安全组规则,允许和拒绝访问请求的示意图如下。normal-sg-rule
  • 企业安全组:
    • 5条入方向安全组规则,即针对TCP协议允许所有IP访问HTTP(80)、HTTPS(443)、SSH(22)、RDP(3389)端口,并针对ICMP(IPv4)协议允许所有IP访问所有端口。
    • 1条出方向安全组规则,即针对所有协议允许所有IP访问所有端口,避免引起网络连通性问题。
    如果在控制台创建安全组时保留了上述安全组规则,允许和拒绝访问请求的示意图如下。enterprise-sg-rule
说明 调用API创建安全组时,系统不会自动添加安全组规则。

安全组使用指导

使用安全组控制实例流量的典型使用流程如下:
  1. 创建安全组。
  2. 添加安全组规则。
  3. 将实例加入安全组。
  4. 按需管理已有安全组和安全组规则。
使用安全组控制辅助网卡流量的典型使用流程如下:
  1. 创建安全组。
  2. 添加安全组规则。
  3. 将辅助网卡加入安全组。
  4. 将辅助网卡绑定至实例。
  5. 按需管理已有安全组和安全组规则。

关于安全组的具体操作和应用案例,请参见操作导航安全组应用案例

默认安全组

实例至少需要加入一个安全组。通过ECS管理控制台创建实例时,如果您还未在所选地域创建安全组,可以使用默认安全组。系统会在创建实例的同时创建一个安全组,网络类型和实例一致。默认安全组的安全组类型为普通安全组,安全组规则配置如下图所示。默认安全组
默认安全组规则的效果如下:
  • 规则优先级:100。
    说明 2020年05月27日以前系统创建的默认安全组规则的优先级为110。
  • 针对TCP协议允许所有IP访问SSH(22)、RDP(3389)端口。
  • 针对ICMP(IPv4)协议允许所有IP访问所有端口。
  • 如果选中了HTTP 80端口HTTPS 443端口,还会针对TCP协议允许所有IP访问HTTP(80)、HTTPS(443)端口。

安全组托管模式

部分其他云产品(例如云防火墙、NAT网关等)也会使用安全组的能力。为了保障云产品的服务可用,并防止您误操作资源,这些云产品会自动创建托管模式的安全组。该类安全组由对应的云产品管理,您只有查看权限,没有操作权限。更多信息,请参见托管安全组

实践建议

  • 将安全组作为白名单使用,即默认拒绝所有访问,通过添加安全组规则设置允许访问的端口范围和授权对象。
  • 添加安全组规则时遵循最小授权原则。例如,开放Linux实例的22端口用于远程登录时,建议仅允许特定的IP访问,而非所有IP(0.0.0.0/0)。
  • 单个安全组内尽量保持规则简洁。单台实例可以加入多个安全组,单个安全组可以添加多条安全组规则,如果应用在单台实例上的安全组规则过多,会增加管理复杂度并引入风险。
  • 不同类型应用的实例加入不同的安全组,分别维护安全组规则。例如,需要接受公网访问的实例加入同一个安全组,默认拒绝所有访问,然后设置仅暴露对外提供服务的端口(例如80、443等)。同时避免在接受公网访问的实例上提供其他服务,例如MySQL、Redis等,建议将内部服务部署在不接受公网访问的实例上,并加入单独的安全组。
  • 避免直接修改线上环境使用的安全组。修改安全组设置后会自动应用于组内所有实例,您可以先克隆一个安全组并在测试环境调试,确保修改后实例间通信正常。
  • 合理定义安全组名称、标签等,方便快速识别安全组的用途,在管理较多安全组时更加清晰。

合理使用安全组可以有效提高实例的安全性,但提高实例安全性是一项系统的工作,您还可以结合更多其他做法。更多信息,请参见安全最佳实践