在合理规划安全组的基础上,还需要合理配置安全组的访问规则,组成安全组下云产品的访问控制策略。
设置出、入方向访问规则须遵循授权最小化原则,即有必要可授权,非必要不授权。
尽可能的确保安全组规则的简洁性。
一个云服务器实例最多可加入5个安全组,每个安全组最多可添加200条访问规则,因此可能出现一个云服务器实例同时生效上百条访问规则。如果每个安全组规则都较为复杂,不仅会极大的增加管理难度,也为后续安全组变更增加了难度。
每一条安全组规则,相当于一个白名单或黑名单,通过配置安全组规则,可实现允许或拒绝访问请求,实现云服务器的访问控制。安全组具体操作请参见管理安全组规则。
添加访问规则时,应避免设置0.0.0.0/0。使用0.0.0.0/0表示允许所有的入网访问,意味着在公网上暴露所有的端口,这是十分不安全且存在极大隐患的操作。
安全组应作为白名单使用,在设置安全组规则时先拒绝全部访问请求,对于需要访问云服务器的端口,单独添加具体端口的访问策略。例如,需要允许HTTP、HTTPS协议访问云服务器内的服务,可配置如下安全组规则,仅开放80、443端口。
添加安全组规则时需要设置优先级,优先级的取值范围为1 ~ 100,数字越小代表优先级越高。如果当前安全组中已有0.0.0.0/0的规则,您可以重新评估当前云服务器的应用或服务是否必须对外暴露所有端口。
如果发现有部分端口无需对外,可新增一条“拒绝”的安全组规则,优先级设为100。例如,在云服务器上部署了MySQL数据库服务,此时不应开放3306端口,在已有0.0.0.0/0规则的前提下,可添加如下图所示的“拒绝”规则。
安全组规则变更可能会云服务间的通信产生影响,进而影响在线业务,因此尽可能避免安全组规则的变更。
但是在不得不变更安全组规则的情况下,建议先创建一个新的安全组,把需要互相访问云服务器实例辅助网卡关联到新的安全组,然后再进行规则变更。规则变更时应逐条变更,一条规则变更后应观察在线业务是否正常,确认业务正常无影响再变更下一条规则。如果发现变更后业务受到影响,请立即恢复原先的安全组规则。
在如何规划安全组中,有个原则为“不同的应用、服务使用不同的安全组”,因此在配置安全组访问规则时,应尽量设置安全组为源地址。
在分布式应用中,不同类型的应用使用了不同的安全组,因此会出现不同的安全组之间网络不通的问题。为了能够实现指定应用可访问,可以在被访问应用的安全组中放通一条规则,源地址设为待访问应用的安全组,即授权待访问应用安全组的所有资源均可访问。例如,分布式应用中Service需要访问Database,可在Database的安全组sg-database中放通Service的安全组sg-service访问3306端口。
如果仅需要授权私有网络中某个子网内的云服务器访问,可在被访问对象的安全组中,先拒绝所有访问,然后放通待访子网的CIDR,授权此可信IP网段访问。