AWS WAFでCloudFront経由でのアクセスにIPアドレス制限を設定する

  • 13
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

CloudFrontを経由して、ELB→EC2に構築したWebサーバにアクセス可能なIPアドレスを制限したい場合、Webサーバ側で制限するか、CloudFrontのエッジロケーションのIPと許可したいIPをセキュリティグループで制限する方法を取っていました。
しかし、最近リリースされたAWS WAFを使えば、アクセス元のIPアドレスで制限を掛けられるようなので、試してみました。

AWS WAFとは

AWSで提供している、Web Application Firewallです。
詳しくは以下の公式サイトを参照してください。
https://aws.amazon.com/jp/waf/

料金

リクエスト数に対する課金は100 万リクエスト単位なので、それ以下に収まるようなレベルであれば、設定するACLとルール数によって料金が変わってきます。
詳しくは以下の公式サイトを参照してください。
https://aws.amazon.com/jp/waf/pricing/

設定

準備

※事前にCloudFrontの設定が完了していることを前提とします。

AWS Management Consoleより、AWS WAFの画面に行き、"Get started"を選択します。
Kobito.xpqlXD.png

Kobito.26wuwC.png

ACL名の設定

ACL Nameを入力します。
Kobito.k2n3ow.png

conditionの設定

今回はIP制限を掛けたいので、"Create IP match condition"を設定します。
Kobito.3T7Eas.png

condition名を入れ、制限したいIPアドレスを入力します。
Kobito.NA13Uq.png

Ruleの設定

続いてRuleを設定します。"Create rules"を選択します。
Kobito.WoIi2g.png

Rule名を入れ、先ほど設定したconditionを選択します。
Kobito.O3MlK2.png

続いて、Ruleにマッチした場合としなかった場合のActionを設定します。
今回は特定のIPアドレスのみを許可(それ以外は拒否)したいので、Order Noが振られている箇所のActionは"Allow"を、Default Actionの箇所は"Block all requests that don't match any rules"を選択します。
Kobito.nXJL2g.png

設定済みのCloudFrontを選択します。
Kobito.93H2Lk.png

レビュー画面が表示されるので、内容を確認します。
Kobito.QFBXnd.png

作成されたことを確認します。
Kobito.uyQGUU.png

動作確認

では、実際にアクセスして動作を確認します。
まず、許可されているIPアドレスから、CloudFrontを経由してWebサーバにアクセス出来ることを確認します。

成功後、以下の様なSampled requestsが確認出来ました。
Matches ruleが、設定したrule名になっています。
Kobito.wtOvf0.png

また、許可しているIPアドレスからアクセスした場合は、Default Actionの方にマッチしています。
Kobito.Qazp04.png

エラー画面は以下のような画面が返って来ました。

ERROR

The request could not be satisfied.

Request blocked.

Generated by cloudfront (CloudFront)
Request ID: hoge

特定のユーザーにのみ公開したい場合や、まだ開発中などで外部公開したくない場合などに便利そうです。