文档首页/ 虚拟私有云 VPC/ 用户指南/ 访问控制/ 安全组/ 安全组和安全组规则概述
更新时间:2025-09-24 GMT+08:00
分享

安全组和安全组规则概述

安全组

安全组是一个逻辑上的分组,为具有相同安全保护需求并相互信任的云服务器、云容器、云数据库等实例提供访问策略。安全组创建后,用户可以在安全组中定义各种访问规则,当实例加入该安全组后,即受到这些访问规则的保护。

您在创建实例时(比如云服务器),必须将实例加入一个安全组,如果此前您还未创建任何安全组,那么系统会自动为您创建默认安全组并关联至该实例。除了默认安全组,您还可以根据业务需求创建自定义安全组并关联至实例。一个实例可以关联多个安全组,多个安全组按照优先级顺序依次匹配流量。

安全组中包括入方向规则和出方向规则,您可以针对每条入方向规则指定来源、端口和协议,针对出方向规则指定目的地、端口和协议,用来控制安全组内实例入方向和出方向的网络流量。以图1为例,在区域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 安全组架构图

您可以免费使用安全组资源,当前不收取任何费用。

特性讲解视频

本视频为您介绍VPC安全组和安全组规则,包括安全组的作用、安全组规则的组成、默认安全组的说明以及流量匹配安全组规则的顺序等信息。

安全组规则

  • 安全组中包括入方向规则和出方向规则,用来控制安全组内实例的入方向和出方向的网络流量。
    • 入方向规则:控制外部请求访问安全组内的实例,即流量流入实例。
    • 出方向规则:控制安全组内实例访问外部的请求,即流量从实例流出。
  • 安全组规则由协议端口、源地址/目的地址等组成,关键信息说明如下:
    • 策略:支持允许或拒绝。当流量的协议、端口、源地址/目的地址成功匹配某个安全组规则后,会对流量执行规则对应的策略,允许或拒绝流量。
    • 优先级:优先级可选范围为1-100,数字越小,规则优先级级别越高。安全组规则匹配流量时,首先按照优先级进行排序,其次按照策略排序,拒绝策略高于允许策略,更多信息请参见流量匹配安全组规则的顺序
    • 类型:支持设置IPv4和IPv6协议的规则。
    • 协议端口:包括网络协议类型和端口范围。
      • 网络协议:匹配流量的协议类型,支持TCP、UDP、ICMP和GRE协议。
        • TCP协议:擅长可靠传输,适用于远程登录、网页浏览、邮件传输和文件传输等对数据完整性要求高的场景。
        • UDP协议:传输速度快,适用于在线游戏、视频会议等对速度要求高的应用,减少数据传输的延迟,确保体验的流畅性。
        • ICMP协议:用于网络设备间通信,传递控制信息,如使用ping命令检测网络设备之间的连通性、生成错误报告供运维使用、传递诊断信息用于分析优化网络等。
        • GRE协议:通用性强,用于封装和传输不同网络协议数据,实现跨网络传输,如封装IP数据包。
      • 端口范围:匹配流量的目的端口,取值范围为:1~65535。
    • 源地址目的地址:在入方向中,匹配流量的源地址。在出方向中,匹配流量的目的地址。
      您可以使用IP地址、安全组、IP地址组作为源地址或者目的地址。
      • IP地址:某个固定的IP地址或者网段,支持IPv4和IPv6地址。比如:192.168.10.10/32(IPv4地址)、192.168.1.0/24(IPv4网段)、2407:c080:802:469::/64(IPv6网段)
      • 安全组:目标安全组和当前安全组位于同一区域,表示流量匹配目标安全组内所有实例的私有IP地址。比如:当安全组A内有实例a,安全组B内有实例b,在安全组A的入方向规则中,放通源地址为安全组B的流量,则来自实例b的内网访问请求被允许进入实例a。
      • IP地址组:IP地址组是一个或者多个IP地址的集合,对于安全策略相同的IP网段和IP地址,此处建议您使用IP地址组简化管理。

安全组及规则的工作原理

  • 安全组是有状态的。如果您从实例发送一个出站请求,且该安全组的出方向规则是放通的话,那么无论其入方向规则如何,都将允许该出站请求的响应流量流入。同理,如果该安全组的入方向规则是放通的,那无论出方向规则如何,都将允许入站请求的响应流量可以流出。
  • 安全组使用连接跟踪来标识进出实例的流量信息,入方向安全组的规则变更,对原有流量立即生效。出方向安全组规则的变更,不影响已建立的长连接,只对新建立的连接生效。
    当您在安全组内增加、删除、更新规则,或者在安全组内添加、移出实例时,详细说明如下:
    • 由入方向流量建立的连接,系统会根据表1中的场景,自动清理已有长连接对应的连接跟踪,即让连接跟踪提前老化,然后重新建立连接并匹配新的安全组入方向规则。
      • 若安全组规则允许该连接对应的流量通过,则连接能够成功建立,网络通信不会受影响。
      • 若安全组规则拒绝该连接对应的流量通过,则连接无法再次建立,网络通信将中断。
      表1 连接跟踪的清理场景及清理策略说明

      操作场景

      连接跟踪的清理策略

      在安全组A内添加实例

      • 对于安全组A内新添加的实例,清理该实例入方向的连接跟踪
      • 当其他安全组(例如安全组B)的入方向中存在拒绝安全组A访问的规则,则清理安全组B内所有实例的入方向连接跟踪

      在安全组A内移除实例

      • 清理安全组A内所有实例的入方向连接跟踪
      • 当其他安全组(例如安全组B)的入方向中存在允许安全组A访问的规则,则清理安全组B内所有实例的入方向连接跟踪

      在安全组A内添加规则

      当在入方向或者出方向添加拒绝访问的规则,则清理安全组A内所有实例的入方向连接跟踪

      在安全组A内删除规则

      当在入方向中删除允许访问的规则,则清理安全组A内所有实例的入方向连接跟踪

      在安全组A内修改规则

      当在入方向中修改规则的优先级、策略、协议端口或者源地址时,则清理安全组A内所有实例的入方向连接跟踪

      在安全组A内启用规则

      当在入方向或者出方向启用拒绝访问的规则,则清理安全组A内所有实例的入方向连接跟踪

      在安全组A内停用规则

      当在入方向中停用允许访问的规则,则清理安全组A内所有实例的入方向连接跟踪

      修改IP地址组内的IP地址条目

      当安全组A内的入方向规则中,存在关联IP地址组的规则,则添加或者删除该IP地址组条目时,会清理安全组A内所有实例的入方向连接跟踪

    • 由出方向流量建立的连接,已建立的长连接不会断开,依旧遵循原有安全组规则。出方向流量新建立的连接,将会匹配新的安全组出方向规则。

对于已建立的长连接,流量断开后,不会立即建立新的连接,需要超过连接跟踪的老化时间后,才会新建立连接并匹配新的规则。比如,对于已建立的ICMP协议长连接,当流量中断后,需要超过老化时间30s后,将会新建立连接并匹配新的规则,详细说明如下:

  • 不同协议的连接跟踪老化时间不同,比如已建立连接状态的TCP协议连接老化时间是600s,ICMP协议老化时间是30s。对于除TCP和ICMP的其他协议,如果两个方向都收到了报文,连接老化时间是180s,如果只是单方向收到了报文,另一个方向没有收到报文,则连接老化时间是30s。
  • TCP协议处于不同状态下的连接老化时间也不相同,比如TCP连接处于ESTABLISHED(连接已建立)状态时,老化时间是600s,处于FIN-WAIT(连接即将关闭)状态时,老化时间是30s。
  • 安全组规则遵循白名单原理,当在规则中没有明确定义允许或拒绝某条流量时,安全组一律拒绝该流量流入或者流出实例。
    • 在入方向中,当请求匹配上安全组中入方向规则的源地址,并且策略为“允许”时,允许该请求进入,其他请求一律拦截。因此,默认情况下您一般不用在入方向配置策略为“拒绝”的规则。

      表2中的入方向规则,确保安全组内实例内网网络互通,不建议您删除或者修改该安全组规则。

    • 在出方向中,表2中的出方向规则允许所有流量从安全组内实例流出,即实例可访问外部任意IP和端口。如果您删除了该规则,则安全组内的实例无法访问外部,请您谨慎操作。
      表2 安全组规则说明

      方向

      策略

      类型

      协议端口

      源地址/目的地址

      入方向

      允许

      IPv4

      全部

      源地址:当前安全组

      入方向

      允许

      IPv6

      全部

      源地址:当前安全组

      出方向

      允许

      IPv4

      全部

      目的地址:0.0.0.0/0

      出方向

      允许

      IPv6

      全部

      目的地址:::/0

流量匹配安全组规则的顺序

一个实例可以关联多个安全组,并且一个安全组内可以包含多个安全组规则。安全组规则匹配流量时,首先按照优先级进行排序,其次按照策略匹配,拒绝策略高于允许策略。如图2所示,以入方向的流量为例,实例的网络流量将按照以下原则匹配安全组规则,入方向和出方向的流量匹配顺序相同。
  1. 首先,流量按照安全组的顺序进行匹配。您可以自行调整安全组顺序,安全组序号越小,表示优先级越高。

    比如,安全组A的序号为1,安全组B的序号为2,安全组A的优先级高于安全组B,流量优先匹配安全组A内的入方向规则。

  2. 其次,流量按照安全组规则的优先级和策略进行匹配。
    1. 先按照安全组规则优先级匹配,优先级的数字越小,优先级越高。

      比如安全组规则A的优先级为1,安全组规则B的优先级为2,安全组规则A的优先级高于安全组规则B,流量优先匹配安全组规则A。

    2. 安全组规则优先级相同的情况下,再按照策略匹配,拒绝策略高于允许策略。
  3. 流量按照协议端口和源地址,遍历了所有安全组内的入方向规则。
    • 如果成功匹配某个规则,则执行以下操作:
      • 如果规则的策略是允许,则允许该流量访问安全组内实例。
      • 如果规则的策略是拒绝,则拒绝该流量访问安全组内实例。
    • 如果未匹配上任何规则,则拒绝该流量访问安全组内的实例。
图2 安全组匹配顺序

安全组配置示例

您可以在安全组内放通指定IP地址,允许指定IP地址访问安全组内实例,或者在某个安全组内放通另外一个安全组,实现不同安全组内的实例内网互通。通过安全组规则,您可以灵活控制组网内流量的走向,以确保您的网络安全,以下为您提供了典型的安全组应用示例。

图3所示,在VPC-X中有两个子网Subnet-A和Subnet-B,Subnet-A中的ECS承载同一类业务,需要相同的网络连接请求,因此均关联至安全组Sg-A。同理,Subnet-B中的ECS均关联至另外一个安全组Sg-B。
  • 安全组Sg-A入方向规则A01允许从指定IP地址 (172.16.0.0/24)访问安全组内实例的SSH(22)端口,用于远程登录安全组内的Linux云服务器。
  • 安全组Sg-A入方向规则A02允许安全组内的实例可使用任何协议和端口互相通信,即子网Subnet-A内的ECS网络互通。
  • 安全组Sg-B入方向规则B01允许Sg-A内的实例访问Sg-B内实例的SSH(22)端口,即通过子网Subnet-A的ECS可远程登录Subnet-B内的ECS。
  • 安全组Sg-B入方向规则B02允许安全组内的实例可使用任何协议和端口互相通信,即子网Subnet-B内的ECS网络互通。
  • 两个安全组的出方向规则允许所有流量从安全组内实例流出。
图3 控制外部指定IP地址或安全组对实例的访问

更多安全组规则配置示例,请参见安全组配置示例

如果您通过中间网络实例在不同子网的实例之间转发流量,比如图4中,子网Subnet-A的ECS通过虚拟IP和子网Subnet-B的ECS互相通信。由于存在中间网络实例,此时安全组规则的源地址选择实例所在的安全组时,无法放通中间网络实例转发的流量,源地址必须设置成中间网络实例的私有IP地址或者子网网段。

在VPC-X中有两个子网Subnet-A和Subnet-B,Subnet-A中的ECS关联至安全组Sg-A,Subnet-B中的ECS关联至安全组Sg-B。通过虚拟IP将Subnet-A中的ECS搭建成Keepalived高可用集群,后端服务器ECS-A01和ECS-A02形成主备模式,对外使用虚拟IP进行通信。
  • 安全组Sg-A入方向规则A01允许Sg-B内的实例使用任何协议和端口访问Sg-A内的实例。
  • 安全组Sg-B入方向规则说明如下:
    • 规则B02:允许Sg-A内的实例使用私有IP地址访问Sg-B内实例,但是当前组网下,Sg-A内的实例和Sg-B内的实例通信需要经过虚拟IP,此时虚拟IP的流量无法流入Sg-B内的实例,该规则不适用于当前组网。
    • 规则B01:允许虚拟IP(192.168.0.21)使用任何协议和端口访问Sg-B内的实例。当前组网中,您还可以将源地址设置成子网Subnet-A的网段192.168.0.0/24。
图4 控制虚拟IP访问安全组内实例

更多安全组规则配置示例,请参见安全组配置示例

图5所示,在区域A内,通过VPC对等连接连通VPC-A和VPC-B之间的网络。对等连接路由配置完成后,子网Subnet-A01和子网Subnet-B01之间网络已连通。但是由于两个子网内的ECS分别关联了不同的安全组,此时ECS之间仍然网络不通,您还需要放通安全组Sg-A和Sg-B的网络,才可以实现对等连接两端的ECS网络互通。
  • 在安全组Sg-A中,规则A01允许来自Sg-B内实例的流量访问Sg-A内的实例,源地址为安全组Sg-B。
  • 在安全组Sg-B中,规则B01允许来自Sg-A内实例的流量访问Sg-B内的实例,源地址为安全组Sg-A。
图5 控制对等连接两端VPC内的实例互访

更多安全组规则配置示例,请参见安全组配置示例

安全组配置流程

图6 安全组配置流程
表3 安全组配置流程说明

序号

步骤

说明

操作指导

1

创建安全组

创建安全组时候,您可以使用系统提供的规则。预置的部分安全组规则,详细信息请参见安全组模板说明

创建安全组

2

配置安全组规则

安全组创建完成后,如果模板里面的规则不能满足业务要求,您还可以在安全组中添加新的安全组规则,或者修改已有的安全组规则。

添加安全组规则

3

在安全组中添加实例

创建实例的时候,会自动将实例加入一个安全组内,实例将会受到安全组的保护。

如果一个安全组无法满足您的要求,您可以将实例加入多个安全组。

在安全组中添加或移出实例

安全组的使用限制

  • 为了确保良好的网络性能体验,建议一个实例最多关联5个安全组。
  • 建议一个安全组关联的实例数量不应超过6000个,否则会引起安全组性能下降。
  • 在一个安全组中,对于入方向规则来说,源地址是安全组的规则数量+源地址是IP地址组的规则数量+端口是不连续端口号的规则数量 ≤ 120条,否则超过数量的安全组规则将不生效。当同时存在IPv4和IPv6类型的安全组规则时,两种类型的安全组规则单独计算,即IPv4规则和IPv6规则可以各有120条。

    对于安全组出方向规则来说,目的地址和端口存在一样的限制。

    以安全组Sg-A的入方向IPv4规则为例,表4中提供了部分符合限制条件的规则供您参考。其中,当一条安全组规则同时符合多个限制时,比如规则A02即使用了不连续端口,又使用了安全组作为源地址,此时只占用一条配额。

    表4 入方向安全组规则示例

    规则编号

    策略

    类型

    协议端口

    源地址

    规则A01

    允许

    IPv4

    全部

    当前安全组:Sg-A

    规则A02

    允许

    IPv4

    TCP: 22,25,27

    其他安全组:Sg-B

    规则A03

    允许

    IPv4

    TCP: 80-82

    IP地址组:ipGroup-A

    规则A04

    允许

    IPv4

    TCP: 22-24,25

    IP地址: 192.168.0.0/16

  • 如果您添加安全组规则时,使用IP地址组或者不连续端口,那么该安全组规则对不同规格云服务器的生效情况存在差异,为了避免您的安全组规则不生效,请您查看表5了解详情。
    表5 安全组规则限制

    安全组规则

    云服务器类型

    添加安全组规则时,“源地址”和“目的地址”可选择“IP地址组”

    不支持的X86云服务器规格如下:
    • 通用计算型(S1型、C1型、C2型 )
    • 内存优化型(M1型)
    • 高性能计算型(H1型)
    • 磁盘增强型( D1型)
    • GPU加速型(G1型、G2型)
    • 超大内存型(E1型、E2型、ET2型)

    添加安全组规则时,“协议端口”可配置为不连续端口号

    不支持的X86云服务器规格如下:

    • 通用计算型(S1型、C1型、C2型 )
    • 内存优化型(M1型)
    • 高性能计算型(H1型)
    • 磁盘增强型( D1型)
    • GPU加速型(G1型、G2型)
    • 超大内存型(E1型、E2型、ET2型)

    不支持的鲲鹏云服务器规格:只有Kai1

    如果您在Kai1鲲鹏云服务器中添加安全组规则时,使用了不连续端口号,那么除了该条规则不会生效,该规则后的其他规则也不会生效。比如:

    您先配置了安全组规则A(不连续端口号22,24),再配置了下一条安全组规则B(独立端口号9096),则安全组规则A和B均不会生效。

  • 当您的组网中存在以下情况时,来自ELB和VPCEP的流量不受网络ACL和安全组规则的限制。
    • ELB实例的监听器开启“获取客户端IP”功能时,不受限制。

      比如规则已明确拒绝来自ELB实例的流量进入后端云服务器,此时该规则无法拦截来自ELB的流量,流量依然会抵达后端云服务器。

    • VPCEP实例类型为“专业型”时,不受限制。

安全组应用指导

在云上业务部署过程中,合理配置安全组规则是保障业务安全的关键环节。以下提供体系化的安全组应用指导,帮助您构建安全可靠的网络防护体系。

  1. 分析业务需求,规划安全组

    建议您先对业务架构进行全面分析,明确对外公开服务与内部使用的服务,再依据不同安全需求制定差异化安全组策略。

    • 使用不同安全组隔离公网与内网云服务器

      建议将公网服务与内网服务的云服务器,划分至不同安全组以实现网络隔离防护。安全组规则配置需始终遵循 “最小开放” 原则,即默认关闭所有端口与协议,仅按需开放业务所需服务端口。

      当您有面向公网的网站访问业务,建议将运行公网业务的Web服务器归入同一安全组,仅需放通80、443等对外服务的特定端口,默认拒绝外部其他访问请求。同时,请勿在公网Web服务器上运行内部业务,尤其MySQL、Redis等数据库服务,建议将其部署在无公网访问权限的云服务器上,并将这些云服务器关联至其他安全组,通过安全组规则授权其他安全组访问数据库,避免了公网暴露的风险。

    • 不同操作系统/不同应用的云服务器,建议使用不同安全组

      依操作系统和应用差异,将云服务器划分至不同安全组,是实现精细化访问控制的基础。以常见系统为例,Linux云服务器通常需开放SSH (22)端口用于远程管理,Windows云服务器则需开放远程桌面RDP (3389)端口。需要特别注意的是,当云服务器的系统镜像相同,但是提供的应用服务不同时,那么这些云服务器也应该归属不同的安全组,这样可以实现更好的安全隔离和管理灵活性。

    • 应用于不同环境的云服务器,需划分至不同安全组

      为保障系统稳定性和安全性,生产环境与测试环境的云服务器必须采用完全独立的安全组配置。通过安全组的访问控制功能,可限制不同环境间的网络连通性,避免测试环境的变更意外影响到生产环境。同时,对于不同测试环境(如开发测试、集成测试等)内的云服务器,也建议分配不同的安全组,防止多套测试环境之间相互干扰,提升开发和测试效率。

    • 公网访问管控,无需公网访问的云服务器不分配EIP

      华为云提供了多种安全可靠的公网访问解决方案,首先应当遵循"非必要不分配"的原则,尽量避免直接为云服务器分配EIP

      • 当您只需要登录ECS,在不采用EIP的情况下,建议优先使用云堡垒机、CloudShell和VNC等安全通道实现。
      • 当业务需面向公网提供访问服务,且您拥有多台云服务器时,建议通过ELB服务实现公网流量负载均衡,可以避免单点故障、提升服务可用性,又能减少安全暴露风险。
      • 对于云服务器需要主动访问公网的场景,优先推荐使用 NAT 网关服务,可为VPC内无EIP的云服务器提供公网访问能力,仅需配置SNAT规则,即可实现多台云服务器共享一个EIP访问公网。
  2. 配置安全组规则
    • 默认安全组策略

      若您未创建过任何安全组,首次使用安全组时,系统会自动为您创建一个默认安全组,以方便后续使用。默认安全组仅确保安全组内实例互通,默认拒绝所有外部请求进入实例,详情请参见默认安全组概述

    • 不同安全组默认内网隔离

      同一账号下的云服务器如果属于不同的安全组,其内网访问默认是相互隔离的,无法直接访问。

    • 安全组规则采用白名单原则

      安全组规则采用严格的白名单原则,这是构建安全防护体系的重要基础。请您遵循白名单原则配置安全组规则,即安全组内实例默认拒绝所有外部的访问请求,通过添加允许规则放通指定的网络流量。在开放端口时,应当严格控制开放范围,只开放业务必需的最小端口集合。

    • 遵循最小授权原则配置安全组规则

      添加安全组规则时,请遵循最小授权原则。例如,放通SSH (22)或者RDP (3389)端口用于远程登录云服务器时,建议仅允许指定的IP地址登录,谨慎使用0.0.0.0/0(所有IP地址)。

    • 通过IP地址组简化安全组规则管理

      对于安全策略相同的多个IP地址,您可以将其添加到一个IP地址组内统一管理,并在安全组内添加该IP地址组的授权规则。后续IP地址变化时,您只需要在IP地址组内修改IP地址,则IP地址组对应的安全组规则将会随之变更,无需逐次修改安全组内的规则,提升效率。详情请参见使用IP地址组提升安全组规则管理效率

    • 典型服务端口参考

      各类应用服务通常都使用标准的通信端口,您需要根据实际业务需求,在安全组中放通对应的端口,查看ECS常用端口

  3. 持续维护安全组及规则

    随着业务的不断发展与变化,原本配置的安全组及安全组规则可能不再适配新业务场景。为此,建议定期审视当前架构设计,并结合最新的安全需求进行针对性调整。修改安全组时,为避免因误操作影响线上业务连续性,请您尽量不要直接修改使用中的安全组规则。建议先克隆测试安全组,在测试安全组上完成调试并确认实例网络正常后,再修改使用中的安全组规则,减少对业务的影响。具体方法,请参见克隆安全组

相关文档