簡體   English   中英

如果 EC2 實例未對公眾開放,AWS 網絡負載均衡器無法連接到 EC2 實例

[英]AWS Network Load Balancer failed to connect with EC2 instance if EC2 instance is not open to public

我一直在為這個問題苦苦掙扎 2 天,但無法讓它工作。

我有這個流程:

外部世界 --> AWS API 網關 ---> VPC 鏈接 ---> 網絡負載均衡器 ---> 我的單個 EC2 實例

在介紹 API 網關之前,我想首先確保Network Load Balancer --> my single EC2 instance部分有效。

我已經正確設置了 EC2 實例。 有一個 Typescript / ExpressJS api 服務在端口3001上運行

我還設置了一個網絡負載均衡器和一個目標組,NLB 正在偵聽並將請求轉發到目標組的端口3001 (其中包含 EC2 實例)。

這是NLB: 在此處輸入圖像描述

請注意,NLB 有一個 VPC。 這提出了下面的問題,我覺得很困惑。

聽眾: 在此處輸入圖像描述

可以看到它正在將請求轉發到docloud-backend-service ,描述如下: 在此處輸入圖像描述

可以看到健康檢查通過了。

我已經使用以下規則配置了我的 EC2 實例的安全組:

1. Allow All protocol traffic on All ports from my VPC 
(specified using CIDR notation `171.23.0.0/16`);

現在,當我執行curl docloud-backend-xxxxx.elb.ap-northeast-1.amazonaws.com:3001/api/user時,命令因超時而失敗。

然后,在我添加此規則后:

2. Allow All protocol traffic on All ports from ANY source (`0.0.0.0/0`);

現在,當我做curl docloud-backend-xxxxx.elb.ap-northeast-1.amazonaws.com:3001/api/user時,

api 服務收到請求,我可以看到 EC2 實例中生成的日志。

問題:

第二條規則向公眾開放 EC2 實例,這是危險的。

我想限制對我的 EC2 實例端口 3001 的訪問,以便只有 AWS API 網關或 NLB 可以訪問它。

NLB 沒有要配置的安全組。 雖然它有一個 VPC。 如果我將 EC2 實例限制為只有它自己的 VPC 可以訪問它,那應該沒問題,對吧?

第一條規則正是這樣做的。 為什么會失敗?

NLB 有一個 VPC。 請求 go 從 API 網關到 NLB,然后從 NLB 到 EC2 實例。 因此,從 EC2 實例的角度來看,請求來自 VPC 中的實體。 所以第一條規則應該有效,對吧?

否則,AWS 為什么要為 NLB 分配一個 VPC?

為什么我會在 NLB 的描述控制台上看到 VPC?

我想限制對我的 EC2 實例端口 3001 的訪問,以便只有 AWS API 網關或 NLB 可以訪問它。

例如基於實例的目標組和基於 IP 的目標組,如果想要保留請求者的 IP 地址,我們可以啟用/禁用:

在此處輸入圖像描述

如果 go 到我們的目標組 -> 操作 -> 編輯目標屬性,可以找到此設置。

在此處輸入圖像描述

從我們應用程序的安全組的角度來看,這意味着什么?

如果我們啟用它(這是實例類型目標組的默認設置),應用程序將看到直接來自終端客戶端的流量。 這意味着,我們必須為0.0.0.0:3001啟用入站流量。

如果我們禁用它,應用程序將看到來自網絡負載均衡器的私有 IP 地址的源流量。 在這種情況下,我們可以將入站流量限制為 NLB 的私有 IP 地址或放置 NLB 的子網的 CIDR 范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM