Classic Load Balancer のプロキシプロトコルを設定する - エラスティックロードバランシング

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

Classic Load Balancer のプロキシプロトコルを設定する

プロキシプロトコルは、接続をリクエストする送信元から接続がリクエストされる送信先に接続情報を伝達するために使用される、インターネットプロトコルです。Elastic Load Balancing のプロキシプロトコルでは、人間にとって可読性があるヘッダー形式を持つバージョン 1 を使用しています。

デフォルトでは、フロントエンド接続とバックエンド接続の両方で Transmission Control Protocol (TCP) を使用した場合に、Classic Load Balancer がインスタンスにリクエストを転送する際、そのリクエストヘッダーは変更されません。プロキシプロトコルを有効にすると、送信元 IP アドレス、送信先 IP アドレス、ポート番号などの接続情報を含むリクエストヘッダーに、人間が判読できるヘッダーが追加されます。これにより、ヘッダーがリクエストの一部としてインスタンスに送信されます。

注記

AWS Management Console はプロキシプロトコルの有効化をサポートしていません。

プロキシプロトコルヘッダー

プロキシプロトコルヘッダーは、ロードバランサーでバックエンド接続用に TCP を使用する場合に、クライアントの IP アドレスを識別するのに役立ちます。ロードバランサーはクライアントとインスタンスの間のトラフィックを傍受するため、インスタンス内のアクセスログには、発信元クライアントの IP アドレスでなく、ロードバランサーの IP アドレスが含まれています。リクエストの 1 行めを解析して、クライアントの IP アドレスとポート番号を取得することができます。

IPv6 のヘッダー内のプロキシのアドレスは、ロードバランサーのパブリック IPv6 アドレスです。この IPv6 アドレスは、ipv6 または dualstack で始まるロードバランサーの DNS 名から解決される IP アドレスと一致します。クライアントが IPv4 に接続する場合、ヘッダー内のプロキシのアドレスはロードバランサーのプライベート IPv4 アドレスであるため、DNS ルックアップでは解決できません。

プロキシプロトコルの行は 1 行であり、キャリッジリターンとラインフィード ("\r\n") で終わります。形式は次のとおりです。

PROXY_STRING + single space + INET_PROTOCOL + single space + CLIENT_IP + single space + PROXY_IP + single space + CLIENT_PORT + single space + PROXY_PORT + "\r\n"
例: IPv4

次に IPv4 のプロキシプロトコルの例を示します。

PROXY TCP4 198.51.100.22 203.0.113.7 35646 80\r\n

プロキシプロトコルを有効にするための前提条件

開始する前に、以下を実行します:

  • ロードバランサーが、プロキシプロトコルが有効になっているプロキシサーバーの背後にないことを確認します。プロキシプロトコルがプロキシサーバーとロードバランサーの両方で有効になっていると、ロードバランサーは、プロキシサーバーからのヘッダーが既に追加されているリクエストに別のヘッダーを追加します。インスタンスの設定によっては、このような重複によってエラーが発生する可能性があります。

  • インスタンスでプロキシプロトコル情報を処理できることを確認します。

  • リスナー設定でプロキシプロトコルがサポートされることを確認します。詳細については、「Classic Load Balancer のリスナー設定」を参照してください。

AWS CLIを使用したプロキシプロトコルの有効化

プロキシプロトコルを有効にするには、タイプ ProxyProtocolPolicyType のポリシーを作成し、このポリシーをインスタンスのポートで有効にします。

次の手順を使用して、ProxyProtocolPolicyType タイプのロードバランサーの新しいポリシーを作成し、ポート 80 のインスタンスに設定して、そのポリシーが有効になっていることを確認します。

ロードバランサーの Proxy Protocol を有効にするには
  1. (オプション) 次の describe-load-balancer-policy-types コマンドを使用して、Elastic Load Balancing でサポートされているポリシーを一覧表示します。

    aws elb describe-load-balancer-policy-types

    応答には、サポートされるポリシータイプの名前と説明が出力されます。ProxyProtocolPolicyType タイプの出力は次のとおりです。

    { "PolicyTypeDescriptions": [ ... { "PolicyAttributeTypeDescriptions": [ { "Cardinality": "ONE", "AttributeName": "ProxyProtocol", "AttributeType": "Boolean" } ], "PolicyTypeName": "ProxyProtocolPolicyType", "Description": "Policy that controls whether to include the IP address and port of the originating request for TCP messages. This policy operates on TCP/SSL listeners only" }, ... ] }
  2. 次の create-load-balancer-policy コマンドを使用して、プロキシプロトコルを有効にするポリシーを作成します。

    aws elb create-load-balancer-policy --load-balancer-name my-loadbalancer --policy-name my-ProxyProtocol-policy --policy-type-name ProxyProtocolPolicyType --policy-attributes AttributeName=ProxyProtocol,AttributeValue=true
  3. 次の set-load-balancer-policies-for-backend-server コマンドを使用して、新しく作成したポリシーを特定のポートで有効にします。このコマンドは現在有効になっている一連のポリシーを置き換えることに注意してください。したがって、--policy-names オプションで、リストに追加するポリシー (my-ProxyProtocol-policy など) と現在有効になっているポリシー (my-existing-policy など) の両方を指定する必要があります。

    aws elb set-load-balancer-policies-for-backend-server --load-balancer-name my-loadbalancer --instance-port 80 --policy-names my-ProxyProtocol-policy my-existing-policy
  4. (オプション) 次の describe-load-balancers コマンドを使用して、プロキシプロトコルが有効になっていることを確認します。

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    応答には、my-ProxyProtocol-policy ポリシーがポート 80 に関連付けられていることを示す次の情報が出力されます。

    { "LoadBalancerDescriptions": [ { ... "BackendServerDescriptions": [ { "InstancePort": 80, "PolicyNames": [ "my-ProxyProtocol-policy" ] } ], ... } ] }

AWS CLIを使用したプロキシプロトコルの無効化

インスタンスに関連付けられているポリシーは無効にすることができ、また後で有効にすることができます。

プロキシプロトコルをポリシーを無効にするには
  1. 次の set-load-balancer-policies-for-backend-server コマンドを使用して、--policy-names オプションからプロキシプロトコルポリシーを削除して、このポリシーを無効にします。(ただし、my-existing-policy など、有効なままにしておく必要のある他のポリシーは残します)。

    aws elb set-load-balancer-policies-for-backend-server --load-balancer-name my-loadbalancer --instance-port 80 --policy-names my-existing-policy

    有効にする他のポリシーがない場合は、次のとおり --policy-names で空の文字列を指定します。

    aws elb set-load-balancer-policies-for-backend-server --load-balancer-name my-loadbalancer --instance-port 80 --policy-names "[]"
  2. (省略可) 次の describe-load-balancers コマンドを使用して、ポリシーが無効になっていることを確認します。

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    応答には、ポリシーに関連付けられているポートがないことを示す次の情報が出力されます。

    { "LoadBalancerDescriptions": [ { ... "BackendServerDescriptions": [], ... } ] }