
CloudFront配下のWEBページをAWS WAFを使ってメンテナンスページを表示する
2017.10.11
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、いわもんです。
すっかり秋です、あっという間に10月です。
さて、早速ですが、
やりたい事
WEBサイトのメンテナンスを行う際に、メンテナンス時間はメンテナンスページの表示を行う場合があると思います。
その際、CloudFront配下のWEBサイトでは、CloudFrontでOriginの入れ替えや、
オリジン側でメンテナンスページへ差し替えなどの作業が発生しますが、割と手間な作業です。
また、メンテナンス中でも動作検証などのため特定IPからの接続は許可するなどの設定も必要な場合があります。
そこで、より簡単にメンテナンスページの表示し、メンテナンス中はの特定IPからのみの接続を許可する設定方法です。
概要
まず構成です。

構成の概要
- 前段にCloudFront
- メインコンテンツ(behaviorのDefault)のオリジンにはALB配下のEC2を用いる
- メンテナンスページを表示するためS3バケットもオリジンとして利用
- AWS WAFをALBに適用する
やってみる
S3
- Sorry用のコンテンツを設置するバケットを作成
- バケットに
/sorry/mainte.htmlを設置
CloudFront
Origins
- Sorryサーバー用のS3バケットをオリジンとして追加
Behaviors
sorry/*を追加し、オリジンを(Sorry用の)S3バケットに指定
Error Pages
- Create Custom Error Responseにて
403指定 - Customize Error Responseを
Yes - Response Page Path を
/sorry/mainte.htmlに指定 - HTTP Response Code を
200に指定
AWS WAF
- Create web ACLにてALCを作成
Name web ACL
- AWS resource to associateにてCloudFrontのオリジンに指定しているALBを選択
Create conditions
- String match conditionsにて
Create conditionを選択する - Part of the request to filter onにて
Headerを選択 - Headerには
X-Forwarded-Forを直接入力する。 - Match typeにて
Conteinsを選択 - Transformationは
Noneを選択 - Value to matchにて
許可したいIPアドレスを記載します。
Create rules
- Rule typeにて
RegulerRuleを選択します。 - Add conditionsを選択
- When a request
doesとmatch at least one of the filters in the string match conditionを選択し作成済みconditionを選択する
- When a request
- Rules
作成したRuleを選択- Actionは
Allowを選択 - Default actionは
Block all requests that don't match any rulesとします。
- Confirm and createにてルールが作成されます。
メンテナンスの解除
- Web ACLs より対象のルールを選択
- Rulesタブから
AWS resources using this web ACLにある割当ELBを削除することで解除できます。
解説
CloudFrontとS3
- CloudFrontのCustomize Error Responseを用いたSorryページの表示と同じ仕組みでメンテナンスページを表示させます。
- 参考:CloudFrontのCustom Error Responseを利用して、S3上にあるSorryページを表示する
- その際、ELBでは
403エラーが出力されますが、あくまでもメンテナンス画面のため クライアント側へ返すレスポンスコードはCustomize Error Responseの設定にて200に差し替えます。
AWS WAF
- AWS WAFにて特定のIPを許可します。
- CloudFront配下となるため、ELBへの接続もとのIPは全てCloudFrontのエッジサーバーとなります。
- Headerの
X-Forwarded-Forの値を見ることで、各クライアントのIPアドレスが判別で、AWS WAFにて特定のIPに対し接続許可を行うことができます。
今日のわさび様
わさびさん、秋になってでかくなった?







