

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

# Application Load Balancer 的 HTTP 標頭修改
<a name="header-modification"></a>

Application Load Balancer 支援對請求和回應標頭進行 HTTP 標頭修改。無需更新應用程式程式碼，標頭修改可讓您進一步控制應用程式的流量和安全性。

若要啟用標頭修改，請參閱 [啟用標頭修改](enable-header-modification.md)。

## 重新命名 mTLS/TLS 標頭
<a name="rename-header"></a>

標頭重新命名功能可讓您設定 Application Load Balancer 產生並新增至請求的 mTLS 和 TLS 標頭名稱。

修改 HTTP 標頭的功能可讓您的 Application Load Balancer 輕鬆支援使用特定格式化請求和回應標頭的應用程式。


| 標頭 | Description | 
| --- | --- | 
|  X-Amzn-Mtls-Clientcert-Serial-Number  |  確保目標可以識別和驗證用戶端在 TLS 交握期間提供的特定憑證。  | 
|  X-Amzn-Mtls-Clientcert-Issuer  |  透過識別發出憑證的憑證授權單位，協助目標驗證和驗證用戶端憑證。  | 
|  X-Amzn-Mtls-Clientcert-Subject  |  提供目標有關用戶端憑證所發行實體的詳細資訊，這有助於在 mTLS 身分驗證期間進行識別、身分驗證、授權和記錄。  | 
|  X-Amzn-Mtls-Clientcert-Validity  |  允許目標驗證正在使用的用戶端憑證是否在其定義的有效期間內，確保憑證不會過期或過早使用。  | 
|  X-Amzn-Mtls-Clientcert-Leaf  |  提供 mTLS 交握中使用的用戶端憑證，允許伺服器驗證用戶端並驗證憑證鏈。這可確保連線安全且獲得授權。  | 
|  X-Amzn-Mtls-Clientcert  |  攜帶完整的用戶端憑證。允許目標驗證憑證的真實性、驗證憑證鏈，以及在 mTLS 交握程序期間驗證用戶端。  | 
|  X-Amzn-TLS-Version  |  指出用於連線的 TLS 通訊協定版本。它有助於判斷通訊的安全層級、疑難排解連線問題並確保合規性。  | 
|  X-Amzn-TLS-Cipher-Suite  |  指出用於保護 TLS 中連線的密碼編譯演算法組合。這可讓伺服器評估連線的安全性、協助進行相容性疑難排解，並確保符合安全政策。  | 

## 新增回應標頭
<a name="insert-header"></a>

您可以使用插入標頭，設定 Application Load Balancer 將安全相關的標頭新增至回應。透過這些屬性，您可以插入標頭，包括 HSTS、CHS 和 CSP。

根據預設，這些標頭為空白。發生這種情況時，Application Load Balancer 不會修改此回應標頭。

當您啟用回應標頭時，Application Load Balancer 會將具有設定值的標頭新增至所有回應。如果目標的回應包含 HTTP 回應標頭，負載平衡器會將標頭值更新為設定的值。否則，負載平衡器會將 HTTP 回應標頭新增至具有設定值的回應。


| 標頭 | Description | 
| --- | --- | 
|  Strict-Transport-Security  |  在指定的持續時間內，由瀏覽器強制執行僅限 HTTPS 的連線，協助防止man-in-the-middle攻擊、通訊協定降級和使用者錯誤。 可確保用戶端和目標之間的所有通訊都已加密。  | 
|  Access-Control-Allow-Origin  |  控制是否可以從不同的原始伺服器存取目標上的資源。這允許安全的跨來源互動，同時防止未經授權的存取。  | 
|  Access-Control-Allow-Methods  |  指定向目標提出跨來源請求時允許的 HTTP 方法。它提供控制哪些動作可以從不同的原始伺服器執行。  | 
|  Access-Control-Allow-Headers  |  指定哪些自訂或非簡單標頭可以包含在跨來源請求中。此標頭可讓目標控制來自不同原始伺服器的用戶端可以傳送哪些標頭。  | 
|  Access-Control-Allow-Credentials  |  指定用戶端是否應在跨來源請求中包含憑證，例如 Cookie、HTTP 身分驗證或用戶端憑證。  | 
|  Access-Control-Expose-Headers  |  允許目標指定用戶端可以在跨來源請求中存取哪些額外的回應標頭。  | 
|  Access-Control-Max-Age  |  定義瀏覽器可以快取預檢請求結果的時間長度，減少重複預檢檢查的需求。這有助於透過減少特定跨來源請求所需的 OPTIONS 請求數量來最佳化效能。  | 
|  Content-Security-Policy  |  透過控制指令碼、樣式、映像等資源，防止 XSS 等程式碼注入攻擊的安全功能可由網站載入和執行。  | 
|  X-Content-Type-Options  |  使用無嗅探指令， 可透過防止瀏覽器猜測資源的 MIME 類型來增強 Web 安全性。它可確保瀏覽器僅根據宣告的內容類型解譯內容  | 
|  X-Frame-Options  |  標頭安全機制，可透過控制網頁是否可以內嵌在框架中，協助防止點擊劫持攻擊。DENY 和 SAMEORIGIN 等值可確保內容不會內嵌在惡意或不受信任的網站。  | 

## 停用標頭
<a name="disable-header"></a>

使用停用標頭，您可以設定 Application Load Balancer 從回應中停用`server:awselb/2.0`標頭。這可減少伺服器特定資訊的暴露，同時為您的應用程式新增額外的保護層。

屬性名稱為 `routing.http.response.server.enabled`。可用的值為 `true`或 `false`。預設值為 `true`。

## 限制
<a name="header-modification-limits"></a>
+ 標頭值可包含下列字元
  + 英數字元：`a-z`、 `A-Z`和 `0-9`
  + 特殊字元： `_ :;.,\/'?!(){}[]@<>=-+*#&`|~^%`
+ 屬性的值大小不可超過 1K 位元組。
+ Elastic Load Balancing 會執行基本輸入驗證，以確認標頭值是否有效。不過，驗證無法確認特定標頭是否支援該值。
+ 為任何屬性設定空值會導致 Application Load Balancer 還原為預設行為。

# 為您的 Application Load Balancer 啟用 HTTP 標頭修改
<a name="enable-header-modification"></a>

標頭修改預設為關閉，且必須在每個接聽程式上啟用。如需詳細資訊，請參閱[HTTP 標頭修改](header-modification.md)。

------
#### [ Console ]

**啟用標頭修改**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

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

1. 選取 Application Load Balancer。

1. 在**接聽程式和規則**索引標籤上，選取通訊協定和連接埠以開啟接聽程式的詳細資訊頁面。

1. 在**屬性**索引標籤上，選取**編輯**。

   接聽程式屬性會組織成群組。您將選擇要啟用哪些功能。

1. 【HTTPS 接聽程式】 **可修改的 mTLS/TLS 標頭名稱**

   1. 展開**可修改的 mTLS/TLS 標頭名稱**。

   1. 啟用請求標頭來修改並提供其名稱。如需詳細資訊，請參閱[重新命名 mTLS/TLS 標頭](header-modification.md#rename-header)。

1. **新增回應標頭**

   1. 展開 **新增回應標頭**。

   1. 啟用回應標頭來新增並提供值。如需詳細資訊，請參閱[新增回應標頭](header-modification.md#insert-header)。

1. **ALB 伺服器回應標頭**

   1. 啟用或停用**伺服器標頭**。

1. 選擇**儲存變更**。

------
#### [ AWS CLI ]

**啟用標頭修改**  
使用 [modify-listener-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-listener-attributes.html) 命令。如需屬性清單，請參閱 [標頭修改屬性](#header-modification-attributes)。

```
aws elbv2 modify-listener-attributes \
    --listener-arn listener-arn \
    --attributes "Key=attribute-name,Value=attribute-value"
```

------
#### [ CloudFormation ]

**啟用標頭修改**  
更新 [AWS::ElasticLoadBalancingV2::Listener](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-listener.html) 資源以包含屬性。如需屬性清單，請參閱 [標頭修改屬性](#header-modification-attributes)。

```
Resources:
  myHTTPlistener:
  Type: 'AWS::ElasticLoadBalancingV2::Listener'
  Properties:
    LoadBalancerArn: !Ref myLoadBalancer
    Protocol: HTTP
    Port: 80
    DefaultActions:
      - Type: "forward"
        TargetGroupArn: !Ref myTargetGroup
    ListenerAttributes:
      - Key: "attribute-name"
        Value: "attribute-value"
```

------

## 標頭修改屬性
<a name="header-modification-attributes"></a>

以下是 Application Load Balancer 支援的標頭修改屬性。

`routing.http.request.x_amzn_mtls_clientcert_serial_number.header_name`  
修改 **X-Amzn-Mtls-Clientcert-Serial-Number** 的標頭名稱。

`routing.http.request.x_amzn_mtls_clientcert_issuer.header_name`  
修改 **X-Amzn-Mtls-Clientcert-Issuer** 的標頭名稱。

`routing.http.request.x_amzn_mtls_clientcert_subject.header_name`  
修改 **X-Amzn-Mtls-Clientcert-Subject** 的標頭名稱。

`routing.http.request.x_amzn_mtls_clientcert_validity.header_name`  
修改 **X-Amzn-Mtls-Clientcert-Validity** 的標頭名稱。

`routing.http.request.x_amzn_mtls_clientcert_leaf.header_name`  
修改 **X-Amzn-Mtls-Clientcert-Leaf** 的標頭名稱。

`routing.http.request.x_amzn_mtls_clientcert.header_name`  
修改 **X-Amzn-Mtls-Clientcert** 的標頭名稱。

`routing.http.request.x_amzn_tls_version.header_name`  
修改 **X-Amzn-Tls-Version** 的標頭名稱。

`routing.http.request.x_amzn_tls_cipher_suite.header_name`  
修改 **X-Amzn-Tls-Cipher-Suite** 的標頭名稱。

`routing.http.response.server.enabled`  
指出是否允許或移除 HTTP 回應伺服器標頭。

`routing.http.response.strict_transport_security.header_value`  
新增 **Strict-Transport-Security** 標頭，以通知瀏覽器應該只使用 HTTPS 存取網站，而且未來任何使用 HTTP 存取網站的嘗試都應該自動轉換為 HTTPS。

`routing.http.response.access_control_allow_origin.header_value`  
新增 **Access-Control-Allow-Origin** 標頭，以指定允許存取伺服器的原始伺服器。

`routing.http.response.access_control_allow_methods.header_value`  
新增 **Access-Control-Allow-Methods** 標頭，以指定從不同原始伺服器存取伺服器時允許哪些 HTTP 方法。

`routing.http.response.access_control_allow_headers.header_value`  
新增 **Access-Control-Allow-Headers** 標頭，以指定跨來源請求期間允許哪些標頭。

`routing.http.response.access_control_allow_credentials.header_value`  
新增 **Access-Control-Allow-Credentials** 標頭，指出瀏覽器是否應在跨來源請求中包含 Cookie 或身分驗證等登入資料。

`routing.http.response.access_control_expose_headers.header_value`  
新增 **Access-Control-Expose-Headers** 標頭，指出瀏覽器可以向請求用戶端公開哪些標頭。

`routing.http.response.access_control_max_age.header_value`  
新增 **Access-Control-Max-Age** 標頭，以秒為單位指定預檢請求結果的快取時間。

`routing.http.response.content_security_policy.header_value`  
新增 **Content-Security-Policy** 標頭來指定瀏覽器強制執行的限制，以協助將特定類型安全威脅的風險降至最低。

`routing.http.response.x_content_type_options.header_value`  
新增 **X-Content-Type-Options** 標頭，以指出是否應遵循 **Content-Type 標頭中公告的 MIME 類型**，且不得變更。

`routing.http.response.x_frame_options.header_value`  
新增 **X-Frame-Options** 標頭，指出是否允許瀏覽器轉譯**影格**、**iframe**、**內嵌**或**物件**中的頁面。