概要
おはこんばんにちは@kaoryuuuです。
この記事LIFULLその2 Advent Calendar 2018の12日目の記事です。
今回は3ステップで簡単に特定のIPのみからCloudFrontを経由してS3にある画像へアクセスする方法を試してみたいと思います。
やること
目的:特定のIPのみからCloudFrontを経由してS3にある画像へアクセス
大きく分けて3つの作業になります
- S3バケットの作成
- CloudFrontの設定
- WAFの設定
S3バケット作成
ここに配信を行うコンテンツを格納します。
1.作成
バケット名はユニーク名なので適当にとは言えませんがわかりやすいものを。
2.オプションの設定
必要であればログの設定も行ってください。
ここでは特に入力せずに進みます。
3.アクセス許可の設定
4.確認&完成
確認ができたらバケットの作成は完了です。
後ほど確認用で適当な画像を使用しますのでアップロードしておいても問題ないです。
続いてCloudFrontの設定を行います。
CloudFront
概要
Amazon CloudFront は、データ、動画、アプリケーション、および API をすべて開発者にとって使いやすい環境で、低レイテンシーの高速転送により視聴者に安全に配信する高速コンテンツ配信ネットワーク (CDN) サービスです。
要は自前のサーバーやS3から直接取得しにいかずに、その手前にCloudFrontを置くことでキャッシュサーバーやプロキシサーバーの役割を担ってくれているものです。便利ですね😃
GetStart
Create Distributionを選択し、Webの「Get Staeted」を選択
OriginSettings
Restric Bucket Accessを「YES」に変更
こちらを設定することによりバケットにあるコンテンツへのアクセスをCloudFrontからのみに制限することができます。
あとは今回は特に設定を変更せずにCreateDistributionを行います。
※ドメインを指定する場合はRoute53の設定を行う必要があります。
Distibutionsが作成できると、起動を開始しますが数分かかるのでEnableになるまで待ちましょう。
WAFの導入
現在の状況ではS3から直接アクセスすることはできないですが、CloudFront経由でのリンクを知っていると外部から参照することができてしまいます。それを防ぐためにWAFを利用して制限をかけていきます。
IP制限だけでなく他にも用途は多様ですが今回は割愛します。
https://aws.amazon.com/jp/waf/
Create conditions
WAFのページから「Create web ACL」を選択
「IP match conditions」を今回は利用します。
作成するルール名と許可したいIPをこちらに設定します。
完了したら「Create」👈
作成ができたらこの画面は完了です。次のページへ進みます。
Create Rule
「Create Rule」を選択し、先ほど作成した条件を設定します。
完了したら「Create」👈
設定した条件にマッチングした場合にどうするかを設定します。
今回は「Allow」を選択します。
Default actionは「Block all requests…」を選択します。
※条件にマッチしなかった場合の挙動ですね。
Review and create
設定が確認、完了できたらWAFの設定は終わりです。
CloudFrontにWAFの設定を反映させる
CloudFrontに移動し、アクセス制限をかけたいCloudFront Distributionを選択、
General の「Edit」を押す👈
「AWS WAF Web ACL」の項目を選択し、先ほど作成したWAFのACLを選択します。
これにて諸々の設定は完了になります。
確認作業
CloudFrontのドメイン名をメモし、S3へアップロードした画像名を組み合わせて正しく表示できるか確認し、
また特定のIPのみ表示できるかチェックします。
エラーの場合は403 ERRORが表示されるはずです。
<ドメイン名>/
参考
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
余談
最後に
間違い等ありましたらコメントよろしくお願いします。