免責事項
- 内容は記載時点のものです。
- 将来的には、この方法は誤りになる可能性があります。
- 大枠は実体験からくる事実ベースですが、下書きおよび細部はCopilot製なので、細部に誤りがあるかもしれません。
- チェックはしていますが、見落としている可能性があります。
はじめに
AWS上で ALB + EC2 (WordPress) 構成で運用しているサイトに、CloudFront + WAF を適用しましたが、その際にいくつかハマったことがありました。
ここでは、ハマった内容と回避策を、備忘録として、 AWS公式情報や技術記事で裏付けた内容 と合わせて記録します。
CloudFront + WAFを適用することになった背景
当該サイトで、不定期に発生する DoS攻撃やBot対策 の必要性が高まったためです。
※背景についてはこれ以上は触れません。
ハマりポイントと対応策(+裏付け)
① 証明書の問題:CloudFrontとALBで同一証明書を使う罠
問題点
- CloudFrontでカスタムドメインを使う場合、ACM証明書はus-east-1リージョンで発行必須。
- ALB側もHTTPSで利用する場合、ALBに証明書が必要。
- 同じ証明書を使うと、Route53の名前解決でCloudFrontにしか向かなくなる競合が発生。
対応策
- 新しいALBを作成し、ワイルドカード証明書を割り当てることで回避。
- CloudFrontには既存のルートドメイン証明書を設定し、名前解決の競合を防止。
裏付け
- AWS公式:CloudFrontとSSL証明書の要件
- 実運用事例でも「ALBにワイルドカード証明書を適用」が推奨1,2。
② WordPressトップページのキャッシュ問題
問題点
- WordPressのトップURLは
index.phpが省略されているため、
「/」をキャッシュ対象にすると、ログイン状態やコメントフォームが正しく反映されず、表示崩れやリダイレクトループが発生。
対応策
- TOPページはキャッシュ対象から除外。
- 動的要素を含むページ(
wp-admin/*,wp-login.php,wp-json/*)はキャッシュ禁止。
裏付け
③ WAFのマネージドルールとWordPressアップロードの衝突
問題点
- AWS WAFの
SizeRestrictions_BODYは、リクエストボディが8KB超でブロック(最近は最大64KBまで緩和可能)。 -
CrossSiteScripting_BODYは、ファイルメタデータやPOST本文に含まれるランダム文字列を誤検知することがある。 - WordPressの画像・動画アップロードでこれらに抵触する確率が高い。
対応策
-
ルールの緩和とカスタムルールの追加で回避。
-
以下のパスを除外:
/wp-admin/async-upload.php /wp-admin/admin-ajax.php /wp-json/wp/v2/media /wp-admin/post.php
裏付け
- AWS公式:WAFでアップロードがブロックされる理由
- 実運用事例でも「特定パスを除外し、ルールを緩和」が推奨5,6。
補足
- 各事象ごとに単独の情報はあるが、まとまっている情報は少ない模様。
- CloudFrontやWAF適用前に知っていれば、障害や手戻りを防げた。
- 未来の自分のため、そして同じ課題に直面する方のために記録。
まとめ
- 証明書の競合回避 → ALBにワイルドカード証明書を設定。
-
TOPページキャッシュ禁止 →
/はキャッシュしない。 - WAFルール調整 → マネージドルールを緩和し、特定パスを除外。
AWSでWordPressを運用しつつ、CloudFront + WAFを適用する際は、
これらのポイントを事前に押さえておくとスムーズに移行できる(はず)