两者的层级不同
安全组作用在实例网卡上,是有状态的:一条入方向规则放行后,这条连接的回包自动通过。网络 ACL 作用在子网边界上,是无状态的:返回流量必须显式写规则放行。安全组适合精细化的实例访问控制,网络 ACL 适合整段子网的粗粒度隔离;两者同时存在时取交集,流量必须两层都能通过。
基本信息
| 作用对象 | 安全组作用于实例与网卡;网络 ACL 作用于子网边界 |
|---|---|
| 状态性 | 安全组有状态,回包自动放行;ACL 无状态,回包要显式放行 |
| 规则语义 | 安全组支持允许与拒绝并带优先级;ACL 按编号顺序匹配,命中即停 |
| 绑定关系 | 一个安全组可复用于多台实例;一个子网只能关联一个 ACL |
| 默认行为 | 安全组默认拒绝未放行方向;ACL 末尾通常有拒绝兜底规则 |
| 排查顺序 | 先看安全组再看 ACL,两层都要确认,否则结论容易反复 |
安全组与网络 ACL 对比
| 维度 | 安全组 | 网络 ACL |
|---|---|---|
| 作用对象 | 实例与网卡 | 子网 |
| 状态 | 有状态,回包自动放行 | 无状态,返回流量要显式放行 |
| 规则 | 允许与拒绝,带优先级 | 按编号顺序匹配,命中即停 |
| 典型用途 | 精细化实例访问控制 | 子网级粗粒度隔离与兜底 |
| 变更影响面 | 只影响绑定该组的实例 | 影响关联子网内的全部实例 |
典型使用场景
- 用 ACL 给整个子网做兜底,防止运维误开安全组导致大范围暴露
- 多租户环境按子网隔离不同业务或不同客户
- 公网子网限制入方向只允许 80、443 与运维网段
- 数据库子网只允许应用子网访问,其他来源一律拒绝
- 合规要求多层防护时,安全组与 ACL 同时配置并留档
网络 ACL 规则示例
网络 ACL 规则示例
入:100 允许 TCP 10.10.0.0/16 → 子网 # 内网段放行
入:200 允许 TCP 3306 来自应用安全组或指定网段 # 精确放行数据库访问
入:* 拒绝 0.0.0.0/0(默认兜底) # 末尾拒绝,顺序必须在最后
出:对称放行返回流量(无状态,必须写) # 漏掉这步就是单向通大多数团队用安全组就足够;多租户或强合规环境再加网络 ACL 做子网级兜底。加 ACL 的关系是补一层保险,而不是替代安全组,两者的规则要维持一致的意图。
ACL 无状态意味着返回流量要单独写规则:只配入方向会造成「请求能到、回包出不去」,表现为连接建立后长时间超时,很容易被误判成应用或数据库问题。