こんにちわ。エンジニアの吉田です。

今回はAWSのTipsを1つ。

AWS(Amazon Web Service)のELB(Elastic Load Balancer)経由でEC2インスタンスを
稼動させている場合に、IPアドレスによるアクセス制限をかけたかったのでそのメモです。




まず、ELBからの死活チェックのために、ヘルスチェック用のファイルに対して
クラスAのプライベートIPアドレスからのアクセスをCIDRで許可しておきます。
※ここでの例は、healthcheck.html

.htaccess

<Files ~ "healthcheck\.html">
    Order Deny,Allow
    Deny from All
    Allow from 10.0.0.0/8
</Files>


次に、ELB経由の場合のアクセスは、EC2インスタンスのApacheから見ると
ELBのIPアドレスだと思ってしまうため、実際にアクセスしてきたクライアントの
IPアドレスは X-Forwarded-For を見るようにしてあげます。
※たいていの負荷分散装置は X-Forwarded-For に元のIPアドレスを入れてくれる。

111.111.111.111 と 222.222.222.222 からのアクセスを許可する場合は以下のような感じ。

.htaccess

SetEnvIf X-Forwarded-For "111\.111\.111\.111|222\.222\.222\.222" allowed_ip_addresses
Order Deny,Allow
Deny from All
Allow from env=allowed_ip_addresses


SetEnvIf で X-Forwarded-For が特定のIPだった場合に allowed_ip_addresses という環境変数を設定して
その環境変数にマッチしているクライアントはアクセスを許可してあげる感じです。

※ちなみに、X-Forwarded-Proto や X-Forwarded-Port というHTTPヘッダも用意されているようです。
  http://aws.typepad.com/aws/2010/10/keeping-customers-happy-another-new-elastic-load-balancer-feature.html
  http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/index.html?arch-loadbalancing.html


今回はELBにまつわるメモも兼ねたTipsでした。
デワデワ。