安全组是一种虚拟防火墙,能够控制ECS实例的出入站流量。您可以将具有相同安全需求并相互信任的ECS实例放入相同的安全组,以划分安全域,保障云上资源的安全。本文介绍安全组的功能、分类、最佳实践和操作指引等。
功能介绍
创建ECS实例时,您需要指定一个或多个安全组。ECS 实例关联的多个安全组的规则将按固定的策略排序,共同决定是否放行实例出入站的流量。
您可以为安全组新增规则,修改或删除已有规则,这些规则变动会自动作用于安全组中的所有ECS实例。安全组规则由授权对象、目的端口、协议类型、授权策略(允许或拒绝)和优先级组成。安全组的入方向规则控制ECS实例入站的流量,出方向规则控制ECS实例出站的流量,详情请参见安全组规则。
ECS实例关联的安全组,其规则作用于主网卡。专有网络ECS实例的其他弹性网卡,可以指定与主网卡不同的安全组。
配置安全组时,您还需要了解如下信息:
在专有网络VPC下,安全组仅能在所属的VPC下使用,在创建专有网络VPC的ECS实例时,您指定的虚拟交换机和安全组,必须属于同一个VPC。
ECS实例或者弹性网卡可以关联一个或者多个安全组,但必须至少关联一个安全组。ECS实例和弹性网卡关联安全组的数量限制,请参见安全组使用限制。
在创建ECS实例时,如果您未指定安全组,系统会将该ECS实例的主网卡关联到默认安全组,详情请参见默认安全组。
例如下图所示,专有网络VPC包含ECS 1
和 ECS 2
,两个ECS的主网卡都关联安全组1
。假设安全组1
是普通安全组,组内连通策略默认为组内互通,那么ECS 1
和 ECS 2
的内网是互通的,这种互通策略不受您配置的自定义规则的影响。ECS 1
和 ECS 2
的其他出入方向流量受到安全组1
的自定义规则控制。根据安全组1
的入方向规则,使用任意IP都可以ping通安全组1
内ECS 1
和 ECS 2
,安全组1
未配置出方向规则,默认允许所有出方向的流量。
安全组分类
普通安全组和企业级安全组
根据特性不同,安全组分为普通安全组和企业级安全组,两者均免费,适用于不同的使用场景。
普通安全组:支持组内互通功能,支持添加授权安全组访问的规则,但可容纳的私网IP数量小于企业级安全组。
企业级安全组:可以容纳更多的私网IP地址数量,但不支持组内互通功能,也不支持添加授权安全组访问的规则。
在ECS实例关联到多个安全组时,同一块弹性网卡只能使用一种类型的安全组。建议您根据自己的使用需求来选择安全组类型,详情请参见普通安全组与企业级安全组。
自定义安全组和托管安全组
根据操作权限归属不同,安全组分为自定义安全组和托管安全组。自定义安全组和托管安全组都可以是普通安全组或者企业级安全组。
自定义安全组:由阿里云账号直接在ECS控制台上创建的安全组为自定义安全组,您拥有自定义安全组的操作权限。默认安全组也属于自定义安全组,详情请参见创建安全组。
托管安全组:云产品可以为您创建托管安全组,操作权限属于云产品,您仅能查看不能操作,详情请参见托管安全组。
在您使用DescribeSecurityGroups接口查询到安全组的ServiceManaged
属性为True
,或使用控制台看到安全组有类似云产品托管的安全组不支持修改操作的提示时,表示该安全组为托管安全组。
安全组使用的最佳实践
关于安全组的使用,为您提供以下最佳实践建议:
规划
您可以为安全组设置名称、描述,也可以设置安全组的标签、资源组,便于进行分类运维。建议您合理设置这些信息,方便快速识别安全组的用途,在管理较多安全组时更加清晰。
以白名单的方式使用安全组
即默认拒绝所有访问,添加允许规则来放通指定的端口范围和授权对象。
添加安全组规则时遵循最小授权原则
例如,开放Linux实例的22端口用于远程登录时,建议仅允许特定的IP访问,而非所有IP(
0.0.0.0/0
)。遵循最小权限原则
在不需要普通安全组内ECS实例互相内网互通时,将普通安全组的组内连通策略设置为组内隔离。
尽量保持单个安全组内规则的简洁
按照用途将规则维护在多个安全组中,并将实例关联到这些安全组。单个安全组的规则数量过多,会增加管理复杂度。安全组规则的健康检查,提供了检测单个安全组冗余规则的能力,详情请参见检查安全组是否存在冗余规则。
不同类型应用的实例加入不同的安全组,分别维护安全组规则
例如,将允许公网访问的实例关联到同一个安全组,仅放通对外提供服务的端口,例如80、443等,默认拒绝其他所有访问。避免在允许公网访问的实例上提供其他服务,例如MySQL、Redis等,建议将内部服务部署在不允许公网访问的实例上,并关联其他的安全组。
避免直接修改线上环境使用的安全组
可以先克隆一个安全组在测试环境调试,确保修改后实例流量正常,再对线上环境的安全组规则进行修改。
如果您需要检测ECS常用端口是否被安全组规则放行,或者检测安全组规则是否允许特定IP与ECS网卡单向访问,您可以在自助问题排查下的安全组规则检测页签完成操作。具体操作,请参见安全组规则检测。
安全组操作指引
如果您第一次使用安全组,建议您按照如下步骤操作:
创建ECS实例时,如果未使用默认安全组或者默认安全组不满足业务需要,您需要单独创建安全组,详情请参见创建安全组。
不同类型安全组存在一些不可见的默认访问控制规则。如果不满足业务需要,您需要手动给安全组添加出入方向规则,详情请参见添加安全组规则。
如果您需要将ECS实例(主网卡)或者辅助弹性网卡关联到不同安全组中,可手动进行关联,详情请参见安全组与ECS实例关联的管理、安全组与弹性网卡关联管理。
安全组的常见操作如下:
使用控制台
使用API
创建安全组:CreateSecurityGroup
查询安全组:DescribeSecurityGroups
添加安全组规则:
使用AuthorizeSecurityGroup添加入方向安全组规则
使用AuthorizeSecurityGroupEgress添加出方向安全组规则
查询安全组规则:DescribeSecurityGroupAttribute
修改安全组规则:
使用ModifySecurityGroupRule修改入方向安全组规则
使用ModifySecurityGroupEgressRule修改出方向安全组规则
删除安全组规则:
使用RevokeSecurityGroup删除入方向规则
使用RevokeSecurityGroupEgress删除出方向规则
修改普通安全组的组内连通策略:ModifySecurityGroupPolicy
删除安全组:DeleteSecurityGroup
安全组与ECS实例、弹性网卡关联的管理:
使用全量替换方式
使用ModifyInstanceAttribute替换专有网络ECS实例的安全组
使用ModifyNetworkInterfaceAttribute替换弹性网卡的安全组
使用增量添加/移除方式
使用JoinSecurityGroup将一台ECS实例或弹性网卡关联到指定的安全组
使用LeaveSecurityGroup将一台ECS实例或弹性网卡与指定的安全组解除关联
修改安全组名称或描述:ModifySecurityGroupAttribute
相关文档
安全组配额相关信息,详情请参见安全组使用限制。
想要给ECS实例绑定多张弹性网卡,详情请参见弹性网卡概述。
合理使用安全组可以有效提高实例的安全性,但提高实例安全性是一项系统的工作,您还可以结合更多其他做法,详情请参见云服务器ECS安全性。