Security

通過外部 IP 地址更改 aws 實例的安全組

  • September 28, 2019

請注意:埠 22 只是一個範例埠,當它不是我要處理的埠 22 時,會有一些實例。

安全組

"server-1" has a security group "group-1"
"server-2" has a security group "group-2"
"server-1" has an elastic ip address assigned to it i.e 111.222.333.444

"group-2" is allowed to connect to "group-1" via port 22

因此,如果我通過以下命令從server-2 SSH到server-1

ssh -iKEY.pem root@ec2-111.222.333.444.eu-west-1.compute.amazonaws.com

連接很好,按預期工作。

但是,如果我嘗試通過此命令進行連接。

ssh -iKEY.pem root@111.222.333.444

由於我認為是顯而易見的原因,它不起作用

為了連接到server-1,我離開了 aws 網路,因此 aws 將來自server-2的連接視為外部資源,而不再是 aws 實例。這意味著它不會使用顯示以下內容的安全組:

"group-2" is allowed to connect to "group-1" via port 22

實際問題

我想通過 ElasticIP 地址連接到server-1 ,這樣我就可以愉快地重新啟動****server-1和/或server-2,而不必擔心 aws 實例名稱/IP 地址已更改,即第一個 ssh 範例中的域名將在重新啟動/新實例接管時發生變化。

所以我的問題真的是這樣做的最佳實踐方法是什麼。我目前可以看到的選項是:

  1. 對 ElasticIP 地址進行反向 dns 查找並使用此域名從server-2連接到server-1 ,即 Elastic ip 地址為 111.222.333.444,反向查找將返回我

ec2-111-222-333-444.eu-west-1.compute.amazonaws.com

無法繼續手動建構它,因為我還需要知道實例所在的可用區才能做到這一點(我非常不想關心它在哪裡)。 2. 我假設我可以執行一個 aws api 呼叫來獲取附加到 ElasticIP 地址的目前實例名稱。知道應用程序在 aws 伺服器上並且希望遠離 api,我並不太喜歡應用程序。 3. 在 aws 中使用 vpc 實例。這樣,即使在任一伺服器重新啟動後,我也可以始終將相同的私有 IP 地址附加到server-1並可靠地連接到它。然而,這似乎伴隨著大量的配置和維護。 4. 我可以在重新啟動後手動更新指向server-1的任何配置設置(這不是系列建議)。 5. 向世界開放server-1埠 22(注意:我也想打開其他埠,而不僅僅是 22)並擔心應用程序進行身份驗證。(同樣不是一個真正明智的選擇,好像我想打開埠 80 到server-2然後必須使用 .htaccess 或類似方法來驗證連接,因此只是移動這個問題而不是真正解決它)。

選項 1 和 2 的問題是我必須始終進行這些查找,這會在應用程序上產生大量成本,或者我記憶體它並且必須忍受這樣一個事實,即如果server-1的實例發生更改,即重新啟動發生那麼有一段時間,server-2將無法連接到server-1,直到它取消記憶體實例名稱。

選項 3 可能是最好的解決方案,但它的配置和維護非常耗時,並且需要我們公司內部的額外知識。

有沒有人有其他可行的建議?

鑑於您的要求,我同意使用 VPC 是最佳解決方案。由於聽起來您已經完成了研究,因此您知道 VPC 允許對子網和主機定址進行更細粒度的控制。要回答您的問題,這是“最佳實踐”方法。

我要做的是創建兩個私有子網,每個 AZ 中一個,並在每個子網中放置一個具有靜態私有 IP 地址的彈性網路介面。然後,您可以隨意將 ENI 附加/分離到適當的實例。這允許一些很酷的東西和功能,例如在流量仍在流經的同時在伺服器之間熱交換 NIC。是的,設置 VPC 有一個重要的學習曲線,但是當使用需要相互通信的多個 EC2 實例時,權衡是大大提高了安全性和靈活性。

值得注意的是,利用 AWS API(正如您也提到的)也是滿足您目前需求的可行解決方案。但是,您在編寫自定義解決方案的這條道路上走得越遠,隨著您的需求增長,維護它變得越費時。

引用自:https://serverfault.com/questions/463643