题 在同一EC2安全组内进行通信


我有几个实例在同一个安全组(Say:Group-A)中运行,需要相互通信,特别是端口4369。

每个实例都有不同的弹性IP。

安全组配置为允许通过TCP的入站流量:4369 Soruce:sg-XXXXX(Group-A)

但是,实例只能通过内部IP(10.xxx.xxx.xx)或亚马逊公共DNS相互通信:ec2-ELASTIC-IP.compute-1.amazonaws.com(显然亚马逊会将此转换为内部IP) 。

如果我使用弹性IP,它将无法正常工作。如果我使用自己指向弹性IP的FQDN,它将无法工作。

如果我将入站规则中的源从sg-XXXXX(Group-A)更改为0.0.0.0,则它可以使用我自己的FQDN和弹性IP。但我们不会将此用于安全问题。 如果我删除入站规则,则无效,甚至使用内部IP。

那么,如果我想使用自己的FQDN,该怎么办? (worker-1.company.com - >弹性IP),更易读,更易于管理。


6
2017-12-18 23:45






答案:


您描述的行为是正常的,因为当通过弹性IP在实例之间进行通信时,安全组内的计算机的身份 - 出于依赖于sg-xxxxxxxx源的安全组配置 - 无法真正建立完整信心,因为翻译地址会通过中间硬件发送流量(大概),流量不再被视为起源  来自实例。

解决方案是在DNS中使用指向公共DNS记录的CNAME记录命名主机,而不是指向特定IP地址的A记录。

在company.com DNS区域:

worker-1   IN  CNAME  xx-xx-xx-xx.compute-1.amazonaws.com.

现在,如果从内部查询,worker-1.company.com将解析为私有IP,从外部查询公共IP。


6
2017-12-19 12:56



当使用--private-ip-address启动实例时,ip保持不变,并且在所有区域中的所有实例(以及区域,如果您设置了它)中看起来是这样的 - nandoP
这正是我想要的。谢谢! - Nehal J Wani


它并不完美,但您可以将FQDN中的显式映射添加到每个实例的hosts文件中的私有IP。因此,您的代码将使用FQDN,但网络实际上将使用私有通信(无论如何更安全)。

如果您有一组相对固定的小实例,这是一个合理的选择。如果可能,您应该自动执行此过程。

您还可以使用Route 53,亚马逊的DNS作为服务。将您的FQDN映射到实例的公共DNS名称。在EC2内部,这将映射到私有IP。您仍然需要使用route 53 API自动执行此操作。


0
2017-12-19 07:42



我不认为OP试图将公共DNS名称欺骗私有实例IP,....这对于/ etc / hosts来说是一个很好的技巧,但我认为这里不相关 - nandoP