クイック エンジニアリングブログ

株式会社クイック Web事業企画開発本部のエンジニアリングチームが運営する技術ブログです。

【AWS CloudFront】 WAF を利用したアクセス制限を実装する

こんにちは。クイックSREチームのみっちーです。

今日は、弊社で設定しているCloudFrontのIP制限方法をご紹介したいと思います。
開発環境等で「ユーザには見せたくないけど、関係者だけは見れるようにしたい!」と言った話にも、AWS WAFを使えば簡単に対応できます。
お困りの方はぜひ試してみて下さい!

それではさっそく行ってみましょ~ ✧(・ㅂ・)و

前提

  • CloudFrontに対して、IPアドレスによるアクセス制限を行いたい。

  • アクセス制限の対象となるCloudFrontは、事前に作成済みである。

手順概要

必要な手順は大まかに以下の2つです。

  1. [AWS WAF] ACLの作成

  2. [AWS CloudFront] 作成したACLのattach

手順詳細

1. [AWS WAF] ACLの作成

AWSコンソールにログインし、
「Services」->「WAF & Shield」をクリックします。

続いて、AWS WAF」->「Configure web ACLの順に選択して、WAFの設定画面に進みましょう。 f:id:aimstogeek:20170919192659j:plain


Step 1:Name web ACL

ここでは、ACLの名称を定義します。細かい設定はこの後で順番にやっていきます。

f:id:aimstogeek:20170919192710j:plain

  • Web ACL name: 任意のACL名を入力します。
    ※ ここでは、test-ACLとしています。

  • Region「Global(CloudFront)」を選択します。
    ※ ここを間違えると、CloudFrontにattachできなくなります。注意です。

上記以外は特に気にしなくてOKです。次へ進みましょう!


Step 2:Create conditions

続いて、IPaddressのlist設定を行います。
ここで作成したlistを元に、Whitelistにするか、Blacklistにするかを決めていきます。
※ 今回はWhitelistです。

IP match conditions「Create conditions」をクリックします。 f:id:aimstogeek:20170919192805j:plain


すると以下の画面が出てくるので、それぞれ設定を行いましょう。 f:id:aimstogeek:20170919192815j:plain

  • Name: 任意のlist名を入力します。
    ※ ここでは、allow-ip-addressとしています。

  • Address許可したい「IPアドレス」または「範囲」を記載し、「Add IP address or range」をクリックします。
    ※ 記載できるサブネットマスクの範囲は、/8, /16, /24 または、/32 です。
    ※ ここでは、111.123.123.1/32 を設定しています。

  • Filters in IP match conditionに、追加したIPアドレスが表示されていることを確認します。

問題なければ、次へ進みましょう。


Step 3:Create rules

先程作成したIPaddressのlistを元に、Filtering Rules(Whitelistにするか、Blacklistにするか)を決めていきます
※ 今回はWhitelistとして設定します。

まずはCreate ruleをクリックして、「Filtering Rules」を作成します。 f:id:aimstogeek:20170920111415j:plain


f:id:aimstogeek:20170920111651j:plain

  • Name: 任意のFiltering Rules名を入力します。
    ※ ここでは、test-ruleとしています。

  • Add conditions「does」、「originate from an IP address」の順に選択し、
    先程作成したlistの「allow-ip-address」を対象に選択します。


    つぎに、作成したFiltering Rulesを適用する条件を指定します。 f:id:aimstogeek:20170920111107j:plain

  • Add rules to a web ACLRulesで、
    先程作成したFiltering Rules「test-rule」を選択します。

  • Action「Allow」を選択します。
    ※ Filtering Rules(test-rule)にマッチングした場合にどうするか、を定義します。

  • Default action「Block all requests…」を選択します。
    ※ Filtering Rules(test-rule)にマッチングしなかった時にどうするか、を定義します。


終わったらReview and createを押して、最終確認です。
確認して問題なければ作成しましょう。
次はいよいよCloudFrontにACLの設定をattachします!


2. 作成したWAFのACLを、CloudFrontにattachします。

AWSコンソールにログインし、「Services」->「CloudFront」をクリックします。

次に、アクセス制限をかけたいCloudFront Distributionを選択して、
General の「Edit」をクリックします。 f:id:aimstogeek:20170920131255j:plain


Distribution Settings

AWS WAF Web ACLで、先程作成したACL(test-ACL)を選択します。
問題なければ、下段のYes Editをクリックして反映させましょう。

なお、設定変更直後はStatusがIn Progressとなり、この間は設定が反映されていません。
しばらく(20~40分程度)して反映完了すると、StatusがDeployedになります。

アクセス確認

反映完了後(StatusがDeployedになる)、適当なファイルにアクセスしてみましょう。
Whitelistに記載の無いIPアドレスからのアクセスであれば、
下図のようにErrorとなるはずです。

f:id:aimstogeek:20170920131904j:plain




以上で設定は完了です。

いかがでしたか。AWS WAFを使えば、CloundFrontにも簡単に制限が掛けられますね。
不慮の事故を防ぐという意味でも、念のために設定しておいて損は無いのかなと思っています。