为什么 AWS 中的 NLB 不需要安全组?

Why is it that an NLB in AWS does not require a Security Group?

在AWS中,配置CLB和ALB类型的负载均衡器时,必须关联一个安全组。此关联有助于限制负载均衡器的流量类型。为什么 NLB 不需要安全组?这不是安全风险吗?我知道这里最好的猜测可能是——“AWS 以这种方式设计”,但他们的文档似乎没有解释省略 NLB 安全组配置的原因/优势。

NLB工作在OSI模型的第四层,通信通过网络负载均衡器,连接细节到达目标,在这种情况下,EC2实例接收客户端IP,实例安全组有允许源客户端的 IP。

A​​LB 工作在 OSI 模型的第七层,通信到达 ALB 侦听器,然后它打开到目标的连接,EC2 实例接收 ALB IP 而不是客户端 IP

更多详情, https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html

https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-register-targets.html

NLB 也不例外。 NAT网关也没有SG。

ALB、CLB 和 NLB(以及 NAT)之间的主要区别在于它们的 网络接口 (ENI) 具有不同的 Source/dest. check 设置。

对于 ALB 和 CLB,Source/dest. checktrue。对于 NLB 和 NAT 网关,选项为 false。虽然我不知道 NLB 和 NAT 没有 SG 的技术原因,但我认为部分原因可能是由于 Source/dest. check 设置:

Indicates whether source/destination checks are performed, where the instance must be the source or destination of any traffic it sends or receives.

因此,在我看来,原因是 NAT 和 NLB 的预期目的,而不是 AWS 在技术上无法为其提供 SG。他们的主要目的是充当代理人。 NLB 和 NAT 一般不干扰流量,大部分只是让流量通过。由目的地决定是否允许流量。因此 NAT 和 NLB 都不使用 SG。他们阻止传入流量的唯一方法是通过 NACL。

相比之下,ALB 和 CLB 在检查所有请求时积极参与流量传输。因此,他们也有能力决定是否允许流量。

我想网络负载均衡器 (NLB) 不需要安全组,因为它通过保留关联目标实例的源 IP 来透明地运行。也就是说,您仍然可以指定安全组 - 但直接在目标级别而不是负载均衡器。因此,概念上,它并没有太大的区别(当在 NLB 后面使用 EC2 实例时)其中 指定了 SG。虽然,有些人指出限制 NLB 健康检查的 IP 范围可能很棘手。 [1] 此外,我认为在负载均衡器上一次(集中)指定安全组规则可能更方便,而不是将特定安全组附加到作为 NLB 目标的每个 EC2 实例。这两个可以看作是NLB相对于其他两个负载均衡器的不足。

技术上,与 ALB/CLB 相比,NLB 建立在全新的技术之上。 AWS 员工在 reddit 上指出了一些差异 [2]:

At a high level, Classic (CLB) and Application (ALB) Load Balancers are a collection of load balancing resources connected to your VPC by a collection of Elastic Network Interfaces (ENIs). They have listeners that accept requests from clients and route them to your targets (ALB & NLB) / backends (CLB). In the same vein, a Network Load Balancer (NLB) is a similar grouping of load balancing resources connected to your VPC, but using an AWS Hyperplane ENI, instead of a regular ENI. A Hyperplane ENI is a distributed construct that integrates with EC2's Software Defined Network (SDN) to transparently connect multiple underlying load balancing resources via a single IP address.

之前没有听说过Hyperplane这个词的大家,随时查看相应的re:Invent会话。 [3] Hyperplane用于NAT Gateway、PrivateLink和Lambda改进的VPC Networking [4].

考虑到 Hyperplane 的能力以及它构建在 EC2 上的事实,我认为 AWS 没有理由不为 NLB 实施 SG(如果他们愿意的话)。我同意@Marcin 的观点,这可能是设计使然。

[1] https://forums.aws.amazon.com/thread.jspa?threadID=263245
[2] https://www.reddit.com/r/aws/comments/cwbkw4/behind_the_scenes_what_is_an_aws_load_balancer/#t1_eyb2gji
[3] https://www.youtube.com/watch?v=8gc2DgBqo9U#t=33m40s
[4] https://aws.amazon.com/de/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/