Amazon-Ec2

具有 NAT 網關的私有 AWS 子網中的實例無法訪問 AWS 服務

  • June 15, 2018

我們在具有託管 NAT 網關的私有子網中有一個實例。在這種情況下,我們可以訪問網際網路:

$ curl https://www.google.com/
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><head>...

但是,我們無法訪問 cloudwatch 端點,例如以下超時:(編輯我的錯誤,不是 cloudwatch 端點,而是儲存 cloudwatch 監控腳本的站點。

$ curl https://cloudwatch.s3.amazonaws.com

DNS不是問題:

$ dig cloudwatch.s3.amazonaws.com
cloudwatch.s3.amazonaws.com. 2303 IN    CNAME   s3-1-w.amazonaws.com.
s3-1-w.amazonaws.com.   1   IN  A   54.231.72.59

關於可能發生的事情有什麼想法嗎?

在私有子網中添加 S3 端點解決了該問題。

事實證明,我們的問題特定於訪問 S3。我們當時的設置是:

  • 在公共子網中執行的 NAT 網關
  • 公共子網中的 S3 端點(路由優先級高於網際網路網關)
  • 私有子網中的流量通過 NAT 的預設規則。

似乎流量沒有通過公共網際網路或 S3 端點通過 NAT 路由到 S3。我仍然不知道為什麼。

我實際上遇到了同樣的問題,並設法以與 JustinHK 下面相同的方式解決它。我已經聯繫 AWS 了解它發生的原因,因為我無法放手,所以這應該有助於解釋這種行為。這是細分:

  • 問題不在於流量無法到達目的地,而在於流量無法正確返回到起點。
  • 由於公共子網(NAT 網關所在的位置)有 2 個選項可以到達目的地 - 通過 VPCE(VPC 端點)或通過 IGW(網際網路網關),它不知道在請求時選擇哪個回程。由於它不知道該選擇哪一個 - 它只是超時。
  • 路由選擇阻力最小的路徑,因此在私有子網中添加 VPCE 使 VPCE 路由成為理想路由。儘管這裡值得一提的是,請求根本沒有通過公共子網,因為它現在在私有子網中有一個 VPCE。

根據您正在執行的設置以及您是否真的需要 IGW 來處理除 S3 之外的其他任何事情,您可能會從公共子網中刪除 IGW,或者刪除私有子網和公共子網之間的 NAT 網關連結。這兩個選項都應該在不破壞解決方案的情況下稍微清理一下路由表。

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