他リソースを経由して公開している ALB で、クライアント IP アドレスによるリスナールールの制御方法を教えてください

ALB のリスナールールで X-Forwarded-For ヘッダーを条件に設定しましょう。
2024.04.03

困っていたこと

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 ヘッダーに対応しているかを確認しましょう。

参考資料