https://aws.amazon.com/about-aws/whats-new/2023/08/network-load-balancer-supports-security-groups/

8月10日,AWS无预警放出NLB对SG的支持,这实际上带来了诸多功能性和安全性上的提升,我们将在本文中探讨一下NLB添加SG支持,可以带来的种种好处。

1. 通过SG,NLB可以直接进行流量过滤

没有SG支持之前,NLB会保留源IP并将流量分发到目标组,这意味着我们需要在目标组的SG上创建对应规则,来进行流量的过滤。当NLB的目标组数量有限,且业务不那么复杂时,我们还可以维护这些目标组的规则,但是当规模复杂度均上升时,目标组规则的可维护性就会降低。

通过SG,我们可以直接在NLB上过滤流量,集中实施访问控制策略。

2. 通过SG引用,精细化流量过滤

为NLB添加SG支持后,我们便可以在SG间引用NLB的SG,这样可以做到流量的精细化过滤,例如我们可以限制NLB的目标组中的EC2,只接收来自NLB的流量(这是一个典型的SG引用场景),通过SG引用,我们不用担心目标组弹性伸缩带来的规则维护成本。同时通过限制目标组仅接收来自NLB的流量,我们也可以保护目标组不受直接访问所带来的安全风险和负载均衡失效的问题。

3. K8s的场景

如果您使用Kubernetes,则可以通过使用Amazon Load Balancer Controller 2.6.0 或更高版本在NLB 上启用安全组。通过使用该控制器启用NLB 安全组,可以提高节点的安全性,因为可以通过引用NLB 安全组来简化入站规则。此外,这还可以改进扩展能力,因为该控制器会保持每个集群的安全组规则数量恒定。

我们已经了解了NLB添加SG支持的好处,那么接下来我们便实际操作一下,首先我们对于该feature创建前的NLB,如下图所示。

可以看到,既有的NLB是无法添加SG支持的,这就带来了该feature的要求即,新创建的带安全组的NLB,才能在后期调整SG。

所以我们开始一个新的NLB创建

可以看到在创建这个NLB时,我们挂上SG(实际上如果在这里不挂SG,就回到了之前的NLB)

经过等待,我们便有了一个带有SG功能的NLB。同时我们可以将流量慢慢过渡到这里来。

值得注意的是,对于PrivateLink的流量,默认情况下SG是过滤的,但是我们可以通过这里的Toggle进行选择。这让我想到了之前Internal NLB如何设计SG功能,便是通过PrivateLink为NLB添加SG功能,但是需要注意的是PrivateLink的性能是被限制了,它并没有获得NLB的高吞吐量的特性。那么,含有SG的NLB,其性能到底有多少损失呢?我们将在下一篇,对LB进行吞吐量测试,以确认这个功能所需要的性能开销到底有多少。