Amazon-Ec2
具有 NAT 網關的私有 AWS 子網中的實例無法訪問 AWS 服務
我們在具有託管 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 網關連結。這兩個選項都應該在不破壞解決方案的情況下稍微清理一下路由表。