背景介绍
安全组默认的网络连通策略是:同一安全组内的实例之间网络互通,不同安全组的实例之间默认内网不通。这个策略满足了绝大多数客户的需求,但也有少数客户希望能够改变安全组网络连通策略,同一个安全组内的网络是隔离的而不是互通的,这样可以大大减少安全组的数量进而降低维护和管理安全组的成本。基于这些客户的诉求,我们丰富了安全组网络连通策略,支持安全组内网络隔离。要使用此功能,您需要首先了解安全组内网络隔离的一些细节:
安全组内网络隔离的几点说明
- 隔离的粒度是网卡而不是ECS实例
如果ECS实例挂载了多块网卡,这一点需要特别注意。 - 不会改变默认的网络连通策略
安全组默认的网络连通策略仍然是同一安全组内的实例之间网络互通,不同安全组的实例之间默认内网不通,至少截止到目前为止这仍然是阿里云安全组的默认行为。新的功能只是为您提供了一种手段来修改网络连通策略,因此新功能不会对您既有安全组或者对您新建的安全组造成任何影响。 -
安全组内网络隔离优先级最低
- 被设置为组内“隔离”的安全组,仅在安全组内没有任何用户自定义规则的情况下保证安全组内实例之间网络隔离,但用户完全可以通过添加自己的安全组规则来改变这种行为,比如在一个组内隔离的安全组内添加一个ACL,让组内的vm1和vm2可以互相访问。
- 相反,被设置为组内互通的安全组,“互通”的优先级最高,就是说互通的安全组内实例之间一定是彼此可以互相访问的,即使你增加了Drop的ACL也不会生效。
- 网络隔离只限于当前组内的实例(网卡)
假设当前安全组是G1,组内网络设置为“隔离”,vm1和vm2属于G1,vm2和vm3属于G2,G2的组内网络互通,那么默认情况下(用户没有添加自定义ACL)vm1和vm2网络不可达,但vm2和vm3之间网络可达。
为了更好的理解安全组内网络隔离的约束和限制,下面以一个典型的例子加以说明(出于便于表达的目的,都假设一个实例只有一块网卡,因此网卡隔离就等价于实例隔离),实例和实例所属的安全组的关系如下图:
安全组内网络连通策略如下:
安全组 | 内网连通策略 | 包含的实例 |
---|---|---|
G1 | 隔离 | Vm1,Vm2 |
G2 | 互通 | Vm1,Vm2 |
G3 | 互通 | Vm2,Vm3 |
这个例子中各实例间网络连通情况如下表:
实例间网络 | 互通/隔离 | 原因 |
---|---|---|
Vm1-Vm2 | 互通 | Vm1,Vm2同时属于G1和G2,G1的策略是“隔离”,G2的策略是“互通”,由于“互通”的的优先级最高,所以Vm1和Vm2彼此可以互相访问。 |
Vm2-Vm3 | 互通 | Vm2和Vm3同时属于G3,而且G3的策略是“互通”,所以Vm2和Vm3默认可以通信 |
Vm1-Vm3 | 隔离 | Vm1和Vm3分属不同的安全组,按照默认的网络连通策略,不同安全组的实例之间默认内网不通 |
修改安全组内网络连通策略API
关于此功能的API细节,请参考ModifySecurityGroupPolicy