5

我正在尝试确保客户端和我的后端服务器之间的完整 e2e 连接。这就是我当前的基础架构的样子:

  1. Fargate 集群,我的后端应用程序放置在私有子网中。
  2. 它们前面是内部网络负载均衡器,它也不暴露给外界。
  3. REST API Gateway 与我的内部 NLB 的 VPC 链接集成。

目前,我的 NLB 在端口 443 上使用 TLS 侦听器并附加了证书,但正在终止 TLS 并通过端口 80 上的 TCP 与目标组进行通信。我的计划是也在我的 Fargate 节点上配置 TLS 和证书。目前我缺乏对以下设置如何工作的理解。是要将加密流量从我的客户端发送到后端应用程序,还是在 NLB 执行解密并在将流量发送到 Fargate 节点之前再加密一次?

我已经了解到阅读许多博客,可以使用 NLB 实现直通行为,而无需解密/加密 NLB 上的流量,但没有找到任何示例,AWS 文档也不清楚这个主题。

是否可以将证书仅应用于我的后端应用程序并仅在那里进行解密?我的理解是,我可能看起来类似于以下内容:

  1. 在我的 Fargate 应用端配置的证书和 TLS
  2. NLB 在端口 443 上具有 TCP 侦听器,没有在 NLB 级别应用证书。因此 NLB 只会将加密流量从我的客户端传递到后端。

有没有人尝试过建立类似的基础设施并且对如何配置有一些了解?

问候。

4

1 回答 1

0

我相信你的假设是正确的,Jarek。您还需要在 443 和 TCP TargetGroup 上创建一个带有 TCP 侦听器的 NLB。您部署的 ECS 容器(Fargate 或其他)将是接收 TLS 请求、执行握手协商等的容器。如果您将在端口 443 上,您的 NLB 侦听器实际上是一个 TCP 通道,并且 ECS 容器执行实际的 TLC工作。对于 ECS 容器,您可能希望使用 SecretsManager 来存储您的证书、密钥和链。

如果您还需要客户端证书验证 (mTLS),您还需要存储客户端证书验证可能需要的任何其他链。

执行此 NLB 设置的缺点是您失去了 NLB TLS 侦听器的一些功能,例如它可以强制执行的 TLS 协议限制。您可以自己在 ECS 容器上执行此操作,但容器确实变得更加复杂。

需要注意的一个警告是 TargetGroup 可以执行的“保留客户端 IP”功能会破坏您的目标组。还没有想办法解决这个问题。到目前为止,还无法使用此设置进行此操作。

此外,我怀疑有一种方法可以创建一个与启用了 TLS 的 ECS 容器的 TLS TargetGroup 匹配的 TLS 侦听器,但对我来说,这似乎是多余的并且难以正确配置,因为解密会在 NLB 发生,然后它会重新加密TLS 目标组和 ECS 容器。如果有的话,我不确定它是如何工作的。我的理解是 AWS ELBv2 ALB 和 NLB 没有验证它们背后的任何 TLS 证书(需要参考)。不过,我个人还无法正常工作。

于 2021-12-08T16:00:15.533 回答