使用安全组实现内网访问控制

安全组除了可以面向Internet提供状态防火墙的网络访问控制能力,也适用于治理内网通信,对内网通信进行访问控制。实现子网隔离和四层网络访问控制。

安全风险

同一个VPC内所有ECS实例间网络全互通存在横向移动、非授权访问等安全风险。如内网中一台ECS实例被渗透后或感染病毒后可以通过内网继续向其他机器渗透或传染病毒;又如内部网络的服务往往在接口认证和授权上实现不严格,很容易从内网非法访问或越权访问。

通过安全组隔离不同的业务集群或者阻断实例间的横向网络访问可以有效缓解内网横向移动和非授权访问风险。

最佳实践

通过安全组隔离不同业务集群

有两个ECS实例集群(数据库集群和Web Server集群),数据库集群需要内部互相通信,Web Server集群间不需要互相通信,仅允许Web Server集群访问数据库集群的服务端口。

image

假设数据库集群规划的IP地址组是10.1.0.0/24,Web Server规划的IP地址组是10.2.0.0/24,服务端口是5432(PostgreSQL的服务端口)。安全目标是Web Server仅能访问数据库集群的服务端口,其访问其他端口或数据库集群访问Web Server都是禁止的。一种可行的安全组配置是:

  1. 创建安全组A,配置(入方向,允许,优先级1,来源:10.2.0.0/24,目的:5432)规则。将数据库集群实例绑定到安全组A。

  2. 创建安全组B,将Web Server集群实例绑定到安全组B。

注意:安全组在入方向会拒绝所有未显式放行的流量,出方向默认放行所有未显式拒绝的流量。所以安全组A不需要配置默认拒绝所有访问的规则,安全组B不需要配置放行访问Web Server集群的服务端口规则。

您可以结合标签功能,将打了某个标签的ECS实例批量地绑定到相同标签的安全组中。如上面的例子中,你可以给ECS实例都打上标签cluster:PostgreSQL,然后给安全组A也打上标签cluster:PostgreSQL,然后创建执行ACS-ECS-CorrectSecurityGroupInstancesByTags OOS模板,输入标签值参数,即可完成批量绑定操作。具体可参见使用标签获取ECS实例并将其加入到对应标签的安全组

单个安全组内ECS实例间互相隔离

在上例中我们发现其实Web Server集群内部不需要互相通信,数据库集群也仅需要少量同步、管控服务端口通信,没有必要放通组内全部通信,避免以一台ECS实例为跳板的风险横向扩散。

这时可以使用微隔离,即安全组内不互通,需要通信的端口显式放通。

您可以使用企业级安全组——企业级安全组组内强制隔离,且隔离规则无法修改。

您也可以使用普通安全组,普通安全组组内实例是默认互通的(系统自动添加了优先级最高的隐藏放通规则,自定义规则仅作用于非组内流量),您需要显式地禁止组内互通。您需要在安全组详情页面中修改组内连通策略,修改为组内隔离(如下图)。

image.png

然后您需要显式地放通内部通信端口,如数据集群地址段10.1.0.0/24,内部通信需要使用2379端口,您可以配置安全组A增加规则(入方向,允许,优先级1,来源10.1.0.0/24,目的:2379)。

注意:当一个ECS集群绑定了多个安全组,其中有安全组是组内隔离,有安全组是组内放通,那么叠加后的效果是组内放通。

叠加使用多个安全组时需要注意合并效果

一个实例可以绑定到多个安全组上,多个安全组的规则最终会合并,按照优先级生效,使用多个安全组需要注意叠加后的最终规则,避免出现意外效果,可在具体实例的安全组页面中查看合并后的规则。

image.png

合规能力

检查:是否存在过宽的网络放通行为

您可以结合VPC流日志分析集群内通信关系,以及是否有过于宽泛的安全组规则放通,指导收敛安全组授权。