CloudFront定額プランへの移行時に既存Web ACLを引き継げるか検証してみた
はじめに
みなさんこんにちは、コンサルティング部の浅野です。
2025年11月にリリースされたCloudFront定額料金プラン(Flat-Rate Pricing Plans)ですが、従量課金のディストリビューションから定額プランに移行する際に「既存のWeb ACLはそのまま引き継げるのか?」が気になりました。
公式ドキュメントには以下の記載があります。
You must have a AWS WAF Web ACL associated with your distribution if you're using a pricing plan. This resource cannot be removed or disassociated from your distribution unless you switch to pay-as-you-go pricing for that distribution.
CloudFront flat-rate pricing plans — Flat-rate pricing plan quotas(Developer Guide)
定額プランではWeb ACLの関連付けが必須です。新規ディストリビューション作成時に定額プランを有効化した場合は、CreatedByCloudFront- という接頭辞のWeb ACLが自動で付与されます。
では、既に従量課金で運用中のディストリビューションに自分で作成したWeb ACLをアタッチしている場合、定額プランに移行するとそのWeb ACLはどうなるのか?そのまま引き継がれるのか、それとも自動付与のWeb ACLに置き換わるのか。ドキュメントには明記されていなかったため、実際に検証してみました。
なお、本記事では以下の2つのWeb ACLを使って検証しています。
aaaaaaaa: マネージドルールのみを含むWeb ACL(引き継ぎ成功)bbbbbbbb: ルールグループを含むWeb ACL(引き継ぎ失敗)
先に結論
- 従量課金時にWeb ACLをアタッチした状態で定額プランに移行すると、Web ACLとルールはそのまま引き継がれる
- ただし、非対応機能(ルールグループ等)を含むWeb ACLが紐づいている場合、定額プラン移行時にプラン選択がブロックされるため事前に解除が必要
- 定額プラン適用中のディストリビューションに既存Web ACLを後からアタッチすることはできない
- 移行後のWeb ACLはCloudFormationでインポートしてIaC管理が可能
検証1: 従量課金で既存Web ACLをアタッチしてから定額プランに移行
従量課金のディストリビューションにWeb ACL aaaaaaaa(AWS-AWSManagedRulesCommonRuleSet を含む)をアタッチしました。
$ aws cloudfront get-distribution --id E2TQSXA3S9BA6T \
--query "Distribution.DistributionConfig.WebACLId"
"arn:aws:wafv2:us-east-1:...:global/webacl/aaaaaaaa/3f969be6-c14c-453d-b0fa-a0b7c7fff003"
この状態でCloudFrontコンソールからFreeプランに移行したところ、Web ACL aaaaaaaa とマネージドルールがそのまま引き継がれていました。

セキュリティタブにWeb ACL aaaaaaaa (WAFv2) が Enabled と表示され、Manage rulesパネルには AWS-AWSManagedRulesCommonRuleSet が確認できます。既存Web ACLは引き継がれることが確認できました。
検証2: 非対応機能を含むWeb ACLではプラン選択がブロックされる
別のWeb ACL bbbbbbbb にはルールグループ TestRuleGroup を含めていました。

このWeb ACLが紐づいたディストリビューションでプラン選択画面に進むと、Freeを含むすべてのプランがグレーアウトされ選択できません。

定額プランではルールグループが非対応機能(Unsupported features)に該当するため、Web ACLに含まれているとプラン移行がブロックされます。移行前にルールグループを解除する必要があります。
検証3: 定額プラン適用中のディストリビューションに既存Web ACLをアタッチできるか
定額プラン(Free)を適用済みのディストリビューションに、既存のWeb ACL aaaaaaaa を後からアタッチできるか試しました。
WAFコンソールからWeb ACL aaaaaaaa のリソース管理画面でCloudFrontディストリビューションを関連付けようとしたところ、以下のエラーが表示されました。

Failed to associate web ACL arn:aws:wafv2:us-east-1:...:global/webacl/aaaaaaaa/... with CloudFront distribution ...: You can't remove or replace the web ACL for your distribution. Distributions with a pricing plan subscription must have a web ACL resource.
定額プランではプラン専用のWeb ACLが自動付与されるため、既存のWeb ACLを後からアタッチすることはできません。
検証4: 移行後のWeb ACLをCloudFormationで管理
引き継いだWeb ACLをCloudFormationで管理できるか確認しました。
インポート
既存のWeb ACL aaaaaaaa を resource import でCloudFormationスタックにインポートします。
$ aws cloudformation create-change-set \
--stack-name flat-rate-webacl-test \
--change-set-name import-webacl \
--change-set-type IMPORT \
--template-body file://cfn-webacl-import.yaml \
--region us-east-1 \
--resources-to-import '[{
"ResourceType": "AWS::WAFv2::WebACL",
"LogicalResourceId": "WebACL",
"ResourceIdentifier": {
"Name": "aaaaaaaa",
"Scope": "CLOUDFRONT",
"Id": "3f969be6-c14c-453d-b0fa-a0b7c7fff003"
}
}]'
$ aws cloudformation execute-change-set \
--stack-name flat-rate-webacl-test \
--change-set-name import-webacl \
--region us-east-1
ルール追加
テンプレートにIPレート制限ルール CFn-RateLimit-Test を追加してスタック更新を実行します。
$ aws cloudformation update-stack \
--stack-name flat-rate-webacl-test \
--template-body file://cfn-webacl-import.yaml \
--region us-east-1
IMPORT_COMPLETE の後、UPDATE_COMPLETE となりルール追加が正常に反映されました。

CloudFrontのセキュリティタブでも、CloudFormation経由で追加した CFn-RateLimit-Test ルールが表示されており、IaC管理が問題なく機能しています。

最後に
| 観点 | 結果 |
|---|---|
| 従量課金で既存Web ACLをアタッチしてから移行 | Web ACLとルールがそのまま引き継がれる |
| 非対応機能(ルールグループ等)を含むWeb ACL | プラン選択がブロックされるため事前に解除が必要 |
| 定額プラン適用後に既存Web ACLをアタッチ | 不可(エラーになる) |
| 移行後のIaC管理 | CloudFormationでインポート・ルール追加が可能 |
定額プランへの移行を検討されている方で、既存のWeb ACLやWAFルールをどう扱えばよいか気になっている方の参考になれば幸いです。







