为什么需要在AWS EC2安全组中打开MongoDB端口27017?

问题描述 投票:-1回答:1

(我搜索过SO,AWS支持,但没有成功。)

我刚刚在Ahmed Haque's excellent tutorial on scotch.io上成功地将一个MEANjs应用程序部署到EC2上的Bitnami MEAN实例。作为教程/部署的一部分,我将AWS安全组更改为包含MongoDB流量的端口27017。端口27017的CIDR表示法是0.0.0.0/0 - AFAIK表示“允许从任何IP地址访问”。

问题:为什么需要在AWS EC2安全组中为“生产”类型环境打开MongoDB端口27017?当然,这直接将数据库暴露给互联网。应该与Mongo交谈的唯一事情是“/ server / api”代码,它运行在同一个实例上 - 因此不需要端口打开。

如果我通过关闭27017更改端口27017的安全组规则,将源更改为:localhost,内部IP地址,公共IP地址或攻击CIDR等同于任何这些 - 然后Web应用程序挂起(静态内容返回但没有对db支持的api调用的响应)。将SG规则更改回0.0.0.0/0几乎立即“修复”挂起。

我安装的所有东西都很甜。我已关闭安全组中的端口3000(节点应用程序),并使用Apache将端口80流量代理到端口3000.如此设置,端口3000不需要在安全组中打开;对我而言,这意味着实例流量不需要外部暴露端口 - 那么Mongo端口怎么回事呢?

我无法在'/ client'代码中看到与Mongo直接对话的任何内容。

我错过了什么?

提前谢谢 - 约翰

mongodb amazon-ec2 meanjs bitnami
1个回答
0
投票

好的,经过进一步的调查和一夜之间/红葡萄酒的反思,我想我可以按照上面的教程(或类似的)为我这样的学习者提供答案。遵循敏捷原则,'完成'意味着'在生产环境中工作代码'我试图理解最后5米作为开发人员试图让代码在代表性的生产环境中工作(不会打开不必要的端口) - 这个答案是从这个角度写的。 (建立更好的读者欢迎。)

发生了什么

本教程中的步骤(a)将Mongo绑定IP地址从127.0.0.1更改为0.0.0.0,(b)指定使用同一实例的外部IP地址的连接URL,似乎有两个效果:

  1. 它使您正在配置的实例上的MongoDB可能对其他实例可用(0.0.0.0告诉Mongo“侦听所有可用的网络接口”。)
  2. 这意味着来自同一实例上的MEAN app / server组件的IP流量将与Mongo通信,就好像它来自off-instance(即使它位于同一个实例上)。因此,安全组需要打开端口27017以允许此流量流动。 (就MEANjs堆栈组件交互而言,这是问题的核心。)

固定

  • 在单个实例MEANjs服务器上,如果将Mongo绑定IP地址更改回127.0.0.1并将Mongo连接URL更改为127.0.0.1:27017,则可以关闭EC2安全组中的端口27017,该应用程序仍然有效。
  • 在多个MEANjs应用服务器上共享一个MongoDB(不想误入serverfault区域): 将Mongo绑定IP地址更改为0.0.0.0, 在其他应用程序/实例连接字符串中使用Mongo服务器的专用IP地址 添加private IP address/24, or private IP address/16的EC2安全组CIDR规则,以允许跨指定的内部IP地址范围内的实例进行访问。

以上是开发人员'黑客',而不是良好做法的建议。

© www.soinside.com 2019 - 2024. All rights reserved.