我正在尝试将运行在一个 EC2 实例上的应用程序连接到运行在另一个 EC2 实例上的 MongoDB。我确信问题出在安全设置上,但我不太清楚如何处理。
首先,我的应用实例位于 ELB 后面的自动扩展组中。实例和 ELB 的入站安全设置允许从任何地方访问端口 80,以及来自其自身安全组的所有流量。
如果运行 Mongo 的 EC2 实例的安全组接受来自任何地方的所有入站流量,则该实例能够建立连接。我尝试过的任何其他配置都会导致应用程序提示无法与远程地址建立连接。我已设置规则以接受来自我拥有的所有安全组的入站流量,但只有当我允许来自任何地方的所有流量时,它似乎才有效。
另外,我的数据库实例设置了弹性 IP。我是否也应该将此实例置于 ELB 后面?
我的问题是:
1)如何安全地连接到运行 mongo 的 EC2 实例?
2)从架构方面来看,以这种方式运行我的数据库是否有意义,或者我也应该将其置于负载均衡器后面?
这个问题比我想象的要困扰我很多,因此我将不胜感激任何帮助。
笔记
我还设置bind_ip=0.0.0.0
了/etc/mongo.conf
答案1
您的问题是,您正在使用公共弹性 IP 从其他服务器连接到数据库服务器。这意味着连接将传出到互联网并返回到您的 VPC,这会带来以下问题:
- 由于数据传输不包含在 VPC 内而导致的安全问题
- 网络延迟问题
- 您的数据库服务器的安全组无法识别入站连接的安全组
删除 MongoDB 服务器上的弹性 IP,除非您计划从 VPC 外部连接到它,否则没有必要使用它。修改您的服务器以在创建与数据库服务器的连接时使用分配给它的私有内部 IP 地址。最后,锁定您的安全组以仅允许从其他安全组访问数据库。
可选:在 Route53 中创建一个私有托管区域,其中 A 记录指向数据库服务器的私有 IP 地址,然后使用该主机名而不是内部 IP 地址。