簡體   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