我有一个带有mongodb的ec2实例(称为ec2-mongo)和安全组sg-mongodb-server。我试图通过另一个ec2实例(称为ec2-connect)与安全组sg-connect连接到mongodb。我想设置规则以允许两个安全组之间的流量,而无需引用特定的IP地址。我怎么能这样做?
当我的安全组设置如下时,我可以连接到mongo(因此据我所知,服务器没有任何问题)。出站设置为全部:
SG-mongodb的服务器:
Inbound:
Port Source
22 my_ip
27017 ip_of_ec2-connect
SG-连接:
Inbound:
Port Source
22 my_ip
27017 ip_of_ec2-mongo
但是当我尝试使用安全组而不是IP地址时,我无法连接到mongodb。
SG-mongodb的服务器:
Inbound:
Port Source
22 my_ip
27017 sg-connect
SG-连接:
Inbound:
Port Source
22 my_ip
27017 sg-mongodb-server
尝试连接时出现错误消息:
MongoDB shell version: 3.2.3
connecting to: XXX.XXX.XXX.XXX/test
2016-02-19T18:24:09.245+0000 W NETWORK [thread1] Failed to connect to XXX.XXX.XXX.XXX:27017 after 5000 milliseconds, giving up.
2016-02-19T18:24:09.245+0000 E QUERY [thread1] Error: couldn't connect to server XXX.XXX.XXX.XXX:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:226:14
@(connect):1:6
exception: connect failed
答案 0 :(得分:4)
为了使安全组引用有效,您需要通过MongoDB服务器的私有 IP地址从EC2实例连接到MongoDB,而不是它的公共IP地址。
如果您正在使用公共IP地址(或DNS名称正在解析为公共IP地址),则连接将离开您的VPC并重新进入,从而看起来来自外部世界。
通过使用私有IP地址,它可以告诉它来自您的安全组。