EC2執行個體無法互相存取

EC2執行個體無法互相存取

我在同一可用區和同一帳戶中建立了兩個 EC2 執行個體。他們使用不同的安全群組。我希望實例 A 僅接受來自實例 B 的某個連接埠上的連線。

我不相信這些實例是 VPC,但不知道如何確認。我無法更改安全群組,這讓我認為它們不是 VPC。

在實例 AI 的安全性群組中新增了連接埠規則,並使用實例 B 的公共 IP /32 作為來源。然後,我嘗試使用實例 A 的公共 IP 從實例 B 進行連接,但連接嘗試立即失敗。

我對每個實例的私有 IP 嘗試了相同的步驟。我缺什麼?

這裡有一篇文章回答了類似的問題,但涉及VPC:無法連線到 VPC 中的 EC2 執行個體(Amazon AWS)

兩個實例具有相同的 VPC ID 和子網路 ID。

我還嘗試將來源設定為實例 B 的安全性群組,但這也不起作用。

我正在用 mysql 嘗試這個。在實例 B 上執行的 mysql 用戶端立即失敗並出現下列錯誤:

錯誤 2003 (HY000):無法連線到「54.xx.xx.xx」上的 MySQL 伺服器 (113)

為了檢查 mysqld 設定是否有問題,我嘗試使用 ICMP Echo Reply 進行相同的操作,但也不起作用。

編輯 感謝最初的答案,我能夠確認這兩個實例正在 VPC 中運行(透過前往 VPC 控制台)。所以,我的問題與連結的文章非常相似。但是,在這種情況下,問題在於實例不是預設實例,因此沒有建立正確的路由和子網路。我的 VPC 的設定方式如下: VPC 是預設的,並且有一個與其關聯的路由表。路由表與 VPC 關聯的子網路隱式關聯。路由表中有一條路由,目標是「本地」。

這些都是預設建立的,因為據我了解,文件應該允許兩個實例相互連接。我(仍然)缺少什麼?

答案1

我在 AWS 技術支援的幫助下解決了這個問題。以下是為像我這樣的未來新手提供的資訊:

問題是 iptables 正在實例 B 上運行並且不允許任何流量。我了解到 EC2 執行個體有兩級防火牆:安全群組(在 AWS 控制台管理)和 iptables(在主機上管理)。使用 iptables 是有原因的,例如 https://wincent.com/wiki/Using_iptables_on_EC2_instances

大多數時候,您在執行 Amazon EC2 時無需擔心使用主機級防火牆(例如 iptables),因為 Amazon 允許您在「安全群組」內執行實例,這實際上是您用來執行以下操作的防火牆策略:指定應允許哪些外部連線到達實例。然而,這是一種「白名單」方法,在正在運行的實例上將其用於「黑名單」目的並不簡單。

就我而言,我不需要主機級防火牆,因此關閉了 iptables:

sudo service chkconfig stop
sudo chkconfig iptables off

以下是我得到的與此問題上發布的評論相關的一些結果:

  • 與私有 IP 的連線有效
  • 與私有 DNS 名稱的連線有效
  • 與公共IP連線成功
  • 與公共EIP的連線成功
  • 與公共 DNS 的連接有效,但正如 Chad Smith 在他的回答中所說,DNS 返回私人的該名稱的 IP

這在不同的實例上對我有用的原因是我在該實例中使用的圖像沒有運行 iptables —— 每個圖像都是不同的。我在本例中使用的圖像使用 iptables 來禁止除 SSH 之外的所有連接。

答案2

有點偏離主題,但這是此問題的唯一搜尋結果。

我們遇到了類似的問題,但我們現有的實例重新啟動後突然無法通訊。事實證明,安全群組中的規則太多 - 只是刪除了一些允許恢復的通訊。它在重新啟動之前仍然有效,因為規則是透過自動呼叫 api 隨著時間的推移而添加的。

希望這對將來的人有幫助。

答案3

如果您無法修改正在執行的執行個體的安全性設置,則它們不會啟動到 VPC 中。

即使對於不在 VPC 中的實例,EC2 也會將它們啟動到互連的專用網路中。所以你應該指定私有IP位址實例B屬於實例A的安全群組。

答案4

AWS 對於VPC 和非VPC 執行個體有單獨的安全性群組,因此您需要以某種方式找出您是否在VPC 上(只需前往VPC 控制台並檢查您是否在那裡看到您的執行個體),然後確保您擁有安全群組所建立的都是在相同的上下文中。然後,您可以將安全群組 A 新增至安全群組 B 作為受信任的群組,也可以執行相反的操作。這樣,您只需允許單個連接埠上兩個主機之間的所有流量(我認為這是您的意圖)。

相關內容