我有两个 VPC:A 和 B。
我希望 A 中的任何节点都能够打开与 B 中任何节点的 TCP 连接,但反过来不行。B 中的任何节点还必须能够打开与公共互联网主机的传出连接。实现此目标的最佳方法是什么?
使用案例:VPC A 包含许多敏感的内部服务,而 VPC B 包含运行完全不受信任的代码的节点。VPC A 需要向 VPC B 发出 HTTP 请求,但不必公开任何内部服务。
VPC 对等连接允许 A 和 B 中的任意节点之间建立直接连接 - 这无法在路由级别进行限制。安全组可用于阻止传出连接,但由于没有 DENY 规则,因此配置起来略显棘手。
网络 ACL 在这里没有用,因为必须允许返回流量从 B -> A 返回。
还有其他选择吗?像 NAT 网关这样的东西,只允许在一个方向上打开连接?AWS 确实支持私有 NAT 网关,但我找不到任何有关此类配置的文档。
答案1
我没有详细阅读您的回答,但似乎有点不对。我完全不知道您为什么要使用 NAT 网关,它们纯粹是为了允许私有子网中的实例访问互联网。
这里的关键是单向通信,这强烈暗示安全组是答案。我的解决方案(不用想太多)是:
- 两个 VPC 之间的 VPC 对等连接,不同的 CIDR 范围
- 两个 VPC 中的路由表可用于实现通信
- VPC A 中的安全组允许流向 VPC B CIDR 范围的传出流量,但不允许传入流量。这将允许传出流量和返回流量,但不允许在 VPC A 中发起的流量
- VPC B 中的安全组允许来自 VPC A CIDR 的传入流量,但不允许传出。这允许流量进入并返回,但不允许从 A 发起的流量到达 B
- VPC B 中的互联网网关。如果您不需要互联网来访问 VPC B,那么您可以使用 VPC B 中的 NAT 网关。
答案2
这似乎可以通过在专用子网中添加私有 NAT 网关来实现。
这个设置似乎有效:
VPC A: 10.1.0.0/16
Subnet A1: 10.1.1.0/24. Main subnet containing the nodes in A.
Subnet A2: 10.1.2.0/24. Dedicated subnet for NAT gateway.
VPC B: 10.2.0.0/16
Subnet B1: 10.2.3.0/24: Main subnet containing the nodes in B.
Private NAT gateway in subnet A2. (nat-1)
VPC peering between VPC A and B. (pcx-1)
Route table for A1:
10.1.0.0/16 (A): local
10.2.3.0/24 (B1): nat-1
Route table for A2:
10.1.0.0/16 (A): local
10.2.3.0/24 (B1): pcx-1
Route table for B1:
10.2.0.0/16 (B): local
10.1.2.0/24 (A2): pcx-1
由于 A1 和 B1 之间没有直接路由,所有流量都必须通过 NAT 网关。而且 NAT 网关仅允许来自同一 VPC 的传入连接,因此 B1 中的节点无法打开与 A1 中节点的连接。
安全组和网络 ACL 可用作此处的额外安全层,并且通过这种子网划分,配置会相当简单。但这也会是多余的,因为没有从 B1 到 A1 的路由。