阿里云服务器ECS实践教程-ECS安全组实践(安全组授权) |
产品推荐: 1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>; 2、高防物理服务器20核/16G/50M/500G防御仅350元,点击抢购>>> 3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>> 4、阿里云服务器2核2G3M仅99元/年、2核4G5M仅199元/年,新老同享,点击抢购>>> 5、腾讯云服务器2核2G4M仅99元/年、新老同享,点击抢购>>> 本文从授权和撤销安全组规则、加入和移出安全组讲解云服务器ECS的安全组最佳实践。 网络类型阿里云的网络类型分为经典网络和专有网络VPC,对安全组支持不同的设置规则:
安全组是区分网络类型的,一台经典网络类型的ECS实例只能加入经典网络的安全组。一台专有网络VPC类型的ECS实例只能加入本VPC的安全组。 安全组内网通讯的概念本文开始之前,您应知道以下几个安全组内网通讯的概念:
安全组规则的属性安全组规则主要是描述不同的访问权限,包括如下属性:
授权一条入网请求规则在控制台或者通过API创建一个安全组时,入网方向默认deny all,即默认情况下您拒绝所有入网请求。这并不适用于所有的情况,所以您要适度地配置您的入网规则。 例如,如果您需要开启公网的80端口对外提供HTTP服务,因为是公网访问,您希望入网尽可能多访问,所以在IP网段上不应做限制,可以设置为0.0.0.0/0,具体设置可以参见以下描述,其中,括号外为控制台参数,括号内为OpenAPI参数,两者相同就不做区分。
禁止一个入网请求规则禁止一条规则时,您只需要配置一条拒绝策略,并设置较低的优先级即可。这样,当有需要时,您可以配置其他高优先级的规则覆盖这条规则。例如,您可以采用以下设置拒绝6379端口被访问。
经典网络的内网安全组规则不要使用CIDR或者IP授权对于经典网络类型的ECS实例,阿里云默认不开启任何内网的入规则。内网的授权一定要谨慎。 对于ECS实例来说,内网的IP经常变化,另外,这个IP的网段是没有规律的,所以,建议您通过安全组授权对经典网络内网的访问。 例如,您在安全组sg-redis上构建了一个Redis的集群,为了只允许特定的机器(例如sg-web)访问这个Redis的服务器编组,您不需要配置任何CIDR,只需要添加一条入规则:指定相关的安全组ID即可。
对于专有网络VPC类型的实例,如果您已经通过多个vSwitch规划好自己的IP范围,您可以使用CIDR设置作为安全组入规则。但是,如果您的专有网络VPC网段不够清晰,建议您优先考虑使用安全组作为入规则。 将需要互相通信的ECS实例加入同一个安全组一个ECS实例最多可以加入5个安全组,而同一安全组内的ECS实例之间是网络互通的。如果您在规划时已经有多个安全组,而且,直接设置多个安全组规则过于复杂的话,您可以新建一个安全组,然后将需要内网通讯的ECS实例加入这个新的安全组。 这里也不建议您将所有的ECS实例都加入一个安全组,这将会使得您的安全组规则设置变得复杂。对于一个中大型应用来说,每个服务器编组的角色不同,合理地规划每个服务器的入方向请求和出方向请求是非常有必要的。 您可以在控制台上将一台实例加入安全组,具体操作,请参见安全组与ECS实例关联的管理。 如果您对阿里云的OpenAPI非常熟悉,您可以通过OpenAPI进行批量操作,具体操作,请参见查询ECS实例。对应的Python代码片段如下: def join_sg(sg_id, instance_id): request = JoinSecurityGroupRequest() request.set_InstanceId(instance_id) request.set_SecurityGroupId(sg_id) response = _send_request(request) return response# send open api requestdef _send_request(request): request.set_accept_format('json') try: response_str = clt.do_action(request) logging.info(response_str) response_detail = json.loads(response_str) return response_detail except Exception as e: logging.error(e) 将ECS实例移出安全组如果ECS实例加入不合适的安全组,将会允许本该拒绝的访问或者拒绝本该允许的访问,这时您可以选择将ECS实例从这个安全组中移出。但是在移出安全组之前必须保证您的ECS实例已经加入其他安全组。 对应的Python代码片段如下: def leave_sg(sg_id, instance_id): request = LeaveSecurityGroupRequest() request.set_InstanceId(instance_id) request.set_SecurityGroupId(sg_id) response = _send_request(request) return response# send open api requestdef _send_request(request): request.set_accept_format('json') try: response_str = clt.do_action(request) logging.info(response_str) response_detail = json.loads(response_str) return response_detail except Exception as e: logging.error(e) 定义合理的安全组名称和标签合理的安全组名称和描述有助于您快速识别当前复杂的规则组合。您可以通过修改名称和描述来帮助自己识别安全组。 您也可以通过为安全组设置标签分组管理自己的安全组。您可以在控制台直接设置标签,具体操作请参见设置标签,也可以通过API设置标签。 删除不需要的安全组安全组中的安全组规则类似于一条条白名单和黑名单。所以,请不要保留不需要的安全组,以免因为错误加入某台ECS实例而造成不必要的麻烦。 |