この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
管理ページなど特定のURLパスだけIP制限したいケースがありますが、セキュリティグループやNetwork ACLでは対応できません。Application Load BalancerのリスナールールによるIP制限をご紹介します。
admin以下をIP制限
以下はEC2のドキュメントルート配下です。特定のIPアドレスからのみ、/admin/restrict-ip.html
に接続可能にします。特定のIP以外からの接続の場合は、ALBのカスタムレスポンスでHTTP 403を返します。トップにはどこからでも閲覧できるindex.html
を配置します。
$ tree .
.
├── admin
│ └── restrict-ip.html
└── index.html
1 directory, 2 files
$
ALBリスナールールによるIP制限
リスナールールの送信元IPとパスを組み合わせます。
特定のIPアドレスから/admin以下に接続した場合は、ターゲットグループにルーティングします。ターゲットグループにEC2を登録しておくことで、/admin/restrict-ip.html
にアクセスできます。
/admin以下に指定したIPアドレス以外から接続があった場合は、ALBの固定レスポンスを返します。送信元IPに0.0.0.0/0を指定します。今回は「このページには特定のIPアドレスからしか接続できません」と返します。ステータスコードは403です。
デフォルトのルーティングは、ターゲットグループにします。こちらが適用されることで、トップのindex.htmlは誰にでも見える状態になります。
まとめると以下のようになります。
動作確認
許可されたIPアドレスから接続すると、restrict-ip.htmlの内容を確認できます。
$ curl -LI http://elb-dnsname/admin/restrict-ip.html -o /dev/null -w '%{http_code}\n' -s
200
$ curl http://elb-dnsname/admin/restrict-ip.html
<h1>管理者のIPアドレスにしか見えないページ</h1>
$
許可されていないIPアドレスから接続すると、ALBの固定レスポンスが表示されます。
$ curl -LI http://elb-dnsname/admin/restrict-ip.html -o /dev/null -w '%{http_code}\n' -s
403
$ curl http://elb-dnsname/admin/restrict-ip.html
<h1>このページには特定のIPアドレスからしか接続できません</h1>
$
最後に
Application Load BalancerのリスナールールによるIP制限をご紹介しました。特定のIPアドレスからの接続はターゲットグループにルーティングし、それ以外はALBの固定レスポンスを返す形にしました。特定パスのIPアドレス制限はAWS WAFでも可能です。AWS WAFと比較するとAWS WAFの料金が不要である点や、固定レスポンスを利用できる点で優れています。制限したいIPアドレスが多い場合はAWS WAFが適しているかと思います。