【问题标题】:Preventing HTTP access to the servers of Amazon's Elastic Beanstalk阻止对 Amazon 的 Elastic Beanstalk 的服务器的 HTTP 访问
【发布时间】:2016-11-11 04:14:03
【问题描述】:

我们有一个系统在亚马逊的 Beanstalk 上运行。 我们希望将对服务器的访问限制为仅 HTTPS。 在环境设置上阻止 HTTP 时 - 它阻止通过 beanstalk DNS 访问。 但是,如果有人知道任何服务器的公共 IP(或名称) - 他可以直接通过 HTTP 访问它们。好像是LB把请求转发到了80端口,所以我们不能更改安全组,去掉80端口。 有没有一种简单的方法可以将 HTTP 访问限制为仅来自 LB? 谢谢

【问题讨论】:

    标签: amazon-elastic-beanstalk


    【解决方案1】:

    您应该可以通过 EC2 Security Groups 执行此操作,这是 Elastic Beanstalk 环境属性。

    默认情况下,这允许从任何 IP 地址连接到端口 80,但您可以删除该规则或将其替换为您自己的 IP 地址(用于测试目的)。

    否则,您可以在应用程序级别将所有 HTTP 流量重新路由到 HTTPS,或者只是测试 CGI 属性 *server_port_secure* 并拒绝回答。

    【讨论】:

    • Amazon 正在使用 CloudWatch 通过 HTTP 监控服务器。如果监控失败 - 服务器被终止并启动一个新的。 Amazon 不提供 CloudWatch 请求来自的 IP 范围,这意味着我们不能将安全组设置为仅包含 CloudWatch。我们需要提供对任何 IP 的访问,这是我们试图阻止的。服务器本身不处理 HTTPS(由 LB 处理),因此将所有流量路由到 HTTPS 将创建一个循环,在该循环中,服务器将 HTTPS 请求作为 HTTP 转发给服务器,服务器将它们发送回来。
    • 根据我的经验,如果健康检查从未通过,它不会终止任何服务器实例以尝试使其再次运行,但这似乎没有记录在案。或者,您可以使用字符串 HTTPS:443 和 TCP:80 作为健康检查地址,让 HTTPS 或普通 TCP 工作。
    【解决方案2】:

    是的,您需要打开 http/80 才能进行运行状况检查。您可以选择将所有其他请求(运行状况检查 URL 除外)重定向到使用 https - 这样虽然端口是打开的,但您“不会以不安全的方式提供任何数据”。

    【讨论】:

      【解决方案3】:

      您至少有两个选择:

      1 - 设置仅允许从负载均衡器访问端口 80 的安全组策略。重要的!!!不要在实例的安全组中使用负载均衡器 IP。请改用负载均衡器安全组 ID。

      2 - 从实例中删除公共 IP。如果您的所有 EC2 实例都有私有 IP,而 ELB 有公共 IP,那么您应该很好。

      【讨论】:

        猜你喜欢
        • 2015-10-10
        • 2013-06-17
        • 1970-01-01
        • 2016-09-12
        • 2013-10-31
        • 2015-10-22
        • 2017-05-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多