我有一个EC2节点,node1(安全组SG1),它应该可以从端口9200上的另一个EC2节点node2(安全组SG2)访问。现在,当我在SG1中添加一个带有端口9200的入站规则并指定SG2时作为自定义IP部分中的源,我无法从node2访问node1。另一方面,如果我在SG1中指定入站规则,其源为0.0.0.0/0或节点2的IP,则可以正常工作。我的做法有什么问题?
答案 0 :(得分:39)
您是否尝试连接到node1的公共或私人地址?来自documentation:
指定安全组作为a的源或目标时 规则,该规则影响与安全性相关的所有实例 组。例如,允许基于私有的传入流量 与源关联的实例的IP地址 安全组。
我之前因为试图连接到EC2实例的公共地址而被烧毁......实际上听起来与你的设置非常相似。当您连接入站规则以使源是安全组时,您必须通过源实例的私有地址进行通信。
有些事情需要注意:
答案 1 :(得分:16)
原因: Inter安全组通信适用于私有寻址。如果使用公共IP地址,防火墙规则将无法识别源安全组。
解决方案:您应该使用公共DNS记录来解决您的实例 - 当您的某个实例查询DNS名称时,这实际上会指向私有IP地址。
e.g。如果您的实例具有公共IP 203.0.113.185
和私有IP 10.1.234.12
,则会为您提供公共DNS名称,如ec2-203-0-113-185.eu-west-1.compute.amazonaws.com
。
ec2-203-0-113-185.eu-west-1.compute.amazonaws.com
将解析为203.0.113.185
,如果在内部查询,则10.1.234.12
将解析为{{1}}。这将使您的安全组能够按预期工作。
这样您就可以使用弹性IP,因为您只需使用弹性IP的公共DNS条目。另外,having the DNS resolve to the internal IP means that you are not incurring bandwidth charges for your data between instances:
通过其公共NAT IP访问其他实例的实例 地址是根据区域或互联网数据传输收取的 关于实例是否在同一地区。
答案 2 :(得分:-1)
公共DNS对我不起作用。 我所做的是使用另一个实例的安全组创建自定义入站规则。