AWS,NodeJS - 在另一个EC2实例上将应用程序连接到Mongodb

时间:2015-11-18 19:28:29

标签: node.js mongodb security amazon-web-services amazon-ec2

我正在尝试将在一个EC2实例上运行的应用程序连接到另一个EC2实例上运行的MongoDB。我很确定问题出在安全设置中,但我不太清楚如何处理。

首先,我的应用程序实例位于一个位于ELB后面的自动缩放组中。实例和ELB的入站安全设置允许从任何地方访问端口80,以及来自其自己的安全组的所有流量。

如果该实例的安全组接受来自任何地方的所有入站流量,则运行Mongo的EC2实例能够建立连接。我尝试过的任何其他配置都会导致应用程序无法与远程地址建立连接。我已设置规则来接受来自我所拥有的所有安全组的入站流量,但只有当我允许来自任何地方的所有流量时它才会起作用。

此外,我的数据库实例设置了弹性IP。我也应该在ELB背后有这个实例吗?

所以我的问题是这些:

1)如何安全地连接到运行mongo的EC2实例?

2)在体系结构方面,以这种方式运行我的数据库是否有意义,或者我是否应该在负载均衡器后面使用它?

这个问题比我想象的要多得多,所以任何帮助都会受到赞赏。

注意

我还在bind_ip=0.0.0.0

中设置了/etc/mongo.conf

1 个答案:

答案 0 :(得分:2)

您的问题是您使用公共弹性IP从其他服务器连接到数据库服务器。这意味着连接将进入互联网并返回到您的VPC,这会出现以下问题:

  1. 由于数据传输未包含在您的VPC中而导致的安全问题
  2. 网络延迟问题
  3. 您的数据库服务器的安全组无法识别入站连接的安全组
  4. 摆脱MongoDB服务器上的弹性IP,除非您打算从VPC外部连接到它,否则不需要它。修改服务器以在创建与数据库服务器的连接时使用分配给数据库服务器的专用内部IP地址。最后,将安全组锁定为仅允许从其他安全组访问数据库。

    可选:在Route53中创建一个私有托管区域,A记录指向数据库服务器的专用IP地址,然后使用该主机名而不是内部IP地址。