安全组是一种虚拟防火墙,能够控制ECS实例的出入站流量。安全组的入方向规则控制ECS实例的入站流量,出方向规则控制ECS实例的出站流量。
创建ECS实例时,您可以指定一个或多个安全组。如果您创建ECS实例时未指定安全组,将使用默认安全组。在决定ECS实例的流量能否通过时,与ECS实例关联的多个安全组的规则,将按固定的策略排序,共同生效。
您可以为安全组新增规则,修改或删除已有规则,这些规则变动会自动地作用于安全组中的所有ECS实例。更多信息,请参见安全组规则。您可以随时修改ECS实例关联的安全组,修改后安全组的规则将会自动地作用于ECS实例。ECS实例关联的安全组,其规则作用于ECS实例的主网卡。专有网络ECS实例的其他弹性网卡,可以指定与主网卡不同的安全组。在专有网络VPC下,安全组仅能在所属的VPC下使用,在创建VPC网络下的ECS实例时,您指定的虚拟交换机和安全组,必须属于同一个VPC。
组内互通和授权安全组访问,是安全组提供的两项重要特性。组内互通,是指安全组内的ECS实例内网互通。授权安全组访问,是指您可以添加授权对象为安全组的安全组规则,从而允许或拒绝另一个安全组中的ECS实例,通过内网访问该安全组中的ECS实例。安全组分为普通安全组和企业级安全组两种类型,两者均免费,适用于不同的使用场景。普通安全组支持组内互通功能,支持添加授权安全组访问的规则,但可容纳的私网IP数量小于企业级安全组。企业级安全组可以容纳更多的私网IP地址数量,但不支持组内互通功能,也不支持添加授权安全组访问的规则。在ECS实例关联到多个安全组时,同一块网卡只能使用一种类型的安全组。建议您根据自己的使用需求来选择安全组类型。更多信息,请参见普通安全组与企业级安全组。
在您使用DescribeSecurityGroups接口查询到安全组的ServiceManaged属性为True,或使用控制台看到安全组有类似云产品托管的安全组不支持修改操作的提示时,表示该安全组为托管安全组。托管安全组属于用户账号,但操作权限属于云产品,用户仅能查看不能操作。更多信息,请参见托管安全组。
在您使用DeleteSecurityGroup接口删除安全组时返回错误码InvalidOperation.DeletionProtection,或使用控制台删除安全组看到类似删除保护的提示时,说明该安全组开启了删除保护功能。在您创建ACK集群时,关联的安全组会开启删除保护功能,来防止误删除。删除保护功能无法手动关闭,只有在删除了关联的ACK集群后,才能够自动关闭。更多信息,请参见关闭安全组删除保护。
合理使用安全组可以有效提高实例的安全性,但提高实例安全性是一项系统的工作,您还可以结合更多其他做法。更多信息,请参见云服务器ECS安全性。
安全组使用的最佳实践
关于安全组的使用,为您提供以下最佳实践建议:
规划
您可以为安全组设置名称、描述,也可以设置安全组的标签、资源组,便于进行分类运维。建议您合理设置这些信息,方便快速识别安全组的用途,在管理较多安全组时更加清晰。
以白名单的方式使用安全组
即默认拒绝所有访问,添加允许规则来放通指定的端口范围和授权对象。
添加安全组规则时遵循最小授权原则
例如,开放Linux实例的22端口用于远程登录时,建议仅允许特定的IP访问,而非所有IP(0.0.0.0/0)。
遵循最小权限原则
在不需要普通安全组内ECS实例互相内网互通时,将普通安全组的组内连通策略设置为组内隔离。
尽量保持单个安全组内规则的简洁
按照用途将规则维护在多个安全组中,并将实例关联到这些安全组。单个安全组的规则数量过多,会增加管理复杂度。安全组规则的健康检查,提供了检测单个安全组冗余规则的能力,详情请参见查看安全组是否存在冗余规则。
不同类型应用的实例加入不同的安全组,分别维护安全组规则
例如,将允许公网访问的实例关联到同一个安全组,仅放通对外提供服务的端口,例如80、443等,默认拒绝其他所有访问。避免在允许公网访问的实例上提供其他服务,例如MySQL、Redis等,建议将内部服务部署在不允许公网访问的实例上,并关联其他的安全组。
避免直接修改线上环境使用的安全组
可以先克隆一个安全组在测试环境调试,确保修改后实例流量正常,再对线上环境的安全组规则进行修改。