目次
はじめに
こんにちは、ディーネットの山田です。
CloudFrontとWAFを組み合わせることでメンテナンスページを表示する機会がありましたので、ブログの内容としてお届けします。
要件としては、特定のIPアドレス以外からのアクセスはすべてメンテナンスページに遷移させることが目的となります。
AWS WAFを使ってメンテナンスページを表示する構成
1. 環境の構成図
AWS環境の構成としては、Amazon CloudFrontにAWS WAFを連携する形で、WAFを利用できるように作成しました。
AWS WAF単体で可能なことは、HTMLを返却することになります。
要件に応じてスタイルシートや画像、スクリプトを使う場合があると思いますが、その場合はAmazon S3を併用してください。
2. 構成要素
- Amazon CloudFront
- Amazon EC2をオリジンとするコンテンツ配信機能を提供します。
- AWS WAF
- WAFのカスタムレスポンス機能を利用して、メンテナンスページを表示します。
実際に設定していきます
前提としては、以下を仮定しております。
- AWS WAFを使った環境は、既に構築済み。
- 他のWAFルールとは、競合しない。
1. WAFのカスタムレスポンス機能にレスポンス内容を登録する
WAFのカスタムレスポンス機能に以下の画像のように作成しました。
利用したHTMLソースは、ChatGPTに作成してもらいました。
今回登録したHTMLソースは、以下です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>メンテナンス中</title>
</head>
<body style="text-align: center; height: 100vh; display: flex; justify-content: center; align-items: center;">
<div>
<h1>ただいま、本ページはメンテナンスを実施しています。</h1>
<p>メンテナンス期間は、2024年4月25日~2024年4月26日です。</p>
</div>
</body>
</html>
2. WAFに登録されたことを確認する
3. 続いてIPアドレスの定義を作成する
要件である特定のIPアドレスを定義する箇所になります。
4. 特定のIPアドレスは許可するルールを作成する
WAFのルールを用いて特定のIPアドレスは許可するルールを作成する
5. デフォルトのWAFルールをBLOCKに変更してメンテナンスページが表示されるように設定する
特定のIPアドレス以外からのアクセスを要件通りメンテナンスページ表示とするためにルール設定を行う
「Default action」を「Block」に変更します。
「Custom response」を「Enable」にチェックして、必要なパラメータを埋めていきます。
メンテナンスページは、SEOの観点からよく「503」応答が利用されますので、「503」応答を設定しました。
動作確認
実際にアクセスしたところ、特定のIPアドレス以外からは以下のようなメンテナンスページが表示されました。
注意点
- 既存のAWS WAFのルールと併用している場合は、メンテナンス期間中にメンテナンスページを表示したログが残ります。
- そのため、AWS WAFのログを解析されている場合はご注意ください。
- 今回のルールは、比較的簡単なものを設定しております。
- 実際には画像やスタイルシートを併用されることが多いと思いますので、そういったパスについてメンテナンスページの対象とならないように予めルールで除外してください。
- AWS WAFのカスタムレスポンス機能で登録可能なサイズは、4KBまでとなります。
- ある程度のHTMLソースであれば、登録可能ですがスタイルシートや画像は基本的に登録が難しいと理解しておいた方がよいです。
プロフィール
テクニカルサポートは卒業して、フロントサイドでお客様環境の構築をさせていただいております。
たまに、テクニカルサポートでご対応させていただくことがあるかもしれませんが、その際はよろしくお願いいたします。
インフラ系のエンジニアですが、時々休日プログラマー(Python、PHP)をやっております。
LINK
クラウドベリージャム:プロフィールページ