Application Load Balancer - Elastic Load Balancing

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Application Load Balancer

負載平衡器做為用戶端的單一聯絡點。用戶端將請求傳送到負載平衡器,而負載平衡器將請求傳送到如 EC2 執行個體等的目標。若要設定您的負載平衡器,您需要建立目標群組,然後使用您的目標群組來登錄目標。您也可以建立接聽程式,以檢查來自用戶端的連線請求,並建立接聽程式規則,將來自用戶端的請求路由到一或多個目標群組中的目標。

如需詳細資訊,請參閱 Elastic Load Balancing 使用者指南中的 Elastic Load Balancing的運作方式

負載平衡器的子網路

在建立 Application Load Balancer 時,您必須指定以下類型的子網路之一:可用區、本地區域或前哨站。

可用區域

您必須選擇至少兩個可用區域子網路。將適用以下限制:

  • 每個子網路都必須來自不同的可用區域。

  • 為了確保負載平衡器可以適當調整規模,請確認負載平衡器的每個可用區域子網路有一個 CIDR 區塊,並具有至少一個/27位掩碼 (例如,10.0.0.0/27),每個子網至少有 8 個可用 IP 地址。負載平衡器會使用這些 IP 地址與目標建立連線。根據您的流量配置文件,負載均衡器可以擴展更高,並使用分佈在所有已啟用的子網中的最多 100 個 IP 地址。

本機區域

您可以指定一個或多個本地區域子網路。將適用以下限制:

  • 您無法搭配負載平衡器使用 AWS WAF。

  • 您無法將 Lambda 函數做為目標使用。

Outposts

您可以指定單一站式子網路。將適用以下限制:

  • 內部部署資料中心必須已安裝和設定 Outpost。Outpost 與其 AWS 區域之間必須有可靠的網路連線。如需詳細資訊,請參閱《AWS Outposts 使用者指南》

  • 負載均衡器需要負載均衡器節點在前哨站上的兩個實例。支持的執行個體如下表所示。最初,實例是large實例。負載均衡器根據需要進行擴展,從largexlargexlarge2xlarge,以及2xlarge4xlarge。如果您需要額外的容量,負載均衡器會添加4xlarge實例。如果您沒有足夠的實例容量或可用 IP 地址來擴展負載均衡器,則負載均衡器將事件報告給AWS Health Dashboard,負載均衡器狀態為active_impaired

  • 您可以使用執行個體 ID 或 IP 地址來註冊目標。如果在AWS空間站的區域,不使用它們。

  • 以下功能不可用:Lambda 的作用是目標AWS WAF集成、粘性會話、身份驗證支持以及與AWS Global Accelerator。

Application Load Balancer 可以部署在站點上的 c5/c5d、m5/m5d 或 r5/r5d 實例上。下表顯示了負載均衡器可以在前哨站上使用的每個實例類型的大小和 EBS 卷:

執行個體類型和大小 EBS 卷 (GB)
c5/c5d
大型 50
xlarge 50
2xlarge 50
4xlarge 100
m5/m5d
大型 50
xlarge 50
2xlarge 100
4xlarge 100
r5/r5d
大型 50
xlarge 100
2xlarge 100
4xlarge 100

負載平衡器安全分組

安全群組扮演防火牆的角色,可控制允許進出負載平衡器的流量。您可以選擇連接埠和通訊協定,以同時允許傳入和傳出流量。

與負載平衡器相關聯之安全羣組的規則,在接聽程式連接埠和運作狀態檢查連接埠上必須同時允許這兩個方向的流量。當您將接聽程式新增至負載平衡器,或更新目標群組的運作狀態檢查連接埠時,您必須檢閱安全群組規則,以確保它們在新的連接埠上同時允許這兩個方向的流量。如需詳細資訊,請參閱 建議的規則

負載平衡器狀態

負載平衡器可以是以下其中一個狀態:

provisioning

正在設定負載平衡器。

active

負載平衡器已設定完成並準備好路由流量。

active_impaired

負載均衡器正在路由流量,但沒有擴展所需的資源。

failed

無法設定的負載平衡器。

負載平衡器屬性

以下是負載平衡器屬性:

access_logs.s3.enabled

指出存放在 Amazon S3 中的訪問日誌是否啟用。預設為 false

access_logs.s3.bucket

存取日誌的 Amazon S3 儲存貯體名稱。如果啟用存取日誌,則此為必要屬性。如需詳細資訊,請參閱 儲存貯體許可

access_logs.s3.prefix

Amazon S3 儲存貯體中位置的前綴。

deletion_protection.enabled

表示是否已啟用刪除保護。預設為 false

idle_timeout.timeout_seconds

閒置逾時值 (以秒為單位)。預設為 60 秒。

ipv6.deny_all_igw_traffic

阻止互聯網網關 (IGW) 訪問負載均衡器,防止通過 Internet 網關意外訪問內部負載均衡器。它被設置為false面向網際網路的負載平衡器和true內部負載平衡器。此屬性不會阻止非 IGW 互聯網訪問(例如,通過對等互連接、中 Transit Gateway、AWS Direct Connect, 或AWS VPN。

routing.http.desync_mitigation_mode

決定負載平衡器如何處理可能對應用程式造成安全風險的請求。可能的值為 monitordefensivestrictest。預設為 defensive

routing.http.drop_invalid_header_fields.enabled

指出具有無效標頭欄位的 HTTP 標頭是否會由負載平衡器 (true),或路由到目標(false。預設為 false。Elastic Load Balancing 要求消息標頭名稱符合正則表達式[-A-Za-z0-9]+,其中描述了所有已註冊的互聯網郵件頭。每個名稱都由英數字元或連字號組成。

routing.http.x_amzn_tls_version_and_cipher_suite.enabled

指示兩個標題 (x-amzn-tls-versionx-amzn-tls-cipher-suite),其中包含有關協商的 TLS 版本和密碼套件的信息,將添加到客户端請求中,然後再將其發送到目標。所以此x-amzn-tls-version標頭包含與客户端協商的 TLS 協議版本的信息,x-amzn-tls-cipher-suite標頭包含與用户端協商的密碼套件的相關信息。這兩個標頭都採用 OpenSSL 格式。屬性的可能值為truefalse。預設為 false

routing.http.xff_client_port.enabled

指示X-Forwarded-For標頭應保留用户端用於連接到負載平衡器的源端口。可能的值為 truefalse。預設值為 false

routing.http2.enabled

指出是否啟用 HTTP/2。預設為 true

waf.fail_open.enabled

指示是否允許AWS WAF啟用的負載平衡器將請求路由至目標,如果無法將請求轉送至AWS WAF。可能的值為 truefalse。預設值為 false

IP 地址類型

您可以設定用户端可用於訪問面向網際網路和內部負載平衡器的 IP 地址類型。

以下是 IP 地址類型:

ipv4

用戶端必須使用 IPv4 地址 (例如,192.0.2.1) 才能連接至負載平衡器

dualstack

用戶端可以使用 IPv4 地址 (例如,192.0.2.1) 和 IPv6 地址 (例如,2001:0db8:85a3:0:0:8a2e:0370:7334) 連接至負載平衡器。

雙堆棧式負載平衡器注意事項

  • 負載均衡器根據目標組的 IP 地址類型與目標通信。

  • 當您啟用負載平衡器的雙堆疊模式時,Elastic Load Balancing 會提供負載平衡器的 AAAA DNS 記錄。使用 IPv4 地址與負載平衡器通訊的用戶端可解析 A DNS 記錄。使用 IPv6 地址與負載平衡器通訊的用戶端可解析 AAAA DNS 記錄。

  • 通過互聯網網關訪問您的內部雙堆棧負載均衡器將被阻止,以防止意外的互聯網訪問。但是, 這並不妨礙非 IWG 互聯網訪問 (例如, 通過對等互聯網, 中 Transit Gateway,AWS Direct Connect, 或AWS VPN。

連線閒置逾時

對於用戶端透過網路負載平衡器提出的每個請求,負載平衡器會維持兩個連線。前端連線介於用戶端和負載平衡器之間。後端連接是在負載平衡器和目標之間。負載平衡器具有適用於其連線的已設定閒置逾時期間。如果截至閒置逾時的時間過後都沒有傳送或接收的資料,負載平衡器會關閉連線。為了確保冗長的操作 (例如檔案上傳) 有時間完成,請在每個閒置逾時期間過去之前傳送至少 1 位元組的資料,並視需要增加閒置逾時期間的長度。

對於後端連線,建議您為您的 EC2 執行個體啟用 HTTP 保持連線選項。您可以在 Web 伺服器設定中為 EC2 執行個體啟用 HTTP 保持連線。如果您啟用 HTTP 保持連線,負載平衡器可以重複使用後端連線,直到保持連線超時過期。也建議您將應用程式的閒置逾時設定為大於負載平衡器所設定的閒置逾時。否則,如果應用程序不正常地關閉到負載均衡器的 TCP 連接,負載均衡器可能會在收到數據包之前向應用程序發送請求,指示連接已關閉。如果是這種情況,服務器拒絕來自負載均衡器的請求,然後負載均衡器向應用程序發送 HTTP 502 錯誤網關錯誤。

預設情況下,Elastic Load Balancing 會將負載平衡器的閒置逾時值設定為 60 秒。使用下列程序來設定不同的閒置逾時值。

使用主控台更新閒置逾時值

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 LOAD BALANCING (負載平衡) 下方,選擇 Load Balancers (負載平衡器)。

  3. 選取負載平衡器。

  4. Description (描述) 標籤上,選擇 Edit attributes (編輯屬性)

  5. Edit load balancer attributes (編輯負載平衡器屬性) 頁面,輸入 Idle timeout (閒置逾時) 的值 (以秒為單位)。有效範圍為 1 到 4000。

  6. 選擇 Save (儲存)

使用 AWS CLI 更新閒置逾時值

屬性來使用 modify-load-balancer-attributesidle_timeout.timeout_seconds 命令。

刪除保護

為避免您的負載平衡器上遭意外刪除,您可以啟用刪除保護。您的負載平衡器的刪除保護預設為停用。

如果您為負載平衡器啟用刪除保護,則必須先停用才可刪除負載平衡器。

使用主控台來啟用刪除保護

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 LOAD BALANCING (負載平衡) 下方,選擇 Load Balancers (負載平衡器)。

  3. 選取負載平衡器。

  4. Description (描述) 標籤上,選擇 Edit attributes (編輯屬性)

  5. 編輯負載平衡器屬性頁面上,選擇啟用為了刪除保護,然後選擇Save

  6. 選擇 Save (儲存)

使用主控台來停用刪除保護

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 LOAD BALANCING (負載平衡) 下方,選擇 Load Balancers (負載平衡器)。

  3. 選取負載平衡器。

  4. Description (描述) 標籤上,選擇 Edit attributes (編輯屬性)

  5. 編輯負載平衡器屬性頁面,清除啟用為了刪除保護,然後選擇Save

  6. 選擇 Save (儲存)

使用 AWS CLI 來啟用或停用刪除保護

屬性來使用 modify-load-balancer-attributesdeletion_protection.enabled 命令。

非同步緩和模式

取消同步緩和模式可保護您的應用程式免於因 HTTP 非同步而發生問題。負載平衡器會根據其威脅層級對每個要求進行分類,允許安全要求,然後根據您指定的緩和模式來降低風險。非同步緩和模式分為監控、防禦性和最嚴格。預設值為防禦模式,可針對 HTTP 非同步提供持久的緩和措施,同時維持應用程式的可用性。您可以切換至最嚴格模式,以確保您的應用程式只接收符合RFC 7230

http_desync_監護者資源庫會分析 HTTP 請求,以防止 HTTP 非同步攻擊。如需詳細資訊,請參閱「」HTTP 不同步監護(在 GitHub 上)。

分類

分類如下:

  • 合規 — 要求符合 RFC 7230,不會造成任何已知的安全威脅。

  • 可接受 — 要求不符合 RFC 7230,但不會造成已知的安全威脅。

  • 不明確 — 要求不符合 RFC 7230,但造成風險,因為各種 Web 伺服器和代理的處理方式不同。

  • 嚴重 — 要求造成高安全性風險。負載平衡器會封鎖要求,傳送提供 400 回應至用戶端,並關閉用戶端連線。

如果要求不符合 RFC 7230,負載平衡器會增加 DesyncMitigationMode_NonCompliant_Request_Count 指標。如需詳細資訊,請參閱 AApplication Load Balancer 指標

每個請求的分類都包含在負載均衡器訪問日誌中。如果請求不符合要求,訪問日誌將包含分類原因代碼。如需詳細資訊,請參閱 分類原因

模式

下表説明 Application Load Balancer 如何根據模式和分類處理請求。

分類 監控模式 防禦性模式 最嚴格模式
合規 允許 允許 允許
可接受 允許 允許 封鎖
不明確 允許 允許¹ 封鎖
嚴重 允許 封鎖 封鎖

¹ 路由傳送要求,但關閉用戶端和目標連接。如果您的負載均衡器在防禦模式下收到大量不明確請求,則可能會產生額外費用。這是因為每秒新連接數的增加會增加每小時使用的 Load Balancer 容量單位 (LCU)。您可以使用NewConnectionCount度量來比較負載均衡器如何在監視模式和防禦模式下建立新連接。

使用主控台更新非同步緩和模式

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 LOAD BALANCING (負載平衡) 下方,選擇 Load Balancers (負載平衡器)。

  3. 選取負載平衡器。

  4. Description (描述) 標籤上,選擇 Edit attributes (編輯屬性)

  5. 適用於非同步緩和模式,選擇監控防禦, 或最嚴格

  6. 選擇 Save (儲存)

使用 AWS CLI 更新非同步緩和模式

使用 modify-load-balancer-attributes 命令,同時將 routing.http.desync_mitigation_mode 屬性設為 monitordefensivestrictest

Application Load Balancer 和AWS WAF

您可以使用AWS WAF,以根據 Web 存取控制清單 (web ACL) 中的規則來允許或阻止請求。如需詳細資訊,請參閱「」使用 Web ACL中的AWS WAF開發人員指南

若要檢查您的負載平衡器是否整合AWS WAF​,請在AWS Management Console中選取您的負載平衡器,並選擇 ​Integrated services (整合服務) 標籤。

默認情況下,如果負載均衡器無法從AWS WAF,它返回 HTTP 500 錯誤並且不轉發請求。如果您需要負載均衡器將請求轉發到目標,即使它無法聯繫AWS WAF,您可以啟用AWS WAF失敗打開屬性。

啟用AWS WAF使用控制台失敗打開

  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格的 LOAD BALANCING (負載平衡) 下方,選擇 Load Balancers (負載平衡器)。

  3. 選取負載平衡器。

  4. Description (描述) 標籤上,選擇 Edit attributes (編輯屬性)

  5. 適用於AWS WAF非法開放,選擇啟用

  6. 選擇 Save (儲存)

啟用AWS WAF失敗打開使用AWS CLI

使用修改負載平衡器屬性命令與waf.fail_open.enabled屬性設置為true