AWS ec2实例之间连接mongodb时如何配置安全组?

Dav*_*d C 0 security amazon-ec2 mongodb amazon-web-services

我有一个带有 mongodb(称为 ec2-mongo)的 ec2 实例,其安全组为 sg-mongodb-server。我正在尝试通过另一个具有安全组 sg-connect 的 ec2 实例(称为 ec2-connect)连接到 mongodb。我想设置规则以允许两个安全组之间的流量,而无需参考特定的 IP 地址。我怎样才能做到这一点?

当我的安全组设置如下时,我可以连接到 mongo(所以据我所知,服务器没有任何问题)。出站设置为所有:

sg-mongodb-服务器

Inbound:
Port    Source
22      my_ip
27017   ip_of_ec2-connect
Run Code Online (Sandbox Code Playgroud)

SG连接

Inbound:
Port    Source
22      my_ip
27017   ip_of_ec2-mongo
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用安全组而不是 IP 地址时,我无法连接到 mongodb。

sg-mongodb-服务器

Inbound:
Port    Source
22      my_ip
27017   sg-connect
Run Code Online (Sandbox Code Playgroud)

SG连接

Inbound:
Port    Source
22      my_ip
27017   sg-mongodb-server
Run Code Online (Sandbox Code Playgroud)

尝试连接时的错误消息:

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
Run Code Online (Sandbox Code Playgroud)

Mat*_*ser 6

为了使安全组引用起作用,您需要通过 MongoDB 服务器的私有IP 地址而不是公共 IP 地址从 EC2 实例连接到您的 MongoDB 。

如果您使用的是公网IP地址(或DNS名称解析为公网IP地址),那么连接会离开您的VPC并重新进入,因此看起来来自外部世界。

通过使用私有 IP 地址,它可以判断它来自您的安全组。