是否有人在您的VPC的公共子网中配置了NLB,以将流量路由到私有子网中的EC2实例?
使用ELB时,一个好的解决方案是为ELB创建一个安全组,然后为私有EC2实例创建另一个SecurityGroup,允许来自该ELB安全组的传入流量,如下所述:
https://aws.amazon.com/premiumsupport/knowledge-center/public-load-balancer-private-ec2/
“您还可以在实例的安全组上添加一条规则,以允许来自分配给负载平衡器的安全组的流量。例如,如果负载平衡器上的安全组是sg-1234567a,请对关联的安全组进行以下更改与私有实例”
由于无法将安全组与NLB关联,因此如何使用相同的安全类型来实现此目的?
谢谢!
最佳答案
由于您无法将安全组与NLB相关联,您怎么可能
使用相同类型的安全性来完成此操作?
安全方面不会改变。
NLB是不同的野兽,它与经典的负载均衡器不同。对于经典负载均衡器,从实例的角度来看,流量确实确实来自VPC内部。流量从外部进入IP地址的(随机和变异)列表,由AWS提供给您的DNS记录进行解析。
网络负载平衡器完全不同。从实例的角度来看,它们是完全不可见的。如果它是外部网络负载平衡器,则流量似乎直接来自Internet上的实例(即使这只是一种幻想)。因此,如果您想与Internet上的每个人交谈,则可以打开0.0.0.0/0。
实际上,这就是文档所说的:
https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-register-targets.html#target-security-groups
Recommended Rules
Inbound Source Port Range Comment
Client IP addresses instance listener Allow traffic from clients on the instance listener port
VPC CIDR health check Allow traffic from the load balancer on the health check port
客户端IP地址就是您的客户端IP。如果它们在开放的Internet上,则为0.0.0.0/0。正如我在其他答复中所看到的,添加NLB专用IP地址并没有完成任何事情。就实例而言,流量不是从那里来的。
在安全角度上,什么都没有改变。由于您的实例位于专用子网中,因此流量无法直接流向它们,因为中间有一个NAT网关。它只能从它们流到Internet(通过NAT网关,然后是Internet网关)。即使您指定所有流量都允许来自任何地方,流量仍然不会出现。它将不得不通过另一种方式来实现。在您的情况下,这种方式就是NLB,它具有固定数量的侦听端口,并且仅将流量发送到指定实例上的目标端口。
如果从经典负载均衡器迁移到NLB,请将安全组规则从负载均衡器移动到实例。更好的是,由于您可以有多个安全组,因此只需将经典LB当前拥有的SG添加到实例中(并根据需要更新任何ASG)。您的安全态势将完全相同。现在,您的应用程序不再需要诸如代理协议之类的功能来确定流量来自何处,它的另一个好处是,负载均衡器不再对其进行混淆。