Application Load Balancer - Elastic Load Balancing

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

Application Load Balancer

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

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

負載平衡器的子網路

建立 Application Load Balancer 時,必須啟用內含目標的區域。若要啟用區域,請在該區域中指定子網路。Elastic Load Balancing 會在您指定的每個區域建立負載平衡器節點。

考量事項
  • 每個已啟用的區域擁有至少一個已註冊的目標時,負載平衡器的效率最高。

  • 如果您在某個區域內註冊目標但未啟用該區域,這些已註冊的目標便不會接收來自負載平衡器的流量。

  • 如果您為負載平衡器啟用多個區域,這些區域必須是相同類型。例如,您無法同時啟用可用區域和 Local Zone。

  • 您可以指定與您共用的子網路。

Application Load Balancers 支援以下子網路類型。

可用區域子網路

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

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

  • 為確保負載平衡器可以正確擴展,請確認負載平衡器的每個可用區域子網路都有一個區CIDR塊,其中包含至少一個/27位元遮罩 (例如,10.0.0.0/27),每個子網路至少有八個可用 IP 位址。需要有八個可用 IP 地址,才能讓負載平衡器視需要橫向擴展。負載平衡器會使用這些 IP 地址與目標建立連線。如果沒有這些地址,Application Load Balancer 可能會在嘗試取代節點時遇到困難,而導致其變成失敗狀態。

    注意:如果嘗試擴展時,Application Load Balancer 子網路用完可用的 IP 地址,Application Load Balancer 將在容量不足的情況下執行。在此期間,舊節點將繼續為流量提供服務,但是在嘗試建立連線時,延遲的擴展嘗試可能會導致 5xx 錯誤或逾時。

Local Zone 子網路

您可以指定一個或多個 Local Zone 子網路。將適用以下限制:

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

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

  • 您無法使用黏性工作階段或應用程式黏性。

Outpost 子網路

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

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

  • 負載平衡器在負載平衡器節點的 Outpost 上需要兩個 large 執行個體。下表所示是支援的執行個體類型。負載平衡器會視需要擴展,一次調整一個節點的大小 (從 largexlarge,然後從 xlarge2xlarge,接著從 2xlarge4xlarge)。將節點擴展至最大的執行個體大小之後,如果您需要額外的容量,負載平衡器會將 4xlarge 執行個體新增為負載平衡器節點。如果您沒有足夠的執行個體容量或可用的 IP 地址來擴展負載平衡器,負載平衡器會向 AWS Health Dashboard 報告事件,且負載平衡器狀態會變為 active_impaired

  • 您可以依執行個體 ID 或 IP 地址來註冊目標。如果您在該 AWS 地區註冊前哨站的目標,則不會使用它們。

  • 無法使用以下功能:作為目標的 Lambda 函數、 AWS WAF 整合、粘性會話、身分驗證支援以及與 AWS Global Accelerator整合。

Application Load Balancer 可部署在 Outpost 的 c5/c5d、m5/m5d 或 r5/r5d 執行個體上。下表顯示負載平衡器可在 Outpost 上使用的每個執行個體類型的大小和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 儲存貯體中的位置字首。

client_keep_alive.seconds

用戶端保持活動的值,以秒為單位。預設值為 3600 秒。

deletion_protection.enabled

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

idle_timeout.timeout_seconds

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

ipv6.deny_all_igw_traffic

封鎖網際網路閘道 (IGW) 對負載平衡器的存取,防止透過網際網路閘道意外存取內部負載平衡器。如果是面向網際網路的負載平衡器,設為 false,如果是內部負載平衡器,則設為 true。此屬性不會阻止非IGW網際網路存取 (例如透過對等互連、Transit Gateway 或 AWS VPN)。 AWS Direct Connect

routing.http.desync_mitigation_mode

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

routing.http.drop_invalid_header_fields.enabled

指HTTP出含有無效標頭欄位的標頭是由負載平衡器 (true) 移除,還是路由至 target (false)。預設值為 false。Elastic Load Balancing 要求有效的HTTP標頭名稱符合規則運算式[-A-Za-z0-9]+,如HTTP欄位名稱登錄中所述。每個名稱由英數字元或連字號組成。true如果您要從要求中移除不符合此模式的HTTP標頭,請選取此選項。

routing.http.preserve_host_header.enabled

指出應用程式負載平衡器是否應保留HTTP要求中的標Host頭,並將其傳送至目標而不進行任何變更。可能的值為 truefalse。預設值為 false

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標頭具有有關與客戶端協商的密碼套件的信息。這兩個標題都是 Open SSL 格式。此屬性的可能值為 truefalse。預設值為 false

routing.http.xff_client_port.enabled

指示 X-Forwarded-For 標頭是否應該保留用戶端用來連線到負載平衡器的來源連接埠。可能的值為 truefalse。預設值為 false

routing.http.xff_header_processing.mode

可讓您在「Application Load Balancer」將HTTP要求傳送至目標之前,修改、保留或移除要求中的標X-Forward-For頭。可能的值為 appendpreserveremove。預設值為 append

  • 如果值為append,則 Application Load Balancer 會將用戶端 IP 位址 (最後一個躍點的) 新增至HTTP要求的標X-Forward-For頭,然後再將其傳送至目標。

  • 如果值為preserve,則「Application Load Balancer」會保留HTTP要求中的標X-Forward-For頭,並將其傳送至目標,而不進行任何變更。

  • 如果值為remove,則 Application Load Balancer 會先移除HTTP要求中的標X-Forward-For頭,再將其傳送至目標。

routing.http2.enabled

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

waf.fail_open.enabled

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

注意

routing.http.drop_invalid_header_fields.enabled屬性是為了提供不HTTP同步防護而引入的。已新增routing.http.desync_mitigation_mode屬性,以提供更全面的防護,防止應用程式的不HTTP同步。您不需要同時使用這兩個屬性,可選擇其中一個屬性,具體取決於您的應用程式需求。

IP 地址類型

您可以設定 IP 地址類型,用戶端可以使用此類型的 IP 地址存取面向網際網路的負載平衡器和內部負載平衡器。

應用程式負載平衡器支援下列 IP 位址類型:

ipv4

用戶端必須使用IPv4位址連線到負載平衡器 (例如 192.0.2.1)

dualstack

用戶端可以使用兩個位址 (例如,192.0.2.1) 和IPv4位址 (例如,2001:0 資料庫 8:85 和 IPv6 3:0:0:8 a2e: 0370:7334) 來連線到負載平衡器。

考量事項
  • 負載平衡器會根據目標群組的 IP 地址類型與目標進行通訊。

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

  • 透過網際網路閘道存取內部雙堆疊負載平衡器會遭到封鎖,以防止來自網際網路的非預期存取。但是,這並不會阻止非IGW網際網路存取 (例如透過對等互連、Transit Gateway 或 AWS VPN)。 AWS Direct Connect

dualstack-without-public-ipv4

用戶端必須使用IPv6位址 (例如,2001:0 資料庫 8:85 和 3:0:8 a2e: 0370:7334) 連線到負載平衡器。

考量事項
  • Application Load Balancer 身分驗證僅IPv4在連線至身分識別提供者 (IdP) 或 Amazon Cognito 端點時支援。如果沒有公用IPv4位址,負載平衡器就無法完成驗證程序,導致 HTTP 500 個錯誤。

如需 IP 位址類型的詳細資訊,請參閱更新 Application Load Balancer 的 IP 位址類型

負載平衡器連線

處理要求時,負載平衡器會維護兩個連線:一個與用戶端的連線,另一個與目標的連線。負載平衡器與用戶端之間的連線也稱為前端連線。負載平衡器與目標之間的連線也稱為後端連線。

跨區域負載平衡

使用 Application Load Balancer 時,跨區域負載平衡依預設會開啟,而且無法在負載平衡器層級進行變更。如需詳細資訊,請參閱 Elastic Load Balancing User Guide 中的 Cross-zone load balancing 章節。

可以在目標群組層級關閉跨區域負載平衡。如需詳細資訊,請參閱關閉跨區域負載平衡

應用程式負載平衡器和 AWS WAF

您可以 AWS WAF 與應用程式負載平衡器搭配使用,根據 Web 存取控制清單 (WebACL) 中的規則來允許或封鎖要求。如需詳細資訊,請參閱開AWS WAF 發人員指南ACLs中的使用 Web

根據預設,如果負載平衡器無法從中取得回應 AWS WAF,則會傳回 HTTP 500 錯誤,而且不會轉寄要求。如果您需要負載平衡器將要求轉送至目標,即使目標無法聯絡 AWS WAF,您可以啟用 AWS WAF 失敗開啟。若要檢查您的負載平衡器是否與整合 AWS WAF,請在中選取您的負載平衡器, AWS Management Console 然後選擇整合式服務索引標籤。

預定義網頁 ACLs

啟用 AWS WAF 整合時,您可以選擇使用預先定義的規則自動建立新 Web ACL。預先定義的網頁ACL包含三種 AWS 受管規則,提供針對最常見安全威脅的保護。

  • AWSManagedRulesAmazonIpReputationList‐Amazon IP 信譽清單規則群組會封鎖通常與機器人或其他威脅相關聯的 IP 地址。如需詳細資訊,請參閱AWS WAF 開發人員指南中的 Amazon IP 信譽清單受管規則群組

  • AWSManagedRulesCommonRuleSet‐核心規則集 (CRS) 規則群組提供防止利用各種漏洞的保護,包括OWASP出版物中描述的一些高風險和常見漏洞,例如 OWASPTop 10。如需詳細資訊,請參閱AWS WAF 開發人員指南中的核心規則集 (CRS) 受管規則群組

  • AWSManagedRulesKnownBadInputsRuleSet‐「已知錯誤輸入」規則群組會封鎖已知無效且與惡意利用或發現弱點相關聯的要求模式。如需詳細資訊,請參閱AWS WAF 開發人員指南中的已知錯誤輸入受管理規則群組

啟用 AWS WAF 使用控制台
  1. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

  2. 在導覽窗格上選擇 Load Balancers (負載平衡器)

  3. 選取負載平衡器。

  4. 在「合」索引標籤上,展開「AWS Web 應用程式防火牆」(WAF),然後選擇「關聯WAF網頁」ACL。

  5. 在 [Web] 下ACL,選擇 [自動建立預先定義的網頁]ACL,或選取現有的網頁。ACL

  6. 在「規則動作」下,選擇「封鎖」或「計數」。

  7. 選擇確認

若要啟用 AWS WAF 失敗開啟,請使用 AWS CLI

在將waf.fail_open.enabled屬性設定為的情況下使用modify-load-balancer-attributes指令true