(我搜索过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直接对话的任何内容。
我错过了什么?
提前谢谢 - 约翰
好的,经过进一步的调查和一夜之间/红葡萄酒的反思,我想我可以按照上面的教程(或类似的)为我这样的学习者提供答案。遵循敏捷原则,'完成'意味着'在生产环境中工作代码'我试图理解最后5米作为开发人员试图让代码在代表性的生产环境中工作(不会打开不必要的端口) - 这个答案是从这个角度写的。 (建立更好的读者欢迎。)
发生了什么
本教程中的步骤(a)将Mongo绑定IP地址从127.0.0.1更改为0.0.0.0,(b)指定使用同一实例的外部IP地址的连接URL,似乎有两个效果:
固定
private IP address/24, or private IP address/16
的EC2安全组CIDR规则,以允许跨指定的内部IP地址范围内的实例进行访问。以上是开发人员'黑客',而不是良好做法的建议。