我们可以将 Web 层中的 EC2 实例设为私有吗?

Can we make EC2 instances in the web tier as Private?

我们有典型的 3 层架构,包括 Web、应用程序和数据库。 我们可以将 Web 层中的 EC2 实例设为私有吗?并只允许传入流量通过 ALB? 据我所知,我们可以应用仅允许来自 ALB 的 SG 的连接的 SG。但是,如果我们的私有 EC2 实例必须 return 响应客户端呢?它将如何通过 ALB 进行路由,因为 ALB 主要用于管理传入流量。 同样对于传出流量,我们可以配置类似私有 EC2 实例 -> ALB -> 互联网的东西吗?如果是那么如何?那么,有没有办法让私有 EC2 实例在不分配 public IP 的情况下与互联网通信?

将您的实例保存在私有子网中是最佳做法,即使对于 Web 层也是如此。

对于入站流量,您可以将负载均衡器添加到您的 public 子网中,然后仅允许 HTTP/HTTPS 从负载均衡器进入 Web 安全组。您可以通过将子网范围添加到 Web 服务器安全组来执行此操作,或者引用负载均衡器分配给它的安全组。

对于私有子网中的出站互联网流量,您需要创建一个 NAT Gateway or NAT instance within a public subnet, and then add a route for 0.0.0.0/0 for the private subnet to route traffic to the NAT. Additionally if you want IPv6 traffic you would create an egress only internet gateway 路由 ::/0

But What if our Private EC2 instance has to return response back to the client? How it'll be routed through ALB as ALB is mostly used for managing incoming traffic.

假设您的 ALB 和实例设置正确,您无需执行任何特殊操作。如果实例位于没有任何互联网连接的私有子网中,任何到达 ALB 的请求都将能够 return 到客户端事件。

但是,您的实例将无法自行启动互联网连接。因此,如果实例不需要互联网即可运行,则不需要 NAT。否则,它是必需的。