繁体   English   中英

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

[英]Why does MongoDB port 27017 need to be opened in AWS EC2 Security Group?

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

按照Ahmed Haque在scotch.io上的出色教程,我已经成功地将MEANjs应用程序部署到EC2上的Bitnami MEAN实例中。 作为教程/部署的一部分,我更改了AWS安全组以包括用于MongoDB流量的端口27017。 端口27017的CIDR表示法为0.0.0.0/0-AFAIK的意思是“允许从任何IP地址访问”。

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

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

否则我的安装一切都很好。 我已经关闭了安全组中的端口3000(节点应用程序),并且正在使用Apache将端口80的流量代理到端口3000。这样设置,就不需要在安全组中打开端口3000了。 对我来说,这意味着实例上的流量不需要将端口暴露在外部-那么,为什么Mongo端口不是这样?

我看不到直接与Mongo通信的'/ client'代码中的任何内容。

我想念什么?

在此先感谢-约翰

好吧,经过进一步的调查和过夜/红酒的思考,我认为我对上述教程(或类似教程)之后的像我这样的学习者有一个答案。 遵循敏捷的原则,“完成”意味着“在生产环境中工作代码”,我试图理解作为开发人员的最后5米,他们试图使代码在有代表性的生产环境中工作(不会打开不必要的端口)-这个答案就是从那个角度写的。 (欢迎睿智的读者前来。)

发生了什么

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

  1. 它使您正在配置的实例上的MongoDB可能可用于其他实例(0.0.0.0告诉Mongo“在所有可用的网络接口上监听”。)
  2. 这意味着来自同一实例上的MEAN应用程序/服务器组件的IP流量将与Mongo进行通信,就好像它是来自实例外(即使是在同一实例上)一样。 因此,安全组需要打开端口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地址范围内的实例进行访问。

以上是开发人员的“ hack”,不是对良好实践的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM