⚖️
【AWS】Network Load Balancerを経由した自身へのリクエストが成功しない
どういうこと?
このようにNLBを経由して自身にリクエストを投げても返事が返ってこないということです。
自身以外であれば問題なく通信可能です。
なぜ?
こちらに記載がありました。
preserve_client_ip.enabled
がtrue
である場合、リクエストが別のインスタンスにルーティングされる場合のみ接続が成功するようです。
確認したらわたしの環境はその通りの設定だったため、自身への通信が通らなかったわけですね。
- リクエスト送信元のIPを保持するため
- 送信元と送信先が同一のプライベートIPアドレスになってしまい
- パケットを無効とみなす
ということみたいです。
デフォルト設定はどうなっているの?
このようになっています。
- インスタンスタイプのターゲットグループ: 有効
- IP タイプのターゲットグループ (UDP、TCP_UDP): 有効
- IP タイプのターゲットグループ (TCP、TLS): 無効
タイプinstance
だと通信不可、タイプip
だと通信可能
というパターンの場合該当する可能性があります。
その他注意点も記載があるため、使用する際はここを見ます。
preserve_client_ip.enabled
を設定するメリット
そもそもpreserve_client_ip.enabled
を設定するメリットはなんなのでしょうか。
preserve_client_ip.enabled
がtrue
- クライアントのオリジナルIP取得が可能
- ログ分析観点などで有用
preserve_client_ip.enabled
がfalse
- クライアントのオリジナルIPを隠すことが出来る
- 今回の問題を解決出来る
誰からのIPかわかるようになるのは大きいかもですね。
他にもメリットはあると思いますが、いずれ理解できるとうれしい。
セキュリティグループ・NACLはどうすればいい?
指針が書かれているので、こちらを参照のこと。
クライアントIPを保持しない場合、NLBのIPを許可しなくてはならない、というような説明があります。
おわりに
リクエスト送信元の設定が必要な場合、この項目を編集しましょう。
参考
Discussion