CloudFront＋WAFでIPアドレス制限をかける

# はじめに
こんにちは、もちもちMAXです。
AWSでS3＋CloudFrontなどの構成で静的なコンテンツを配信する際、誰でもアクセスできる状態はマズイ、となることはありませんか？デモ用に作ってみただけなので限定的に公開したい、ということもあるかと思います。そんな時に使えるのがIPアドレス制限で、特定のIPアドレスからのアクセスのみ許可（or ブロック）ができます。これで安心して公開できますね。

今回はCloudFrontで配信するコンテンツにIPアドレス制限をかける方法を説明します。IPアドレス制限にはAWS WAFを用いておこないます。また、本記事ではCloudFrontによるコンテンツ配信方法については説明しません。配信方法も知りたい方は[こちらの記事](https://qiita.com/deritto777/items/5def898af7562619d73e)をご確認ください。

# 手順
まずはざっくりとした手順を紹介します。
１．IP setsの作成
２．web ACLの作成
３．web ACLをCloudFrontディストリビューションに適用

制限対象のIPアドレスの設定をおこない、どのような制限をかけるかを設定、それをCloudFrontに適用、といった流れです。それでは各手順の詳細を説明していきます。

# IP setsの作成
最初におこなうのはIP setsの作成です。IP setsとはアドレス制限をかける対象のアドレス一覧で、グローバルIPアドレスを指定します。（おそらく）

作成方法ですが、まずAWS マネジメントコンソールからAWS WAFを開いて`Create IP set`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/a855e634-2af7-180a-efcd-0736f77d888b.png)

`IP set name`には作成するIP setの名前を、`Region`は`Global(CloudFront)`を設定してください。名前は何でも良いですがCloudFrontに適用するためのIP setの`Region`は`Global(CloudFront)`にしないといけないようです。そして`IP addresses`には制限をかけたいIPアドレスをCIDR表記で記載します。本記事では今使っているマシンを制限対象としてコンテンツにアクセスできないようにします。そのため、グローバルIPアドレスを知る必要があるので[こちらのサイト](https://www.whatismyip.com/)にアクセスし`My Public IPv4`と書いてあるところのアドレスをコピーしておきます。そして`IP addresses`に`コピーしたアドレス/32`と記入します。`/32`と書くことで`コピーしたアドレス`のみを制限対象とすることができます。以上の設定が終われば`Create IP set`をクリックすることでIP setの作成が完了です。
![image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/026a3fc5-09d3-26e7-f0f3-6816f94e9e3f.png)

※CIDR表記は`IPアドレス/24`のようにサブネットマスクを表記する方式です。詳しくは調べてみてください。

# web ACLの作成
次にweb ACLを設定していきます。

`Resource type`は`Amazon CloudFront distributions`を選び、`Name`は適宜設定します。
![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/63c87760-91fd-881b-4b7c-5ddeedb76b02.png)

次の画面ではRulesというものを設定します。Rulesは制限対象のIPアドレスに対してどのような処理をおこなうかを示すものです。`Add my own rules and rule groups`を選択し新しいRulesを作成していきます。
![image (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/ef6e494f-fb8e-c852-d075-671a457ce5db.png)

`Rule type`は`IP set`、`Name`は適宜設定、`IP set`には先ほど作成したIP setを設定します。`Action`はIP setをどのように処理したいかで選びます。今回はアクセスできないようにしたいので`Block`を設定します。以上でRulesの作成は完了です。
![image (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/21d9c875-62f8-be05-4c8b-8f8f359613a1.png)

最後に`Default action`として`Allow`を設定します。これによって制限対象のIPアドレス以外からのアクセスは許可される、ということになります。
![image (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/ed13583f-be47-1b64-e8ea-b1b3adc41861.png)

ここまでの設定が完了すればあとはnextを連打して`Create web ACL`をクリックすればweb ACLの作成が完了です。
![image (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/94f1f564-914f-ad7c-cff8-3418f983d00f.png)

# web ACLをCloudFrontディストリビューションに適用
最後に、AWS WAFのweb ACLsから作成したweb ACLを選択し`Associated AWS resources`から`Add AWS resources`を選択します。
![image (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/131f61f7-b565-efd0-b95e-5680a92b7050.png)

適用したいCloudFrontディストリビューションを選択しAddをクリックします。
![image (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/591035e5-d7d2-570a-0ff6-a7d1c2dfd22f.png)

以上で、web ACLの適用が完了です。

# 確認

設定したCloudFrontディストリビューションにアクセスして、アクセスできないことが確認できればIPアドレス制限が成功していることになります。
ちなみに、CloudFrontディストリビューションの設定で`WAFを有効にする`を選ぶと自動的にweb ACLが作成されます。ここには多くの一般的なウェブ攻撃から自動的に保護するためのRuleが適用されており、これにより簡単にセキュリティ対策が施せるようです。ご参考まで。

# さいごに
本記事では、WAFを用いてCloudFrontディストリビューションにIPアドレス制限をかける方法を説明しました。当然のことですが、同じ方法でRulesを一部変更すれば特定のIPアドレスからのアクセスのみを許可する、といった使い方もできますので是非活用してくださいね。  

最近、ブログと自作アプリのLPを立ち上げたので是非見てってください！

ブログ↓
https://mochinochikimchi.com

アプリLP↓
https://mochinochikimchi.com/applications/mealmotion/index.html