阿里云安全组最小权限配置是指仅放行业务必需的网络流量,默认拒绝所有未明确允许的入站和出站连接。

最小权限配置的核心要求
安全组规则由方向、协议类型、端口范围、授权对象和优先级组成,最小权限配置应遵循以下要求:
入方向默认拒绝所有流量,只放行明确需要的外部访问端口。
出方向默认拒绝所有流量,只放行明确的主动外联需求。
授权对象不得使用
0.0.0/0承载管理类端口。优先使用安全组ID、精确IP段或域名服务商回源地址作为授权对象。
每条规则添加用途描述,定期清理无效规则。
入方向规则配置
入方向规则控制外部访问ECS实例的流量,最小权限配置中,管理端口、业务端口和数据库端口必须分离。
管理端口
Linux SSH 22/TCP、Windows RDP 3389/TCP 仅允许运维堡垒机出口IP或企业办公网段访问,禁止使用 0.0.0/0,如果使用跳板机,来源填写跳板机所在安全组ID。
Web业务端口
80/TCP、443/TCP 仅对实际需要公网访问的Web服务器开放,来源可以是 0.0.0/0,但更小权限应填写CDN、WAF或负载均衡的回源地址段,源站ECS不应直接暴露给公网,应先经过SLB或WAF,安全组来源填写其内网IP或安全组ID。
应用端口
8080、8443、9000等应用端口只对负载均衡或应用网关安全组开放,不直接对公网开放,来源填写应用网关的安全组ID,实现实例级访问控制。
数据库与缓存端口
MySQL 3306/TCP、PostgreSQL 5432/TCP、Redis 6379/TCP、MongoDB 27017/TCP、SQL Server 1433/TCP 只能对应用服务器安全组开放,禁止任何公网来源,来源填写应用安全组ID,不允许IP地址 0.0.0/0 或任意互联网网段。
运维监控端口
Zabbix 10050/TCP、Node Exporter 9100/TCP、Prometheus 9090/TCP 等仅允许监控服务器内网IP或安全组访问,ICMP协议按需对监控网段开放。
其他端口
NFS 2049/TCP、SMB 445/TCP、LDAP 389/TCP 等仅在内网安全组之间开放,不得跨VPC或对公网暴露。
出方向规则配置
出方向规则控制ECS实例主动访问外部资源,最小权限原则要求出方向同样不能默认放行全部流量,否则可能导致数据外传、恶意下载或横向移动。
域名解析
仅允许UDP 53、TCP 53访问可信DNS服务器地址,例如阿里云公共DNS 223.5.5.5、223.6.6.6或自建DNS服务器IP,不开放所有目的地址。
软件更新与系统补丁
操作系统更新和软件源通常通过HTTPS,出方向允许TCP 443访问官方更新服务器域名对应的IP段,若无法维护精确IP,可暂时对更新域名解析地址段放行,但不应开放全部TCP 80/443到 0.0.0/0。
对外API调用
业务需要调用第三方API时,只允许目标API服务的固定IP或域名解析地址段,协议为TCP 443或指定端口,不使用 0.0.0/0。
内部服务互通
ECS访问内部服务时,出方向目的地填写目标安全组ID或内网网段,如 0.0.0/8、16.0.0/12、168.0.0/16,端口仅开放必要端口。
禁止通用出站
除上述明确放行规则外,其他出方向流量应通过低优先级拒绝规则全部丢弃,拒绝规则可设置为所有协议、所有端口、目的 0.0.0/0,优先级设置为较低,如100。
规则优先级与授权对象
阿里云安全组规则优先级范围为1-100,数字越小越先匹配,最小权限配置建议:
高优先级放置精确允许规则,如来源为单一IP或安全组的规则。
低优先级放置默认拒绝规则。
避免使用相同优先级放置冲突规则,若存在相同优先级,拒绝规则优先于允许规则,这可能造成非预期阻断。
授权对象优先使用安全组ID,可自动适配ECS实例扩容、缩容和替换,例如数据库安全组只接受来源为应用安全组ID,新增加的应用实例自动获得数据库访问权限。
安全组嵌套与分层
安全组支持嵌套引用,最小权限配置应利用该能力分层控制。
公网入口层:只开放80、443,来源为
0.0.0/0或CDN回源地址。应用层:只接受来自入口层安全组的80/443转发流量,同时出方向访问数据库层。
数据层:只接受来自应用层安全组的3306/6379等数据库端口,不直接响应公网流量。
管理层:单独运维安全组,允许22/3389等管理端口,只授权给堡垒机或办公网段。
通过安全组分层,可以缩小每层暴露面,避免单台ECS同时暴露多个高危端口。
常见最小权限端口模板
| 场景 | 方向 | 协议 | 端口 | 授权对象 | 备注 |
|---|---|---|---|---|---|
| Linux SSH运维 | 入 | TCP | 22 | 堡垒机安全组ID或办公网段 | 禁止 0.0.0/0 |
| Windows远程桌面 | 入 | TCP | 3389 | 堡垒机安全组ID或办公网段 | 禁止 0.0.0/0 |
| Web服务 | 入 | TCP | 80,443 | 0.0.0/0 或CDN回源段 | 源站不直接暴露 |
| 应用转发 | 入 | TCP | 8080 | SLB安全组ID | 仅内网 |
| MySQL | 入 | TCP | 3306 | 应用安全组ID | 禁止公网 |
| Redis | 入 | TCP | 6379 | 应用安全组ID | 建议加密码 |
| Zabbix监控 | 入 | TCP | 10050 | 监控服务器IP | 仅内网 |
| DNS解析 | 出 | UDP/TCP | 53 | 5.5.5,223.6.6.6 | 可信DNS |
| 系统更新 | 出 | TCP | 443 | 更新服务器IP段 | 按需 |
| 默认拒绝 | 入/出 | 全部 | 全部 | 0.0.0/0 | 低优先级 |
默认规则清理
新建安全组可能包含默认放行规则,例如同一安全组内互访、出方向全部允许,最小权限配置必须删除或修改这些默认规则。
删除同安全组内所有端口互访规则,如需互通可单独配置必要端口。
删除出方向全部允许规则,改为仅允许可信DNS、更新服务器和必要API。
删除入方向默认允许规则,确认不存在任何
0.0.0/0覆盖22、3389、3306、6379等高危端口。
审计与变更管理
安全组不是一次性配置,最小权限需要通过持续审计保持。
每月导出安全组规则,逐条核对来源、端口、协议和用途。
对
0.0.0/0规则单独标记,确认是否必须。结合VPC流日志或安全组日志,分析实际流量,关闭长期未命中的放行规则。
变更时使用最小范围原则,先在测试环境验证,再发布生产环境。
禁止在默认安全组上随意新增
0.0.0/0规则,所有变更需记录原因和有效期。
与网络ACL的配合
安全组粒度到实例,网络ACL粒度到子网,最小权限部署时,应在网络ACL层同步设置粗粒度拒绝规则,安全组层设置细粒度允许规则,例如子网ACL入方向仅放行80、443,安全组再按实例角色放行22、3306等端口,双重过滤可以防止单点配置疏漏导致数据库端口直接暴露。
错误配置及风险
以下配置不符合最小权限:
入方向
0.0.0/0允许22、3389、3306、6379、27017。出方向
0.0.0/0允许全部端口。数据库端口允许互联网网段。
规则优先级混乱,导致拒绝规则先于允许规则生效。
使用默认安全组且保留默认互通规则。
规则描述缺失,无法判断用途。
这些配置会增加暴力免费、漏洞利用、数据泄露和横向移动风险,应通过上述规则模板逐一纠正。
十一、自动化配置示例
通过阿里云API或Terraform管理安全组,将最小权限规则代码化。
resource"alicloud_security_group_rule""allow_ssh"{
type="ingress"
ip_protocol="tcp"
port_range="22/22"
security_group_id=alicloud_security_group.web.id
source_security_group_id=alicloud_security_group.bastion.id
priority=1
description="AllowSSHfrombastion"
}用代码管理可以防止控制台随意变更,将规则纳入版本控制。
十二、多账号与多环境隔离
生产、测试、开发环境使用不同安全组,不允许跨环境复用规则,生产安全组仅允许生产堡垒机和生产应用安全组访问,测试环境即使需要公网调试,也不允许复用生产数据库端口规则,跨账号授权时,只允许特定账号的安全组ID,不开放互联网地址段。