AWS实例仅允许来自负载均衡器的流量

17
我有一个负载均衡器和自动扩展组。负载均衡器将流量发送到我的自动扩展组。我有两个实例:Instance 7000(它正在侦听端口7000,并且是自动扩展组的一部分,从负载均衡器获取其流量)和 Instance 8545(它正在侦听端口8545,并且只是一个单独的实例,不是负载均衡器或自动扩展组的一部分)。
我有一个负载均衡器安全组(“LB-SG”)和 Instance 8545 的安全组(“App-SG”)。我希望 Instance 8545 只允许来自负载均衡器/自动扩展组的实例的流量。因此,我在端口8545上将“LB-SG”作为“App-SG”的入站规则包含进去,但它没有起作用。但是,如果我在“LB-SG”中仅将端口8545上的 Instance 7000 的IP地址作为入站规则包含进去,那么它完美地工作。但这并不能解决我的问题,因为如果自动扩展组添加更多实例或IP地址发生更改,则它将无法正常工作。
编辑:为了更明确,重新措辞。
2个回答

36

您的要求有点不清楚,以下是一般用法:

如果您希望实例接受来自负载均衡器的流量,则:

  • 为您的负载均衡器创建安全组(“LB-SG”)
  • 为您的实例创建安全组(“App-SG”)
  • 在 App-SG 中,允许来自 LB-SG 的所需端口的入站流量

也就是说,App-SG 规则特别通过其唯一名称(sg-abcd1234)引用 LB-SG。

结果:每个与 App-SG 关联的实例都将允许来自负载均衡器的入站流量。

同样,如果您想让特定实例(Instance-A)接受另一个实例(Instance-B)的流量,请为每个实例创建不同的安全组,并添加一个规则到 Instance-A 安全组,以允许从 Instance-B 安全组的给定端口进入的入站流量。

无需使用 IP 地址。


我有一个负载均衡器,将人们引导到我的目标组,该组正在侦听端口7000(这是我的前端所在的位置)。我正在使用以太坊作为后端,因此我将其放在端口8545上,并且需要连接到该端口。现在我有两个实例:Instance 7000(用于端口7000)和Instance 8545(端口8545)。我有一个负载均衡器安全组(“LB-SG”)和一个Instance 8545的安全组(“App-SG”)。Instance 7000具有“LB-SG”,而Instance 8545具有“App-SG”,允许“LB-SG”。对于Instance 7000可以工作,但对于Instance 8545无法工作。 - connorvo
LB-SG仅用于负载均衡器,不应与实例关联。当人们连接到负载均衡器时,它将向目标组发送流量。您希望负载均衡器如何知道是否将它们发送到端口7000或8545端口?或者负载均衡器仅使用7000端口,您希望允许直接访问8545端口?您的配置仍然非常混乱。请随意编辑您的问题以更清楚地解释。 - John Rotenstein
我知道如何使用这个解决方案,也许理解AWS为什么要这样做。虽然它能够运行,但每次需要使用时,我仍然很难理解其中的逻辑。很难理解它是如何工作的。 - Tuaris
@Tuaris 把它看作是每个资源周围的安全栅栏。安全组确定什么可以进入和出去。它还可以很聪明,比如“允许来自_那个_安全组的流量进入_这个_安全组”。 - John Rotenstein
嘿!我是AWS的新手...这是在私有VPC子网中验证微服务的安全方式吗?我做了一些研究,看起来JWT或SSL握手是通常的方法,但这似乎应该是安全的。 - Jack
显示剩余2条评论

8

第二次尝试...

您应该创建三个安全组:

  • LB-SG 用于负载均衡器
    • 允许入站80/443
  • App-SG 用于自动扩展组中的实例
    • 允许从LB-SG入站7000
  • Extra-SG 用于8545实例(我不知道该如何称呼它!)
    • 允许从App-SG入站8545

再次强调,没有必要引用特定的IP地址。

附注:您说“允许来自负载均衡器/自动扩展组中的实例的流量”——实例在自动扩展组中,但负载均衡器中没有实例。因此,我假设8545实例仅从App-SG(7000)实例接收流量。

更新:确保实例通过私有IP地址通信。


我认为这与负载均衡器有关,因为如果我允许来自任何地方的流量(或只是输入IP地址),它就可以正常工作。使用安全组允许来自负载均衡器的入站流量并不起作用。 - connorvo
我有点困惑。您是希望负载均衡器将流量发送到7000端口的自动扩展组实例 8545端口的额外实例吗?它们是否提供相同的流量服务? - John Rotenstein
不,你最初的想法是正确的。负载均衡器只应该为7000端口上的实例进行负载均衡,因为那是唯一一个会有多个实例(因为它们是自动扩展组的一部分)的端口。8545端口上的实例永远只有一个实例(没有扩展或负载均衡)。我只需要作为自动扩展组的一部分创建的实例(全部都在7000端口上)能够连接到8545端口上的单个实例。 - connorvo
那么您的意思是,只要Extra-SG接受来自0.0.0.0/0的8545端口而不是App-SG,上述答案中的三个SG就可以正常工作?并且所有其他端口默认都被拒绝?为了测试目的,如果您将现有的自动扩展EC2实例的IP地址输入到Extra-SG的源中,而不是App-SG,这样行得通吗? - John Rotenstein
1
在这种情况下,使用 App-SG 的 sg-xxxx 应该可以正常工作。确保您通过其私有 IP 地址而不是公共 IP 地址访问 instance8545。 - John Rotenstein
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接