AWS WAFの公開設定を色々とためしてみた

![img](https://day-journal.com/memo/images/logo/aws/waf.png)

### AWS WAFの公開設定を色々とためしてみました :tada:  

<br>

事前準備

- Amazon CloudFrontとAmazon S3を組み合わせて公開  
[Amazon CloudFront #001 - Amazon S3と組み合わせて公開](https://day-journal.com/memo/amazon-cloudfront-001)

<br>

## Amazon CloudFrontと組み合わせた公開

AWS WAFとAmazon CloudFrontを組み合わせて公開する方法です。  

AWSコンソール → WAF & Shieldをクリック。
![img](https://day-journal.com/memo/images/aws-waf-001_01.png)

「Create web ACL」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-001_02.png)

任意名称を設定。リソースタイプにCloudFrontを選択。対象のCloudFrontディストリビューションを選択。その他は今回はデフォルトのまま設定。
![img](https://day-journal.com/memo/images/aws-waf-001_03.png)
![img](https://day-journal.com/memo/images/aws-waf-001_04.png)
![img](https://day-journal.com/memo/images/aws-waf-001_05.png)
![img](https://day-journal.com/memo/images/aws-waf-001_06.png)

内容を確認し「Create web ACL」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-001_07.png)

作成されたWeb ACLをクリック。
![img](https://day-journal.com/memo/images/aws-waf-001_08.png)

Web ACLの詳細を確認できます。
![img](https://day-journal.com/memo/images/aws-waf-001_09.png)

<br>

## 指定IPのみ公開

AWS WAFで指定IPのみ公開する方法です。  

事前準備として、Web ACLの設定。

「IP sets」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-002_01.png)

「Create IP set」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-002_02.png)

任意名称を設定。リージョンにCloudFrontを選択。IPv4を選択。対象のIPアドレスを設定。 → 「Create IP set」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-002_03.png)

作成されたIP設定をクリック。
![img](https://day-journal.com/memo/images/aws-waf-002_04.png)

IP設定の詳細を確認できます。
![img](https://day-journal.com/memo/images/aws-waf-002_05.png)

「Web ACLs」をクリック → 対象のWeb ACLをクリック。
![img](https://day-journal.com/memo/images/aws-waf-003_01.png)

「Rules」をクリック → 「Add rules」をクリック → 「Add my own rules and rule groups」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-003_02.png)

IP setを選択。任意名称を設定。IP setに設定したIP設定を選択。Source IP addressを選択。ActionはAllowを設定 → 「Add rule」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-003_03.png)

「Save」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-003_04.png)

Rulesに設定されたのを確認できます。次にデフォルトルールの「Edit」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-003_05.png)

Default actionはBlockを選択。Response codeは403を設定 → 「Save」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-003_06.png)

設定されてるかを確認します。
![img](https://day-journal.com/memo/images/aws-waf-003_07.png)

設定したIPからURLにアクセスするとWebSiteが表示されます。指定IP以外はWebSiteが表示されません。
![img](https://day-journal.com/memo/images/aws-waf-003_08.png)

<br>

## Basic認証公開

AWS WAFでBasic認証で公開する方法です。  

↓ 参考にさせて頂きました。
[AWS WAFだけで、Basic認証を設定してみた](https://dev.classmethod.jp/articles/aws-waf-basic-auth)

事前準備として、Web ACLの設定。

「Web ACLs」をクリック → 対象のWeb ACLをクリック。
![img](https://day-journal.com/memo/images/aws-waf-004_01.png)

「Rules」をクリック → 「Add rules」をクリック → 「Add my own rules and rule groups」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-004_02.png)

Rule builderを選択。任意名称を設定。タイプはRegular ruleを選択。Statementはキャプチャ内容で設定。String to matchにはユーザー名とパスワードをbase64で変換した値を格納。ActionはBlockを設定。Custom responseはキャプチャ内容で設定 → 「Add rule」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-004_03.png)
![img](https://day-journal.com/memo/images/aws-waf-004_04.png)

「Save」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-004_05.png)

作成されたルールをクリック。
![img](https://day-journal.com/memo/images/aws-waf-004_06.png)

ルールの詳細を確認できます。
![img](https://day-journal.com/memo/images/aws-waf-004_07.png)

URLにアクセスするとユーザーとパスワードの入力画面が表示されます。
![img](https://day-journal.com/memo/images/aws-waf-004_08.png)

設定したユーザーとパスワードを入力するとWebSiteが表示されます。

<br>

## リクエスト制限

AWS WAFでリクエスト制限する方法です。  

事前準備として、Web ACLの設定。

「Web ACLs」をクリック → 対象のWeb ACLをクリック。
![img](https://day-journal.com/memo/images/aws-waf-005_01.png)

「Rules」をクリック → 「Add rules」をクリック → 「Add my own rules and rule groups」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-005_02.png)

Rule builderを選択。任意名称を設定。タイプはRate-based ruleを選択。Request rate detailsはRate limitを今回は100で設定。ActionはBlockを設定 → 「Add rule」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-005_03.png)

「Save」をクリック。
![img](https://day-journal.com/memo/images/aws-waf-005_04.png)

作成されたルールをクリック。
![img](https://day-journal.com/memo/images/aws-waf-005_05.png)

ルールの詳細を確認できます。
![img](https://day-journal.com/memo/images/aws-waf-005_06.png)

5分以内に100回以上動的にアクセスしてみます。
![img](https://day-journal.com/memo/images/aws-waf-005_07.png)

5分間に指定回数以上アクセスがあるとブロックされます。指定回数以下になるとアクセスが可能になります。
![img](https://day-journal.com/memo/images/aws-waf-005_08.png)

<br>

AWS WAFを利用することで、Amazon CloudFrontと組み合わせた公開や、今回試したIP制限・Basic認証・リクエスト制限以外にもさまざまな設定が可能です :bulb: 

次回は、Amazon Route 53も組み合わせた方法も紹介できたらと思います。

<br>

AWS WAFとAmazon CloudFrontについて、他にも記事を書いています。よろしければぜひ :bow:
<a href="https://day-journal.com/memo/tags/AWS-WAF" target="_blank">tags - AWS WAF</a>
<a href="https://day-journal.com/memo/tags/Amazon-CloudFront" target="_blank">tags - Amazon CloudFront</a>

やってみたシリーズ :grinning:
<a href="https://day-journal.com/memo/tags/Try" target="_blank">tags - Try</a>

https://qiita.com/dayjournal/items/7989da7374050c5d09b1

https://qiita.com/dayjournal/items/c827a17917127bff3906

<br>
<br>

<a href="https://dayjournal.booth.pm" target="_blank"><img src="https://day-journal.com/memo/images/etc/book.png" alt="book"></a>