要求 Amazon Web Services ELB 遵守我的 TLS 连接

要求 Amazon Web Services ELB 遵守我的 TLS 连接

我对 AWS 堆栈中的 ELB 还很陌生,并且有一个要求,即在两个 EC2 实例上运行的两个组件通过 TLS 进行通信,并且来自组件 1 的任何传入会话都需要由组件 2 进行 TLS 级别的身份验证。

基本上,我的组件 2 将在 SSL 握手级别打开传入请求的证书,使用 EKU/OID 决定其来自某个可靠来源,然后允许握手成功。

现在,这两个组件需要位于 ELB 后面,以确保其可扩展性。在查看 ELB 的一些资源时,我发现 ELB 会终止 TLS,然后可能会使用全新的证书,ELB 可以将请求传递给 ELB 后面的实例。

首先,这种理解是否正确。理想情况下,我需要 TLS 最初应该传递到 ELB 后面的机器,这样我的身份验证逻辑就不会中断。其次,如果没有办法做到这一点,我可以在 ELB 级别进行身份验证吗?为此,需要进行数据库查找,并可能需要一个小型 Java 程序来打开证书、验证详细信息,然后丢弃或传递消息。

不确定我的问题是否清楚,请发表评论,但任何答案或指点都会有所帮助。

—阿努拉格

答案1

您可以尝试使用TCP/SSL 负载均衡器。它工作在 TCP 层(第 4 层),而不是监听 http/https 的应用层(第 7 层)。代理协议也可能有帮助。

我认为,使用 SSL 和 HTTPS 负载均衡器时,ELB 都会终止 TCP 连接并启动从 ELB 到后端服务的另一个连接。您可以考虑其他负载均衡解决方案。ELB 是托管的 HAProxy,您可以使用您喜欢的任何负载均衡器运行 EC2 实例,并将其放入大小为 1 的自动扩展组中,这样如果失败,它就会自动恢复。

Route 53 加权资源集可能是解决此问题的另一种方法。基本上,客户端会根据您指定的权重路由到服务器。您只需在同一集合中创建一堆指向不同 EC2 实例的记录。它实际上并不是那么可扩展,而且是手动的,所以它实际上也不是一个很好的解决方案。

最好的选择可能是垂直扩展(即获取更大的实例)并且不必担心负载平衡器。如果所有服务器都终止 TCP 和身份验证,它应该可以处理大量流量。或者,您可以重新考虑如何进行身份验证。

更新 根据 Michael 在评论中所说,我又读了一些。我认为他很可能是对的,TCP 负载均衡器(非 SSL)很可能是无需改变的直通连接,就像路由器一样。

我建议垂直扩展,因为您可能会发现,只要满足容量和可靠性要求,高达 m4.16XL 的任何东西都足够了。部署单个服务器比部署负载均衡器和多个服务器更容易,而且可以节省 ELB 的成本。不过,它的可靠性可能会降低。

相关内容