使用 Fargate + ACM + ALB 构建安全的 HTTPs Web 服务器

Building a secure HTTPs web server with Fargate + ACM + ALB

我正在尝试进行最简单的部署以在 Fargate 中启动和 运行ning https Web 服务器。

我已经使用 Amazon Certificate Manager 创建了 public certificate

我有一个应用程序负载均衡器在两个端口上与 Fargate 容器通信: 80 对于 http 和 443 用于 https

这就是问题所在:当我 运行 我的网络服务器在端口 80 (http) 上并通过 ALB 连接时,它工作正常(不安全,但它提供 html)。

当我 运行 我的网络服务器在端口 443 上启用了 TLS 时,它不通过 ALB 连接。

另一点是,当 运行在端口 443 上启用 TLS 连接我的网络服务器时,我没有证书或证书密钥,所以我很困惑如何从 Amazon 获得它。

我的另一个问题是:我说 ELB 将通过 HTTPS 与客户端通信但 ELB 可以通过 HTTP 与容器通信是否有意义?这安全吗?

感谢您的帮助,我的网络知识很生疏。

does it make sense for me to say that the ELB will communicate with the client over HTTPS but that the ELB can communicate with the container via HTTP?

是的。您应该确保您的 Web 服务器在端口 80 上接受来自 ALB 的流量。这是在应用程序级别、在 Web 服务器上和您的目标组完成的,ALB 将使用该目标组来确定它如何将流量路由到你的网络服务器。这是它通常的工作方式:

client --(443)--> ALB --(80)--> web server

一些要检查的东西:

  • 目标组配置为将流量发送到端口 80 上的 FG Web 服务器
  • 目标组健康检查配置为检查端口 80
  • FG 任务安全组在端口 80 上有来自 ALB 的入口
  • Web 服务器配置为侦听端口 80

旁注:您可以将目标组配置为在 443 上将流量发送到目标(Fargate 中的 Web 服务器),但正如您所说,如果容器中没有正确的证书设置,您将无法正确终止 SSL,它就是行不通。您需要将自己的证书上传到 ACM 才能正常工作,这会让您陷入安全漏洞,即如何避免将您的私钥烘焙到您的 Docker 图像中。