

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

# Application Load Balancer の属性を編集する
<a name="edit-load-balancer-attributes"></a>

Application Load Balancer を作成するとその属性を編集できます。

**Topics**
+ [接続のアイドルタイムアウト](#connection-idle-timeout)
+ [HTTP クライアントのキープアライブ期間](#http-client-keep-alive-duration)
+ [削除保護](#deletion-protection)
+ [Desync 軽減モード](#desync-mitigation-mode)
+ [ホストヘッダーの保持](#host-header-preservation)

## 接続のアイドルタイムアウト
<a name="connection-idle-timeout"></a>

接続アイドルタイムアウトとは、ロードバランサーが接続を終了する前の、既存のクライアントまたはターゲット接続が非アクティブのままでデータの送受信が行われない時間のことです。

ファイルのアップロードなどの時間がかかるオペレーションでは、完了までの時間を確保するため、各アイドルタイムアウト期間が経過するまでに少なとも 1 バイトのデータを送信し、必要に応じてアイドルタイムアウトの長さを増やします。また、アプリケーションのアイドルタイムアウトは、ロードバランサーに設定されたアイドルタイムアウトよりも大きな値に設定することをお勧めします。そうしないと、アプリケーションがロードバランサーへの TCP 接続を正常に閉じない場合、ロードバランサーは、接続が閉じられたことを示すパケットを受信する前に、アプリケーションにリクエストを送信することがあります。この場合、ロードバランサーは HTTP 502 Bad Gateway エラーをクライアントに送信します。

Application Load Balancer は HTTP/2 PING フレームをサポートしていません。これらは接続アイドルタイムアウトをリセットしません。

Elastic Load Balancing では、ロードバランサーのアイドルタイムアウト値はデフォルトで 60 秒に設定されています。

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

**接続アイドルタイムアウト値を更新するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

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

1. ロードバランサーを選択します。

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

1. **[トラフィック設定]** に **[接続アイドルタイムアウト]** の値を入力します。有効な範囲は 1～4000 秒です。

1. **[Save changes]** (変更の保存) をクリックします。

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

**接続アイドルタイムアウト値を更新するには**  
`idle_timeout.timeout_seconds` 属性を指定して [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) コマンドを使用します。有効な範囲は 1～4,000 秒です。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes "Key=idle_timeout.timeout_seconds,Value=120"
```

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

**接続アイドルタイムアウト値を更新するには**  
[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html) リソースを更新して、`idle_timeout.timeout_seconds` 属性を含めます。有効な範囲は 1～4,000 秒です。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "idle_timeout.timeout_seconds"
          Value: "120"
```

------

## HTTP クライアントのキープアライブ期間
<a name="http-client-keep-alive-duration"></a>

HTTP クライアントのキープアライブ期間とは、Application Load Balancer がクライアントへの HTTP 接続を維持できる最大時間です。設定した HTTP クライアントのキープアライブ期間が過ぎると、Application Load Balancer はもう 1 つのリクエストを受け入れ、接続を正常に終了するレスポンスを返します。

ロードバランサーが送信するレスポンスのタイプは、クライアント接続で使用される HTTP のバージョンにより異なります。
+ HTTP 1.x を使用して接続されたクライアントの場合、ロードバランサーはフィールド `Connection: close` を含む HTTP ヘッダーを送信します。
+ HTTP/2 を使用して接続されたクライアントの場合、ロードバランサーは `GOAWAY` フレームを送信します。

Application Load Balancer では、ロードバランサーの HTTP クライアントのキープアライブ期間の値はデフォルトで 3600 秒 (1 時間) に設定されます。HTTP クライアントのキープアライブ期間は無効にできません。また 60 秒未満に設定することもできません。ただし最大で 604800 秒 (7 日間) まで延長することができます。Application Load Balancer は、HTTP クライアントのキープアライブ期間を、クライアントへの HTTP 接続が最初に確立された時点から開始します。この期間は、トラフィックがない間は継続し、新しい接続が確立されるまでリセットされません。

ゾーンシフトまたはゾーンオートシフトを使用して、ロードバランサーのトラフィックを障害の発生しているアベイラビリティーゾーンから回避させると、既存のオープン接続を使用しているクライアントは、クライアントが再度接続するまで、障害の発生している場所へのリクエストを継続する可能性があります。高速リカバリをサポートするには、キープアライブ期間の値を低く設定して、クライアントがロードバランサーへの接続を継続する時間を制限するようにします。詳細は「*Amazon Application Recovery Controller (ARC) デベロッパーガイド*」の「[Limit the time that clients stay connected to your endpoints](https://docs.aws.amazon.com/r53recovery/latest/dg/route53-arc-best-practices.zonal-shifts.html#arc-zonal-shift.existing-connections)」を参照してください。

**注記**  
ロードバランサーが Application Load Balancer の IP アドレスタイプを `dualstack-without-public-ipv4` に切り替えると、ロードバランサーはすべてのアクティブな接続が完了するまで待機します。Application Load Balancer の IP アドレスタイプの切り替えに要する時間を短縮するには、HTTP クライアントのキープアライブ期間の値を低くすることを検討します。

Application Load Balancer は、HTTP クライアントのキープアライブ期間の値を最初の接続時に割り当てます。HTTP クライアントのキープアライブ期間を更新すると、キープアライブ期間の値が異なる複数の接続が同時に発生する可能性があります。既存の接続では、最初の接続時に適用されたキープアライブ期間の値が保持されます。新しい接続はキープアライブ期間の更新された値を受け取ります。

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

**クライアントのキープアライブ期間を更新するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

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

1. ロードバランサーを選択します。

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

1. **[トラフィックの設定]** に **HTTP クライアントのキープアライブ期間**の値を入力します。有効な範囲は 60～604,800 秒です。

1. **[Save changes]** (変更の保存) をクリックします。

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

**クライアントのキープアライブ期間を更新するには**  
`client_keep_alive.seconds` 属性を指定して [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) コマンドを使用します。有効な範囲は 60～604,800 秒です。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes "Key=client_keep_alive.seconds,Value=7200"
```

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

**クライアントのキープアライブ期間を更新するには**  
[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html) リソースを更新して、`client_keep_alive.seconds` 属性を含めます。有効な範囲は 60～604,800 秒です。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "client_keep_alive.seconds"
          Value: "7200"
```

------

## 削除保護
<a name="deletion-protection"></a>

ロードバランサーが誤って削除されるのを防ぐため、削除保護を有効にできます。デフォルトでは、ロードバランサーで削除保護が無効になっています。

ロードバランサーの削除保護を有効にした場合、ロードバランサーを削除する前に無効にする必要があります。

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

**削除保護を有効または無効にするには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

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

1. ロードバランサーを選択します。

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

1. **[保護]** で、**[削除保護]** を有効または無効にします。

1. **[Save changes]** (変更の保存) をクリックします。

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

**削除保護を有効または無効にするには**  
`deletion_protection.enabled` 属性を指定して [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) コマンドを使用します。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes "Key=deletion_protection.enabled,Value=true"
```

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

**削除保護を有効または無効にするには**  
[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html) リソースを更新して、`deletion_protection.enabled` 属性を含めます。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "deletion_protection.enabled"
          Value: "true"
```

------

## Desync 軽減モード
<a name="desync-mitigation-mode"></a>

Desync 軽減モードは、HTTP Desync に伴う問題からアプリケーションを保護します。ロードバランサーは、脅威レベルに基づいて各リクエストを分類します。安全なリクエストは許可し、指定した軽減モードで指定されたリスクに対しては軽減処理を行います。Desync 軽減モードの種類は、モニタリングモード、防御モード、厳密モードです。デフォルトは防御モードで、アプリケーションの可用性を維持しながら、HTTP Desync に対する永続的な軽減を提供します。厳密モードに切り替えると、アプリケーションで [RFC 7230](https://tools.ietf.org/html/rfc7230) に準拠するリクエストだけを受信できます。

http\$1desync\$1guardian ライブラリは、HTTP リクエストを分析して、HTTP Desync 攻撃を防ぎます。詳細については、GitHub の [HTTP Desync Guardian](https://github.com/aws/http-desync-guardian) を参照してください。

**分類**

分類は次のとおりです。
+ Compliant — リクエストは RFC 7230 に準拠しており、セキュリティ上の既知の脅威はありません。
+ Acceptable — リクエストは RFC 7230 に準拠していませんが、セキュリティ上の既知の脅威はありません。
+ Ambiguous — リクエストは RFC 7230 に準拠しておらず、ウェブサーバーやプロキシごとに処理方法が異なる場合、リスクが生じます。
+ Severe — リクエストは高いセキュリティリスクをもたらしています。ロードバランサーはリクエストをブロックし、クライアントに 400 レスポンスを提供し、クライアント接続を閉じます。

リクエストが RFC 7230 に準拠していない場合、ロードバランサーは `DesyncMitigationMode_NonCompliant_Request_Count` メトリクスを増分します。詳細については、「[Application Load Balancer のメトリック](load-balancer-cloudwatch-metrics.md#load-balancer-metrics-alb)」を参照してください。

各リクエストの分類は、ロードバランサーのアクセスログに含まれます。リクエストが準拠しない場合、アクセスログには分類理由コードが含まれます。詳細については、「[分類の理由](load-balancer-access-logs.md#classification-reasons)」を参照してください。

**モード**  
次の表は、Application Load Balancer で、リクエストがモードと分類に基づきどのように処理されるかを示しています。


| 分類 | モニタリングモード | 防御モード | 厳密モード | 
| --- | --- | --- | --- | 
| 準拠 | 許可 | 許可 | 許可 | 
| Acceptable | 許可 | 許可 | ブロック | 
| Ambiguous | 許可 | 許可¹ | ブロック | 
| Severe | 許可 | ブロック | ブロック | 

¹ リクエストはルーティングされますが、クライアントとターゲットの接続は閉じられます。ロードバランサーが防御モードで多数のあいまいなリクエストを受信すると、追加料金が発生する可能性があります。これは、1 秒あたりの新しい接続数の増加が、1 時間あたりに使用されるロードバランサーキャパシティーユニット (LCU) に影響するためです。`NewConnectionCount` メトリクスを使用すると、モニタリングモードと防御モードで、ロードバランサーによってどのように新しい接続が確立されているかを比較できます。

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

**desync 軽減モードを更新するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

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

1. ロードバランサーを選択します。

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

1. **[Desync 軽減モード]** で、**[パケット処理]** の **[トラフィックの設定]** から、**[防御]**、**[厳密]**、または **[モニタリング]** を選択します。

1. **[Save changes]** (変更の保存) をクリックします。

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

**desync 軽減モードを更新するには**  
`routing.http.desync_mitigation_mode` 属性を指定して [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) コマンドを使用します。使用できる値は `monitor`、`defensive`、または `strictest` です。デフォルトは `defensive` です。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes "Key=routing.http.desync_mitigation_mode,Value=monitor"
```

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

**desync 軽減モードを更新するには**  
[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html) リソースを更新して、`routing.http.desync_mitigation_mode` 属性を含めます。使用できる値は `monitor`、`defensive`、または `strictest` です。デフォルトは `defensive` です。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "routing.http.desync_mitigation_mode"
          Value: "monitor"
```

------

## ホストヘッダーの保持
<a name="host-header-preservation"></a>

**Preserve host header** (ホストヘッダーの保持) 属性を有効にした場合、Application Load Balancer は HTTP リクエストの `Host` ヘッダーを保持し、変更を加えずにヘッダーをターゲットに送信します。Application Load Balancer が複数の `Host` ヘッダーを受信した場合、すべてが保持されます。リスナールールは最初に受信した `Host` ヘッダーにのみ適用されます。

デフォルトで、**Preserve host header** (ホストヘッダーの保持) 属性が有効になっていない場合、Application Load Balancer は `Host` ヘッダーを次のように変更します。

**ホストヘッダーの保持が有効になっておらず、リスナーポートがデフォルト以外のポートである場合**: デフォルトポート (ポート 80 または 443) を使用しない場合、クライアントによってポート番号が追加されなければ、ホストヘッダーにポート番号を追加します。例えば、リスナーポートが `8080` などのデフォルト以外のポートである場合、`Host: www.example.com` を含む HTTP リクエストの `Host` ヘッダが `Host: www.example.com:8080` に変更されます。

**ホストヘッダーの保持が有効になっておらず、リスナーポートがデフォルトポート (ポート 80 または 443) の場合**: デフォルトのリスナーポート (ポート 80 または 443) の場合、送信されるホストヘッダーにポート番号を追加しません。受信したホストヘッダーに含まれていたポート番号はすべて削除されます。

次の表では、Application Load Balancers がリスナーポートに基づいて HTTP リクエストのホストヘッダーを処理する方法の例をさらに示します。


| リスナーポート | リクエスト例 | リクエストのホストヘッダー | ホストヘッダーの保持が無効です (デフォルト動作) | ホストヘッダーの保持が有効です | 
| --- | --- | --- | --- | --- | 
| リクエストはデフォルトの HTTP/HTTPS リスナーで送信されます。 | GET /index.html HTTP/1.1 Host: example.com | example.com | example.com | example.com | 
| リクエストはデフォルトの HTTP リスナーで送信され、ホストヘッダーにはポート (80 または 443) が含まれます。 | GET /index.html HTTP/1.1 Host: example.com:80 | example.com:80 | example.com | example.com:80 | 
| リクエストには絶対パスが含まれます。 | GET https://dns\$1name/index.html HTTP/1.1 Host: example.com | example.com | dns\$1name | example.com | 
| リクエストはデフォルト以外のリスナーポート (8080 など) で送信されます。 | GET /index.html HTTP/1.1 Host: example.com | example.com | example.com:8080 | example.com | 
| リクエストはデフォルト以外のリスナーポートで送信され、ホストヘッダーにはポート (例えば、8080) が含まれます。 | GET /index.html HTTP/1.1 Host: example.com:8080 | example.com:8080 | example.com:8080 | example.com:8080 | 

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

**ホストヘッダーの保持を有効にするには**

1. Amazon EC2 コンソール ([https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)) を開きます。

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

1. ロードバランサーを選択します。

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

1. **[パケット処理]** で **[ホストヘッダーを保存]** をオンにします。

1. **[Save changes]** (変更の保存) をクリックします。

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

**ホストヘッダーの保持を有効にするには**  
[modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) コマンドを使用します。この場合、`routing.http.preserve_host_header.enabled` 属性は `true` に設定します。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes "Key=routing.http.preserve_host_header.enabled,Value=true"
```

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

**ホストヘッダーの保持を有効にするには**  
[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html) リソースを更新して、`routing.http.preserve_host_header.enabled` 属性を含めます。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "routing.http.preserve_host_header.enabled"
          Value: "true"
```

------