【问题标题】:Forward from AWS ELB to insecure port on the EC2 instance从 AWS ELB 转发到 EC2 实例上的不安全端口
【发布时间】:2018-01-20 12:14:15
【问题描述】:

我担心这可能是一个编程问题,但我也希望它足够普遍,您可能会提出一些建议。

我正在迁移到使用 AWS 弹性负载均衡器将流量定向到 EC2 实例的故障转移环境。目前,我已经在 ELB 后面设置了一个 EC2 实例。你马上就会明白为什么。尽管它使用此 ELB -> EC2 路径向我的客户提供内容,但它仍处于测试模式。

在我的每个生产环境(我有两个)中,我在负载均衡器上都有一个 AWS 证书,在 EC2 实例上有一个私人获取的安全证书。负载均衡器侦听器配置为将在端口 443 上接收到的流量发送到 EC2 实例上的安全端口 (443)。这是有效的;但是,当我在负载均衡器后面扩展到更多 EC2 实例时,我必须为每个 EC2 实例购买一个安全证书。

根据向我提出的建议,我设置了一个测试环境,其中包含一个新的负载均衡器及其配置的 EC2 服务器。此 ELB 服务器将在其端口 443 上接收到的消息发送到 EC2 系统上的端口 80。有人告诉我这是应该做的方式 - 将加密/解密限制在负载均衡器上,并在负载均衡器与其实例之间使用未加密的通信。

最后,这是我的问题。此应用程序提供的 HTML 页面使用对每个页面中嵌入脚本和其他工件的相对引用。当请求到达 EC2 实例(应用程序服务器)时,它已被降级为 HTTP,无论它最初是什么。这意味着对这些嵌入式工件的引用被呈现为不安全 (HTTP)。因为原始页面引用是安全的 (HTTPS),所以浏览器拒绝加载这些不安全的资源。

我已经在应用程序中使用标头 X-Forwarded-Proto 来确定负载平衡器上的原始请求是 HTTP 还是 HTTPS。我希望 EC2 实例中有一些参数告诉它根据收到的 X-Forwarded-Proto 标头呈现相对引用。除此之外,您对其他人如何解决此问题有任何想法吗?

感谢您的时间和考虑。

【问题讨论】:

  • 为什么必须为每个 EC2 实例购买安全证书?

标签: security amazon-ec2 elastic-load-balancer


【解决方案1】:

首先,正确的做法是在 ELB/ALB 上终止 SSL,然后将一个安全组分配给仅接受来自 ELB/ALB 的流量的 EC2。

但是基于 X-Forwarded-Proto 请求标头或基于自定义配置的 https url 响应需要在您的应用程序代码或网络服务器中处理。

【讨论】:

    猜你喜欢
    • 2020-08-05
    • 2020-06-17
    • 2018-03-15
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 2015-05-23
    相关资源
    最近更新 更多