我正在运行一个AWS EC2实例,该实例具有公共IP地址(例如1.2.3.4
(和在1.2.3.4:8080
上侦听的服务。在这个EC2前面有一个网络负载均衡器,它的目标组指向该实例。
现在,我想强制所有到端口8080的连接都要通过该负载均衡器。
为此,我在EC2中添加了一个安全组,该组只允许从负载平衡器的专用IP地址到端口8080的传入流量。但是,由于负载平衡器还使用目标的安全组来授予客户端访问权限,我也需要向其添加0.0.0.0/0
,因为否则没有人可以从Internet访问负载平衡器。有了它,每个人都可以直接访问1.2.3.4:8080
。
对此我能做些什么吗?
现在我想强制所有到端口8080的连接都通过该负载均衡器
允许从负载平衡器的专用IP地址到端口8080的传入流量
这样,每个人都可以直接访问1.2.3.4:8080
对此我能做些什么吗?
如果您使用的是8080端口,我假设您正在公开一个HTTP端点。在这种情况下,建议使用ALB而不是NLB(我想到的使用带有HTTP的NLB的唯一原因是使用带有客户端证书验证的SSL(
使用ALB,您可能有2个SG:
- LB的SG从互联网上打开
- 从LB的SG打开EC2的SG(您可以指定SG,而不是IP地址(
在任何情况下(使用ALB或NLB(,建议将LB后面的EC2实例放置到没有公共IP地址的专用子网中-不路由到internet网关(如果您需要对EC2实例的其他访问权限(ssh,..(,您仍然可以创建一些临时连接,例如使用会话管理器+NAT网关或NAT实例。
注:根据评论进行编辑
您不应该为EC2实例分配公共ip
只需为网络负载均衡器分配公共ip
但是,通过这种方式,您无法直接ssh到EC2实例
此时您将需要使用其他方式ssh到EC2实例。
但是,如果您不坚持使用网络负载均衡器
,您可以使用应用程序负载均衡器来阻止用户直接访问EC2实例,而无需从EC2实例中删除公共ip
您仍然可以直接ssh到EC2实例。
简单的答案是:不要为AmazonEC2实例分配公共IP地址
如果您希望单独连接到实例(例如SSH(,一些选项是:
- 通过公用子网中的堡垒服务器,或
- 通过NAT实例/NAT网关使用AWS Systems Manager会话管理器