他リソースを経由して公開している ALB で、クライアント IP アドレスによるリスナールールの制御方法を教えてください
困っていたこと
Application Load Balancer(ALB)で稼働するアプリケーションを、他のリソース(CloudFront、外部CDN など)を経由して公開しています。
ALB のリスナールールで、クライアントの送信元 IP アドレスを条件に転送ルールを設定したいのですが、ALB 側から見たアクセス元が中間リソースの IP アドレスになってしまいます。
このようなケースでは、リスナールールをどのように設定すればよいですか?
どう対応すればいいの?
HTTPリクエストの X-Forwarded-For ヘッダー内に含まれる IP アドレスを条件として、リスナールールを設定しましょう。
例えば「クライアント IP アドレス 192.0.2.1 からのリクエストのみターゲットグループに転送する」という動作を実現したい場合、下記例のように設定できます。
(IP アドレスは実際のクライアント IP アドレスに置き換えてください。)
※ 後述のように X-Forwarded-For ヘッダーに格納される IP アドレスは複数の場合もあるため、IP アドレスの前後にワイルドカード(*)を付与することがポイントです。
X-Forwarded-For ヘッダーとは?
HTTPリクエストに付与されるヘッダーの1つで、経由したロケーションの IP アドレスが格納されます。
以下例のように複数のロケーションを経由する場合は、複数の IP アドレスが記録される場合もあります。
※ 想定通りの結果を得られない場合は、対象の ALB で X-Forwarded-For ヘッダーが append
モードになっているか(参考[1])、および ALB の前段にある中間リソースが X-Forwarded-For ヘッダーに対応しているかを確認しましょう。