公共子网中的AWS NLB,私有子网中具有EC2

时间:2018-02-14 08:41:32

标签: amazon-web-services amazon-ec2 amazon-vpc vpc

是否有人在您的VPC的公共子网中配置了NLB,以便将流量路由到私有子网中的EC2实例?

使用ELB时,一个好的解决方案是为ELB创建一个安全组,然后为私有EC2实例创建另一个SecurityGroup,允许来自该ELB安全组的传入流量,如下所述:

https://aws.amazon.com/premiumsupport/knowledge-center/public-load-balancer-private-ec2/

"您还可以在实例的安全组上添加规则,以允许来自分配给负载均衡器的安全组的流量。例如,如果负载均衡器上的安全组是sg-1234567a,请在与私有实例关联的安全组上进行以下更改"

由于您无法将安全组与NLB关联,您如何使用相同类型的安全性来实现此目的?

谢谢!

2 个答案:

答案 0 :(得分:3)

根据AWS文档确实如此:

  

网络负载均衡器没有关联的安全组。   因此,目标的安全组必须使用IP地址   允许来自负载均衡器的流量。

因此,如果您不想授予对整个VPC CIDR的访问权限,则可以授予对负载均衡器节点使用的专用IP地址的访问权限。每个负载均衡器子网有一个IP地址。

在NLB选项卡上,每个负载均衡器有一个网络接口:

  

在每个网络接口的“详细信息”选项卡上,复制地址   主要私有IPv4 IP。

您可以使用此私有IP地址添加EC的EC2实例。

请参阅AWS Documentation

答案 1 :(得分:1)

  

由于无法将安全组与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)。您的安全态势将完全相同。额外的好处是,您的应用程序现在不再需要代理协议之类的东西来确定流量来自何处,负载均衡器也不再对其进行混淆。