🛡️

【AWS】今からでも間に合うAWS WAF ClassicからAWS WAF (v2) へのマイグレーション

に公開

はじめに

AWS WAFを利用している方は既知の通り、AWS WAF Classic のサポートが2025年9月30日に終了しますしました。
類似記事は多く存在しますが、終了直前ながらたまたまWAFv2へ移行する機会がありましたので、
せっかくですから記事にしました。

まだ移行をお済みでない方はぜひ参考にしていただければと思います。

※記事の添付画像はアカウント情報を伏せるため、多数のモザイクがかかっている点、あらかじめご了承下さい。

移行手順

WAF Classicの確認

まずはコンソールからAWS WAF Classicのページへ進みます。
(ページへの進み方は割愛します)

まずはお使いのWeb ACLが残っていないか、各リージョン確認します。
画面は東京リージョンですが、ここでは1つのWeb ACLに「8つのルール」と「1つのALB」に使用されているものをWAFv2へ移行します。
必ず、Rulesタブの「AWS resources using this web ACL」で使用しているリソースを確認しておいて下さい。
wafc01

migration wizardを開く

次に、マイグレーションウィザードを開きます。
以下URLから開くか、もしくは画面上部に「migration wizard」へのリンクが表示されていると思いますので、そこから開きます。
(以下URLは東京リージョンに指定されています)
https://console.aws.amazon.com/wafv2/homev2/web-acls/migrate?region=ap-northeast-1

wafc02

マイグレーション手順

ここでは移行したいWeb ACLを選択します。
マイグレーションはS3バケットとCloudFormationを使用します。
マイグレーションに使用するS3バケットは、aws-waf-migration-から始まるバケットが必要です。
今回は「Create new」から作成しました。
wafc03
バケット名はaws-waf-migration-{WEBACL名}にすると分かりやすいかもしれません。(ただし世界でユニークな名前でなければ作成できない)
wafc04

バケット作成後、先程のマイグレーション画面に戻ると、作成したバケットを選択できるようになります。
選択したら、S3バケットポリシーの設定はデフォルトのままで良いので、「Next」で次に進みましょう。
wafc05

マイグレートを実行するCloudFormationのテンプレートを作成する確認です。
「Start creating CloudFormation template」を選択します。
wafc06

「Create CloudFormation stack」を選択します。
wafc07

CloudFormationの画面が開きます。
ここではそのまま「次へ」と進んでも良いのですが、デフォルトのままだと任意の名前のWebACL名にならないという情報を確認していたので、少し遠回りしてスタックの編集画面に飛びます。
「Infrastructure Composerで表示」を選択します。
wafc08

ここでもし以下のように「互換性のないテンプレート」という画面が出た方は、S3バケット名に問題があるかもしれません。
完全な解決方法はわかりませんが、バケット名に「.(ピリオド)」を使ったもので進めると以下にぶち当たり、使わない名前にしたら解決出来ました。
WebACL名をカスタマイズしたい方は、S3バケットの作成からやり直すことをおすすめします。
wafc09

編集するポイントは、"Type":"AWS::WAFv2::WebACL"Properties.Nameです。
ここを元のwaf classicで設定していたWeb ACL名と同じにすれば、同名でWAFv2に移行できます。
画面はJSONですが、YAML表示でも同様で、仕様が同じなら皆さん上部にすぐ見つけられるかと思います。
編集したら念の為上部の「検証」ボタンを選択し、問題なければ「テンプレートを作成」を選択します。
wafc10

確認画面が表示されますので、「確認してCloudFormationに進む」を選択します。
wafc11

スタック作成画面に戻り、「テンプレートはInfrastructure Composerから正常にインポートされました。」と表示されるので、「次へ」を選択します。
wafc12

次にスタック名を入力します。
スタックを編集しないと、自動でAWSWAFMigration-WebACL-xxxxxxxxxという名前になりますが、スタック編集すると全部自分で名付けることになります。
ここは任意の名前をつけて下さい。
名前を入力したら「次へ」を選択します。
wafc13

スタックオプションの設定です。
今回は何も変更しないのでこのまま「次へ」を選択します。
wafc14

確認して作成の画面です。
wafc15
下にスクロールし、「送信」を選択します。
wafc16

あとはCloudFormationの画面で、作成したスタックがCREATE_COMPLETEになるのを待ちましょう。

WAFv2の確認

CloudFormationのスタックが完了したら、早速指定したWebACLが無事マイグレーションされたか確認しましょう。
今回移行したWebACLは8つのAllowルールが設定されていましたが、
確認すると、きちんと同じ優先度順で同名の設定がされていました。
wafc17

この時点で「WAFv2に無事移行出来ました、めでたしめでたし」という記事がいくつか見られましたが、ここで安心しないで下さい。
リソースとの関連付けは自動でやってくれない仕様ですので、ここで終わってしまうと2025年10月からWAFが適用されない状況になるでしょう。

WAFに関連づいていたリソースを新しいWAFのWebACLに変更

移行したWebACLの「Associated AWS resources」タブから「Add new resources」を選択します。
今回は1つのALBに使用していました。
最初の方で確認しましたWAF classic側で使用しているリソースを、以下の画面から指定します。
wafc18

設定を終えたら、念の為WAF classic側を確認してみましょう。
設定してあった関連リソースの表示が消えているのが確認できるかと思います。
このように、WAFv2で関連リソースを設定してしまえば、WAF classic側で自動で削除してくれるようです。
wafc19

これで本当にめでたしめでたしといったところでしょうか?

おわりに

というわけで、ありふれた内容の記事でしたが、期限が迫っていることもあり、まだ需要があるのではないかと思い執筆いたしました。
移行がまだ済んでいない方はお早めにご確認下さい。
他の記事と合わせて誰かの参考になれば幸いです。

賞味期限約1ヶ月の記事を書くのもそんなに悪くないですね。
というわけで、ここまで読んでいただきありがとうございました。

参考

https://aws.amazon.com/jp/blogs/news/migrating-rules-from-aws-waf-classic-to-new-aws-waf/
https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/waf-migrating-caveats.html
https://dev.classmethod.jp/articles/how-to-specify-the-name-of-webacl-when-migrating-to-wafv2/

Discussion