ELBはセキュリティグループ外にあるため、セキュリティグループでHTTP(80番)ポートのアクセスを接続元のIPアドレスで制御しても、ELB経由でアクセスされた場合、どこからでもアクセス出来てしまいます。

ELBとアクセス制限(Apache)とヘルスチェックのように、 ELBがヘルスチェックファイルにアクセスできるようにしておかないと、 セキュリティグループで制限をかけたと同時にEC2がELBから切り離されてしまいます。

そのため、ELB経由のアクセスも制限する必要がある場合は、Webサーバ(Apache)などで、アクセスを制限する必要があります。

例として、Apacheでアクセス制限する場合、接続元IPアドレスがすべてELBになってしまい判別することができないので、下記のようにX-Forwarded-Forの値で制限することになります。

SetEnvIf X-Forwarded-For "xxx.xxx.xxx.xxx$" allow_ip
Order deny,allow
Deny  from all
Allow from env=allow_ip

すでにX-Forwarded-ForヘッダのついたHTTPリクエストがELBを経由するとで紹介したように、ELBがX-Forwarded-Forに追加するクライアントのIPアドレスは、一番最後に追加されるので、ヘッダを改ざんされることも想定して、上記は最後のIPアドレスのみをチェックするようにしています。

またApacheなら、前に紹介したmod_extract_forwardedを導入して、接続元IPアドレスをX-Forwarded-Forのものに変えてしまう方法もあります。
(後はいつものアクセス制限をする)

次回は、ELBとApacheのまとめについて記事を書く予定です。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら