是否有人在VPC的公共子网中配置了NLB以将流量路由到私有子网中的EC2实例?
使用ELB时,一个好的解决方案是为ELB创建一个安全组,然后为私有EC2实例创建另一个安全组,允许来自该ELB安全组的传入流量,如下所述:
https://aws.amazon.com/premiumsupport/knowledge-center/public-load-balancer-private-ec2/
“您还可以在实例的安全组上添加规则,以允许来自分配给负载平衡器的安全组的流量。例如,如果负载平衡器上的安全组是sg-1234567a,请对与私有实例关联的安全组进行以下更改。”
既然无法将安全组与NLB关联,那么如何使用相同类型的安全性来实现这一点?
谢谢
追踪http访问日志,您将看到网络负载平衡器的源IP地址没有变化,这意味着如果internet需要访问您的endpoint,您需要在endpoint安全组上允许0.0.0.0/0。这只有在使用私有子网时才可以,因此如果此服务器位于公共子网上,请小心,因为不建议使用此解决方案。在这种情况下,只需使用应用程序负载平衡器。您仍然可以设置相同的侦听器,并按实例配置目标组。如果跟踪访问日志,应用程序负载平衡器会将源IP地址更新为自己的专用地址。这样做的好处是,您只需要允许https通信到应用程序负载平衡器,然后如果您愿意,可以从负载平衡器接受目标组的http。
根据AWS文档,这确实是真的:
网络负载平衡器没有关联的安全组。因此,目标的安全组必须使用IP地址来允许来自负载平衡器的流量。
因此,如果您不想授予对整个VPC CIDR的访问权限,您可以授予对负载均衡器节点使用的私有IP地址的访问权限。每个负载均衡器子网有一个IP地址。
在的NLB选项卡上,每个负载平衡器有一个网络接口:
在每个网络接口的详细信息选项卡上,从主专用IPv4 IP复制地址。
您可以在EC2实例的add it SG中使用这个私有IP地址。
请参阅AWS文件
既然无法将安全组与NLB关联,那么如何使用相同类型的安全性来实现这一点?
安全方面没有改变。
NLB是一个不同的野兽,它不同于经典的负载平衡器。对于经典的负载平衡器,从实例的角度来看,流量似乎确实来自专有网络内部。从外部,流量进入(随机和变异)IP地址列表,由AWS提供给您的DNS记录解析。
网络负载均衡器完全不同。从您的实例的角度来看,它们是完全不可见的。如果是外部网络负载均衡器,流量似乎直接来自Internet上的实例(尽管这是一种幻觉)。因此,如果您想与Internet上的每个人交谈,0.0.0.0/0是您打开它的目的。
事实上,这就是文件所说的:
https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-register-targets.html#target-安全组
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。如果它们在开放的互联网上,0.0.0.0/0。正如我在其他响应中看到的那样,添加NLB私有IP地址一事无成。就实例而言,流量不是来自那里。
从安全角度来看,一切都没有改变。由于您的实例位于私有子网中,流量不能直接流向它们,因为中间有一个NAT网关。它只能从它们流向Internet(通过NAT网关,然后是Internet网关)。即使您指定允许来自任何地方的所有流量,流量仍然不会来。它必须通过另一种方式来。在您的情况下,这种方式是NLB,它有固定数量的监听端口,并且只将流量发送到您指定的实例上的目标端口。
如果要从经典负载平衡器移动到NLB,请将安全组规则从负载平衡器移动到实例。或者更好的是,由于您可以有多个安全组,只需将您当前用于经典LB的SG添加到实例中(并根据需要更新任何ASG)。你的安全姿态将完全相同。另外一个好处是,现在您的应用程序不再需要代理协议之类的东西来确定流量来自何处,负载平衡器也不再对其进行混淆。
我可以就我正在进行的AWS VPC实验室练习寻求帮助吗?谢谢 我创建了一个新的 VPC,分别是公有子网和私有子网,然后分别在每个子网中启动了 2 个 EC2 实例。我还设置了在私有子网安全组上进行 ping (ICMP) 访问所需的安全组。但是,我无法从公有子网中的实例 ping 私有子网中的实例。 以下是设置: VPC:(CIDR块10.0.0.0/16) 公共子网:(CIDR区块10.0.1.
我是StackOverflow的新手,如果我需要编辑这篇文章以使其更清晰,请告诉我。 目标:通过位于公用子网内的wireguard vpn(这些子网都在同一VPC内),通过专用子网内HTTP/HTTPS web应用实例访问。 情况: 我有一个VPC: 1个公共子网,其中包含运行wireguard VPN的ec2实例 4个私有子网,分别包含运行单个web应用程序的ec2(基于bitnami图像)。w
我正在尝试在公有子网中的 EC2 实例上使用 squid 设置 DNS 筛选。将允许通过/阻止来自私有子网的 EC2 实例通过公有 EC2 实例。 如果我SSH到私有EC2实例并运行,什么都不会发生(google.com在我的whitelist.txt文件中)。没有显示新条目。 如果我运行
我正在使用Amazon EC2,我想把一个面向互联网的ELB(负载平衡器)放到一个私有子网上的两个实例中。我正在将VPC用于公共和私有子网。 如果我只是将私有子网添加到ELB,它将不会获得任何连接。 如果我将两个子网都附加到ELB,那么它可以访问实例,但它通常会超时。(请参阅屏幕截图1) 如果我只附加到公共子网,那么我附加到ELB的实例会获得OutOfService,因为我在公共子网中没有任何实例
我在AWS中有一个公共子网,我在其中有3个实例。。。 WebApp01 (例如弹性 IP - 54.23.61.239) WebApp02 (私有 IP - 192.168.0.24) 虚拟应用程序03 (私有 IP - 192.168.0.25) 我的路由表设置为192.168.0.0/16 - 我可以看到拥有公共IP的实例可以访问互联网,但没有公共IP的实例无法访问互联网。 如何让Intern
我有一个lambda到一个私有子网(为了发出一个外部post-https请求),我需要从dynambodb表触发它。然后我必须把项目放到dynamodb上的另一个表中。如果我将lambda放入私有子网,则触发器不起作用,如果我将其放入公共子网并调用位于同一专有网络但位于私有子网的lambda,则调用超时。如何将lambda从私有子网连接到公共子网,以完成来自dynamo的触发器任务,发布外部api