安全组用于控制ECS实例的入方向和出方向流量。本文介绍安全组规划原则,并提供Web服务、远程访问、数据库访问、内网互通等常见场景的规则配置示例。
安全组应用指导
1、规划安全组
配置安全组前,先明确业务边界和安全要求,例如哪些服务对公网开放,哪些服务仅允许内网访问。
公网服务和内网服务使用不同安全组
公网服务仅开放必要端口,其他端口和协议默认关闭,减少暴露面。
数据库、缓存等内部服务建议部署在无公网访问权限的ECS实例上,并通过授权另一个安全组实现内网访问。
不同应用使用不同安全组
不同应用通常需要开放不同端口,建议分属不同安全组,避免规则互相影响。
例如,Linux实例可能开放TCP 22端口用于SSH,Windows实例可能开放TCP 3389端口用于远程桌面。
即使使用同一镜像类型,提供不同服务且无需内网互访时,也建议划入不同安全组,便于后续解耦和变更。
规划应用时,可以结合网段和安全组划分服务边界。
生产环境和测试环境使用不同安全组
生产、测试、开发环境建议使用不同安全组,避免测试规则影响线上业务。
多套测试环境也可以分配不同安全组,减少环境之间的互相干扰。
不需要公网访问的资源不分配公网IP
连接ECS实例时,优先使用Workbench、会话管理工具或跳板机,减少公网暴露。访问无公网或私网环境中的服务时,可使用端口转发功能,请参见通过会话管理CLI的端口转发访问无公网实例。
分布式应用中,不对公网提供服务的ECS实例建议不分配公网IP。多台服务器提供公网服务时,建议通过负载均衡服务分发流量,避免单点故障。
ECS实例仅需出方向访问公网时,建议使用NAT网关配置SNAT规则,避免分配公网IP或EIP后暴露服务。具体配置,请参见创建和管理SNAT条目。
以白名单的方式使用安全组
安全组建议按白名单方式使用:默认拒绝访问,仅添加允许规则放通必要端口和授权对象。排查线上问题时,不建议临时分配公网IP或挂载EIP,以免扩大暴露面。
2、配置安全组规则
配置安全组规则时,仅开放业务必需的端口,并尽量限制源IP地址范围。
在VPC网络中,一条安全组规则可同时控制公网和内网访问。
普通安全组和企业级安全组默认策略有差异
普通安全组和企业级安全组默认拒绝所有入方向访问。普通安全组默认允许所有出方向访问;企业级安全组默认拒绝所有出方向访问。
不同安全组及不同类型安全组的内网互通性有差异
即使是同一个账户下的ECS实例,如果分属不同安全组,内网网络也是隔离的。普通安全组默认组内内网互通;企业级安全组默认组内内网隔离。
遵循最小授权原则添加安全组规则
例如,开放Linux实例22端口用于远程登录时,仅允许特定IP访问。
警告授权对象为0.0.0.0/0或::/0时,表示允许所有IP访问实例,风险较高。仅在必须对公网开放的场景使用,并只开放必要端口。
请按最小范围开放原则配置规则,避免全开。关于安全组支持的授权对象类型,请参见安全组规则。
遵循最小权限原则设置组内隔离
在不需要普通安全组内ECS实例互相内网互通时,将普通安全组的组内连通策略设置为组内隔离。
尽量保持单个安全组内规则用途统一
按照用途将规则维护在多个安全组中,并将实例关联到这些安全组。单个安全组的规则数量过多,会增加管理复杂度。
谨慎选择安全组规则的授权对象
安全组规则的授权对象可以是IP地址、安全组或者CIDR网段。
不同安全组之间需要内网互通时,优先使用安全组ID授权,避免逐个维护IP或CIDR网段。例如,Web层使用
sg-web,数据库层使用sg-database,可在sg-database中授权sg-web访问MySQL(3306)端口。内网访问建议使用源安全组授权,而不是CIDR网段授权。
典型的应用通常使用默认的端口提供服务
这些应用会通过服务器的特定端口与外部进行通信,详情请参见常用端口。
说明如需检测ECS常用端口是否被安全组规则放行,或检测安全组规则是否允许特定IP与ECS网卡单向访问,可在自助问题排查下的安全组规则检测页签完成操作。具体操作,请参见安全组规则检测。
3、持续优化调整
业务变化后,原有安全组规则可能不再适用,建议定期检查并调整。修改线上规则前,可克隆安全组并在测试环境验证,确认流量正常后再应用到生产环境,避免业务中断。
安全组应用案例
管控ECS实例的入站流量
入站流量指外部资源访问ECS实例的流量。安全组入方向规则默认拒绝访问,仅需配置允许规则。相关案例包含:
管控ECS实例的出站流量
出站流量指ECS实例访问外部资源的流量。安全组出方向规则默认允许访问,可通过拒绝规则限制实例访问指定外部资源。相关案例包含:
案例1:部署在ECS实例的网站业务提供Web服务
网站部署在ECS实例上并对公网提供服务时,仅开放TCP 80(HTTP)和443(HTTPS)入方向访问,其他服务端口保持关闭。
安全组规则示例如下表所示:
规则方向 | 授权策略 | 优先级 | 协议类型 | 端口范围 | 授权对象 |
入方向 | 允许 | 1 | 自定义TCP | 服务的开放端口:
| 源:0.0.0.0/0 |
如果添加安全组规则后仍无法访问网站,请检查服务的开放端口是否正常工作。具体操作,请参见无法访问ECS实例中的服务的排查方法。
案例2:特定用户需要远程访问ECS实例
需要远程连接ECS实例时,仅对管理员或指定服务器IP开放远程登录端口,例如TCP 22(SSH)或自定义SSH端口,降低被攻击风险。
安全组规则示例如下表所示:
规则方向 | 授权策略 | 优先级 | 协议类型 | 端口范围 | 授权对象 |
入方向 | 允许 | 1 | 自定义TCP |
| 源:192.168.XX.XX 说明 根据连接方式填写特定用户或服务器的公网IP或私网IP。 可通过IP地址查询等网站获取本地公网IP地址。 |
使用阿里云Workbench远程连接实例时,仅需允许特定授权对象。安全组入方向规则示例如下表所示。
授权策略 | 优先级 | 协议类型 | 端口范围 | 授权对象 |
允许 | 1 | 自定义TCP |
|
|
案例3:数据库服务部署在ECS的安全策略
数据库服务建议仅允许特定IP地址或应用服务器安全组访问对应端口,避免直接暴露到公网。
如果入方向规则已包含0.0.0.0/0,请检查是否确有公网访问需求。不需要公网访问时,可添加拒绝规则。例如MySQL默认不应向公网开放3306端口,可添加如下拒绝规则,并将优先级设为100。
常见数据库默认端口的安全组规则如下表所示:
数据库类型 | 规则方向 | 授权策略 | 优先级 | 协议类型 | 端口范围 | 授权对象 |
MySQL | 入方向 | 允许 | 1 | 自定义TCP | 目的:3306/3306 | 源:172.16.XX.XX |
Oracle | 入方向 | 允许 | 1 | 自定义TCP | 目的:1521/1521 | 源:192.168.XX.XX |
MS SQL | 入方向 | 允许 | 1 | 自定义TCP | 目的:1433/1433 | 源:192.168.XX.XX/16 |
PostgreSQL | 入方向 | 允许 | 1 | 自定义TCP | 目的:5432/5432 | 源:sg-bp1hv6wvmegs036**** |
Redis | 入方向 | 允许 | 1 | 自定义TCP | 目的:6379/6379 | 源:160998252992****/sg-bp174yoe2ib1sqj5**** |
请根据实际情况替换IP地址、CIDR地址块、阿里云账号ID和安全组ID。
案例4:只允许特定协议的业务访问
如需测试网络连通性,可允许ICMP协议访问。例如,在客户端执行ping命令前,需要放通ICMP。安全组规则示例如下表所示:
规则方向 | 授权策略 | 优先级 | 协议类型 | 端口范围 | 授权对象 |
入方向 | 允许 | 1 |
| 目的:-1/-1 | 客户端IP地址 说明 根据网络环境不同,输入IPv4地址或者IPv6地址。 |
如果添加规则后仍无法从客户端ping通实例,请参见无法ping通ECS实例公网IP的排查方法排查。
案例5:不同安全组的实例实现内网互通
同一VPC内,不同安全组的实例需要互访时,建议通过授权安全组实现。例如,安全组A中的实例需要通过FTP访问安全组B中的共享文件,可授权安全组A访问安全组B的对应端口,无需逐个维护实例IP。
如果实例属于不同VPC,不能仅通过安全组实现内网互通。
如果业务支持将所有ECS实例部署到同一VPC,可通过更换ECS实例的VPC实现VPC内网互通。
如果ECS实例必须部署在不同VPC中,可使用VPC对等连接、私网连接或云企业网等方案。更多信息,请参见VPC互连。
情况一:
安全组A和安全组B属于同一账号时,授权对象填写安全组ID。规则示例如下表所示。
规则方向
授权策略
优先级
协议类型
端口范围
授权对象
入方向
允许
1
自定义TCP
目的:21/21
源:sg-bp1hv6wvmegs036****
说明请根据实际情况替换安全组ID。
情况二:
安全组A和安全组B属于不同账号时,授权对象填写阿里云账号ID和安全组ID。规则示例如下表所示。
规则方向
授权策略
优先级
协议类型
端口范围
授权对象
入方向
允许
1
自定义TCP
目的:21/21
源:160998252992****/sg-bp174yoe2ib1sqj5****
说明请根据实际情况替换阿里云账号ID和安全组ID。
案例6:限制ECS实例访问外部网站
如果只允许实例访问指定网站,可将出方向规则按白名单方式配置:先拒绝全部出方向访问,再允许访问指定网站IP。
设置安全组规则时需注意:
当协议、端口和授权对象匹配到多条规则时,系统根据优先级和授权策略判断最终生效规则。仅最终结果为允许时,才建立会话。
安全组规则优先级数值越小,优先级越高。相同优先级下,拒绝规则优先生效。因此,拒绝全部出方向访问的规则优先级应低于允许规则,确保指定网站访问能命中允许规则。
安全组规则示例如下表所示:
规则方向 | 授权策略 | 优先级 | 协议类型 | 端口范围 | 授权对象 |
出方向 | 拒绝 | 2 | 全部 | 目的:-1/-1 | 目的:0.0.0.0/0 |
出方向 | 允许 | 1 | 自定义TCP | 目的:80/80 | 目的:47.96.XX.XX |
出方向 | 允许 | 1 | 自定义TCP | 目的:443/443 | 目的:121.199.XX.XX |
以上规则表示:安全组内实例仅允许访问47.96.XX.XX的80端口和121.199.XX.XX的443端口,其他出方向访问均被拒绝。