AWS 中的私有子网选项

Private subnets options in AWS

我几天前开始弄乱 aws,我有一个关于 VPC 的问题。 我正在考虑将 "private" 设为子网的两种选择,我想知道您的意见:

选项 1:
附加了 ig 的子网(实际上是 public 子网)和 ACL 仅允许来自 VPC 的流量。
优点: 更便宜!
缺点: public 每个实例的 ip(这是一个真正的问题吗?),不同的 public 每个实例的 Ip(对于 ip 的白名单来说是一种混乱的东西)

选项 2:
使用 Nat 网关连接的没有 ig 的子网。
优点: 更安全?每个实例的 public IP 相同。
缺点: 更贵。

我认为选项 2 是最好的技术解决方案,只是贵了一点。但是,您认为选项 1 是不好的做法吗?还有更多我没有看到的陷阱吗?

看来您的要求是:

  • 运行 一些 Amazon EC2 实例
  • 让它们 "private" 远离 Internet(无法从 Internet 直接访问实例)
  • 允许实例访问互联网(例如下载更新,或与 AWS API 端点通信)

您的选项 1 是一个 public 子网,通过修改网络 ACL 使其仅允许子网内的流量成为私有的。您正在为实例提供 public IP 地址,大概是为了让它们可以访问 Internet。 这将不起作用。限制对 VPC 访问的网络 ACL 也会阻止从实例到 Internet 的流量。

您的选项 2 是私有子网,实例通过 NAT 网关访问 Internet。 无需为这些实例分配 public IP 地址,因为它们位于私有子网中。是的,这会起作用,但是,正如您所注意到的,NAT 网关(或 NAT 实例)会产生额外费用。

另一种方法是 使用带有安全组的 Public 子网:

  • 使用 public 子网并为实例自动分配 public IP 地址。这将允许他们访问 Internet。 (注意:这不同于 弹性 IP 地址 ,每个 AWS 账户每个区域限制为 5 个。)
  • 在每个实例上使用安全组来阻止入站访问。实例仍将能够启动 出站访问 到 Internet(并且响应将返回,因为安全组是 有状态的

查看文档:Amazon EC2 Security Groups for Linux Instances

当然,由于实例现在阻止入站流量,您将需要一种方法来连接到它们。这通常是通过在 public 子网中启动 Bastion Server(跳转箱)来完成的。您可以通过 public IP 地址连接到堡垒服务器,然后通过其私有 IP 地址连接到私有服务器。为此,请将私有实例上的安全组配置为允许来自 VPC IP 范围的入站流量,或来自与 Bastion 服务器关联的安全组的入站流量