

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 は、特別にフォーマットされたリクエストヘッダーとレスポンスヘッダーを使用するアプリケーションを簡単にサポートできます。


| ヘッダー | 説明 | 
| --- | --- | 
|  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、CORS、CSP などのヘッダーを挿入できます。

デフォルトでは、これらのヘッダーは空です。この場合、Application Load Balancer はこのレスポンスヘッダーを変更しません。

レスポンスヘッダーを有効にすると、Application Load Balancer は設定された値を持つヘッダーをすべてのレスポンスに追加します。ターゲットからのレスポンスに HTTP レスポンスヘッダーが含まれている場合、ロードバランサーはヘッダー値を設定値に更新します。それ以外の場合、ロードバランサーは設定された値でレスポンスに HTTP レスポンスヘッダーを追加します。


| ヘッダー | 説明 | 
| --- | --- | 
|  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  |  no-sniff ディレクティブを使用すると、ブラウザがリソースの MIME タイプを推測できないようにすることで、ウェブセキュリティが強化されます。これにより、ブラウザは宣言された Content-Type に従ってのみコンテンツを解釈できます。  | 
|  X-Frame-Options  |  ウェブページをフレームに埋め込むことができるかどうかを制御することで、クリックジャック攻撃を防ぐのに役立つヘッダーセキュリティメカニズム。DENY や SAMEORIGIN などの値を使用すると、悪意のあるウェブサイトや信頼できないウェブサイトにコンテンツが埋め込まれないようにできます。  | 

## ヘッダーを無効にする
<a name="disable-header"></a>

disable ヘッダーを使用すると、レスポンスから `server:awselb/2.0` ヘッダーを無効にするように Application Load Balancer を設定できます。これにより、サーバー固有の情報の公開が減少し、アプリケーションに保護レイヤーが追加されます。

属性名は、`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. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**ロードバランサー**] を選択します。

1. Application Load Balancer を選択します。

1. **[リスナーとルール]** タブで、プロトコルとポートを選択して、リスナーの詳細ページを開きます。

1. **[Attributes]** (属性) タブで、**[Edit]** (編集) を選択します。

   リスナー属性はグループに分類されます。有効にする機能を選択します。

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. **[Save changes]** (変更の保存) をクリックします。

------
#### [ 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**、**埋め込み**、または**オブジェクト**でページをレンダリングできるかどうかを示します。