メニュー
Elastic Load Balancing
クラシックロードバランサー

Classic Load Balancer の Proxy Protocol のサポートを設定する

Proxy Protocol は、接続をリクエストする送信元から、接続がリクエストされる送信先に接続情報を伝達するために使用されるインターネットプロトコルです。Elastic Load Balancing では Proxy Protocol のバージョン 1 を使用します。このバージョンでは、人間が読んで理解できるヘッダー形式が使われます。

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

注記

AWS マネジメントコンソールでは Proxy Protocol を有効にすることができません。

Proxy Protocol ヘッダー

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

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

Proxy Protocol の行は 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 Protocol の例を示します。

PROXY TCP4 198.51.100.22 203.0.113.7 35646 80\r\n

例: IPv6 (EC2-Classic のみ)

次に IPv6 の Proxy Protocol の例を示します。

PROXY TCP6 2001:DB8::21f:5bff:febf:ce22:8a2e 2001:DB8::12f:8baa:eafc:ce29:6b2e 35646 80\r\n

Proxy Protocol を有効にするための前提条件

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

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

  • インスタンスで Proxy Protocol 情報を処理できることを確認します。

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

AWS CLI を使用した Proxy Protocol の有効化

Proxy Protocol を有効にするには、タイプ ProxyProtocolPolicyType のポリシーを作成し、作成したポリシーをインスタンスのポートに対して有効にします。

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

ロードバランサーの Proxy Protocol を有効にするには

  1. (省略可) 次の describe-load-balancer-policy-types コマンドを使用して、Elastic Load Balancing でサポートされているポリシーを一覧表示します。

    Copy
    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 コマンドを使用して、Proxy Protocol を有効にするポリシーを作成します。

    Copy
    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 など) の両方を指定する必要があります。

    Copy
    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 コマンドを使用して、Proxy Protocol が有効になっていることを確認します。

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

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

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

AWS CLI を使用して Proxy Protocol を無効にする

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

Proxy Protocol ポリシーを無効化するには

  1. 次の set-load-balancer-policies-for-backend-server コマンドを使用して、--policy-names オプションで Proxy Protocol ポリシーを省略することによって (my-existing-policy など、有効なままにしておく必要のある他のポリシーは指定して) Proxy Protocol ポリシーを無効にします。

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

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

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

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

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

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