AWS
S3
waf
CloudFront

3ステップでお手軽!WAFでIP制限をかけCloudFront経由でS3から画像を取得する


概要

おはこんばんにちは@kaoryuuuです。

この記事LIFULLその2 Advent Calendar 2018の12日目の記事です。

今回は3ステップで簡単に特定のIPのみからCloudFrontを経由してS3にある画像へアクセスする方法を試してみたいと思います。


やること

目的:特定のIPのみからCloudFrontを経由してS3にある画像へアクセス

大きく分けて3つの作業になります

1. S3バケットの作成

2. CloudFrontの設定

3. WAFの設定


S3バケット作成

ここに配信を行うコンテンツを格納します。


1.作成

バケット名はユニーク名なので適当にとは言えませんがわかりやすいものを。

スクリーンショット 2018-12-12 16.33.42.png


2.オプションの設定

必要であればログの設定も行ってください。

ここでは特に入力せずに進みます。

スクリーンショット 2018-12-12 16.35.07.png


3.アクセス許可の設定

こちらも特にデフォルトのまま進みます。

スクリーンショット 2018-12-12 16.35.24.png


4.確認&完成

確認ができたらバケットの作成は完了です。

後ほど確認用で適当な画像を使用しますのでアップロードしておいても問題ないです。

続いてCloudFrontの設定を行います。

スクリーンショット 2018-12-12 16.36.13.png


CloudFront

概要


Amazon CloudFront は、データ、動画、アプリケーション、および API をすべて開発者にとって使いやすい環境で、低レイテンシーの高速転送により視聴者に安全に配信する高速コンテンツ配信ネットワーク (CDN) サービスです。


要は自前のサーバーやS3から直接取得しにいかずに、その手前にCloudFrontを置くことでキャッシュサーバーやプロキシサーバーの役割を担ってくれているものです。便利ですね😃


GetStart

Create Distributionを選択し、Webの「Get Staeted」を選択

スクリーンショット 2018-12-12 16.37.19.png


OriginSettings

先ほど作成したバケッド名が出てくるので選択

foo.png

Restric Bucket Accessを「YES」に変更

こちらを設定することによりバケットにあるコンテンツへのアクセスをCloudFrontからのみに制限することができます。

hoge.png

あとは今回は特に設定を変更せずにCreateDistributionを行います。

※ドメインを指定する場合はRoute53の設定を行う必要があります。

Distibutionsが作成できると、起動を開始しますが数分かかるのでEnableになるまで待ちましょう。


WAFの導入

現在の状況ではS3から直接アクセスすることはできないですが、CloudFront経由でのリンクを知っていると外部から参照することができてしまいます。それを防ぐためにWAFを利用して制限をかけていきます。

IP制限だけでなく他にも用途は多様ですが今回は割愛します。

https://aws.amazon.com/jp/waf/


Create conditions

WAFのページから「Create web ACL」を選択

「IP match conditions」を今回は利用します。

fuga.png

作成するルール名と許可したいIPをこちらに設定します。

完了したら「Create」👈

foo.png

作成ができたらこの画面は完了です。次のページへ進みます。


Create Rule

「Create Rule」を選択し、先ほど作成した条件を設定します。

完了したら「Create」👈

hoge.png

設定した条件にマッチングした場合にどうするかを設定します。

今回は「Allow」を選択します。

Default actionは「Block all requests…」を選択します。

※条件にマッチしなかった場合の挙動ですね。

aaa.png


Review and create

設定が確認、完了できたらWAFの設定は終わりです。


CloudFrontにWAFの設定を反映させる

CloudFrontに移動し、アクセス制限をかけたいCloudFront Distributionを選択、

General の「Edit」を押す👈

「AWS WAF Web ACL」の項目を選択し、先ほど作成したWAFのACLを選択します。

fuga.png

これにて諸々の設定は完了になります。


確認作業

CloudFrontのドメイン名をメモし、S3へアップロードした画像名を組み合わせて正しく表示できるか確認し、

また特定のIPのみ表示できるかチェックします。

sasasa.png

エラーの場合は403 ERRORが表示されるはずです。

<ドメイン名>/

スクリーンショット 2018-12-12 17.54.11.png


参考

https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/how-aws-waf-works.html

https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/what-is-aws-waf.html

https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/distribution-web-awswaf.html


余談

WAF入れてるからリクエストの監視などもできますね👏

スクリーンショット 2018-12-12 18.37.47.png


最後に

間違い等ありましたらコメントよろしくお願いします。