我应该如何限制我的 Elastic Beanstalk 环境的负载平衡 Web 流量?

Posted

技术标签:

【中文标题】我应该如何限制我的 Elastic Beanstalk 环境的负载平衡 Web 流量?【英文标题】:How should I restrict load balanced Web traffic to my Elastic Beanstalk environments? 【发布时间】:2015-04-12 03:15:00 【问题描述】:

我正在尝试配置对我的 EB 环境的访问,并希望将 HTTP 访问(通过 ELB)限制为某些 IP 地址。

我有一个开箱即用的 EB 应用程序(实际上是一堆,每个都有几个环境),并且希望能够 (a) 限制对特定 IP 集的访问,同时 (b) 让所有流量都通过ELB。至关重要的是,我想通过 (c) 创建几个组(例如,允许我的 IP 的管理员 SG,允许团队 IP 的开发 SG,以及允许所有 IP 的公共 SG)并应用组来做到这一点根据每个 EB 环境的需要(通常是不同环境的不同组合),而不必在团队成员的 IP 更改或团队成员更改时更新每个环境中的源。我想在不深入研究网络结构的情况下执行此操作,而只使用默认的 EB 结构。

默认 ELB 安全组允许来自所有 IP 的访问,并且不能被编辑(“修改可能会影响未来 ELB 的流量”),所以我似乎(天真地)可以采取三种方法:

    为 HTTP 创建一个具有受限 IP 源的新安全组,并将其分配给 ELB 而不是默认的 ELB SG。

    为 HTTP 创建一个具有受限 IP 源的新安全组,并将其设置为我环境安全组中的 HTTP 源。

    保留默认 ELB,但在我的 EB 环境的安全组中限制允许的源 IP 范围(而不是将 ELB 的 SG 指定为源)。

但是 (1) 似乎要求我还指定新的 SG,而不是默认的 ELB SG,作为我每个环境中的源,并且 (2) 似乎要求我将新的 SG 分配给环境的电子负载均衡器;虽然在 (3) whether traffic goes through or is filtered by the ELB at all 中不清楚。

对于我的目的(至少在理论上)来说,理想的解决方案是使用少量安全组来控制 Web 访问(例如,一个用于将特定 IP 列为来源的管理员用户,另一个用于列出更广泛范围的测试人员IPs,另一个用于公共访问),并酌情将这些分配给环境(作为其 SG 规则的来源)。但是这种方法(基本上是上面的 2)似乎要求我还将组分配给每个环境的 ELB(即我需要结合 1 和 2)。 (这不会那么尴尬,除非克隆的环境似乎为他们的 SG 提供了always have default rules 并且默认为他们的 ELB 的默认 SG。)

所有这些看起来都太麻烦了,表明我缺少一些更简单的方法。

【问题讨论】:

【参考方案1】:

您需要做的是转到 EC2 安全组并创建您的安全组和访问权限。

设置好这些安全组后,前往您的 Elastic Beanstalk 环境并选择Configuration,然后选择Instances。您将在 Server 部分下看到一个名为 EC2 Security Groups 的字段;以及您之前创建的安全组的名称(逗号分隔)。

注意:保留已定义的安全组。注意:默认安全组允许来自ELB的所有流量

【讨论】:

这是@NickHumrich 在评论中建议的解决方案;但它不起作用。这将继续允许来自所有 IP 的所有流量。唯一似乎可行的事情(在尝试了几乎所有排列之后,但这是我的第一个猜测)是——这是有道理的——替换分配给 ELB 的默认 SG,无论是在 ELB 还是作为 EB 的入站源环境的 SG 规则。再一次,这完全有道理;在我看来,这就像很多步骤,并且没有克隆它有点令人沮丧。 我已经edited the question(来自下面的 cmets)详细说明了我想要实现的目标。再说一遍:我发现我可以用上面评论中描述的方法来完成这个;我现在想知道它是否是复杂的方法(尽管我越适应它,它似乎越容易管理——只要它没有任何错误)。 @raxacoricofallapatorius 你是第一个评论帮助了我很多,谢谢。我将负载均衡器的 SG 上的入站设置更改为仅接受来自我的 VPC 内 SG 的流量,并且它成功阻止了 Ips 外部。【参考方案2】:

听起来您想在 VPC 中启动您的环境,以便 VPC 控制访问。

但是,如果您仍然只想使用安全组:

1,但将其分配给 Beanstalk 环境,而不是 ELB。

您可以告诉 Elastic Beanstalk 环境使用现有的安全组。 EB 仍将创建默认安全组,但它还将使用您创建的安全组。

您可以在控制台中编辑它:环境 -> 配置 -> 实例。 但请确保将您的安全组添加到逗号分隔列表中。不要删除已经存在的那个。

【讨论】:

所以 1 会克隆,但是当我克隆时我仍然会得到默认的 ELB 组,如果我只想要 1 的规则就可以删除它吗? (我认为一切都已经在 VPC 中了。) 是的。克隆将创建另一个默认安全组,并应用您创建的安全组。 而我只保留其他所有内容:ELB 保持其默认值,我不删除 EB 的默认值?我只是将我的 SG添加到 EB 环境中? 这是我要设置的内容:我有一个开箱即用的 EB 应用程序(实际上是一堆,每个都有几个环境)并且希望能够 (a) 限制访问到特定的 IP 集,同时 (b) 让所有流量都通过 ELB。至关重要的是,我想通过 (c) 创建几个组(例如,允许我的 IP 的管理员 SG,允许团队 IP 的开发 SG,以及允许所有 IP 的公共 SG)并应用组来做到这一点根据每个 EB 环境的需要,而不必在团队成员的 IP 更改或团队成员更改时更新每个环境中的源。 理论上应该有效。去试试看是否成功。

以上是关于我应该如何限制我的 Elastic Beanstalk 环境的负载平衡 Web 流量?的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk 在配置菜单中没有负载均衡器设置

AWS Elastic beanstalk:使用 docker 镜像时如何设置 ulimit

AWS Elastic Beanstalk 仅对 API Gateway 开放

将 EC2 安全组限制为 Elastic Beanstalk 实例

使用 AWS Elastic Beanstalk 我应该在哪里存储我的应用程序代码?

限制对 Elastic Beanstalk 的 HTTP 访问