はじめに

こんにちは!そしてこんばんは。
クラウドインテグレーション事業部の 大嵩です。
今回は、2025年の9月に廃止となります、「AWS WAF Classic」からの移行方法について
業務の中で検証を行いましたので紹介します!

WAF Classicが廃止に!

スクリーンショットのように、AWS WAF Classic は来年に廃止となるため、メッセージが表示されています。
ALBやCloudFrontにWeb ACLsを紐づけている場合は早急に移行が必要です!

検証したこと

移行するにあたって、私の中で1つの疑問が生じました。
「WAFって2つ関連付けすることはできるのか?」

その理由として、移行するにあたり2つの方法が浮かんでいました。

  • WAF Classicを関連付けている状態で WAFv2 を追加、その後Classicを外す。
  • WAF Classicを外し、その後WAFv2を関連付ける。

この内の前者ができれば、WAFを外すというリスクを減らして移行ができるのではないかと思いました。

実際に検証を実施

まずはテスト用のALBを作成

はじめに、WAFを紐づけるためのALBを作成します。
今回は紐づけのテストになりますので、簡単に作成します。

WAF Classic で Web ACLsを作成

次に、WAF ClassicでWeb ACLsを作成。
同時に、先程のALBを関連付けてしまいます。
こちらも簡単に作成します。
(不要なアクセスが怖いため、デフォルトアクションはBlockとします。)

適用を確認

ALBの統合タブで関連付けされていることを確認します。

WAFv2で Web ACLsを作成

移行先のWAFv2で Web ACLsを作成します。
ここでは、何も関連付けのない状態で作成します。
同じくデフォルトアクションはBlockとします。

WAFは2重で関連付けできるのか

いよいよここで本題の、2重で関連付けられるのか検証していきます。
WAFv2を作成してあるので、そこに追加で関連付けてみます。

なんと関連付けが成功しました!!

WAF Classic側を確認

WAFv2への関連付けは成功しましたが、WAF Classicがどうなっているのか見てみましょう。

結果としては、関連付けが外れている状態でした。

AWSドキュメントを確認

ここで、検証を見ていた上司に「AWSドキュメントを確認してみ」と言われたので見てみると、

しっかり書いてありました

You can associate each AWS resource with only one web ACL. The relationship between web ACL and AWS resources is one-to-many.
各 AWS リソースは、1 つの Web ACL にのみ関連付けることができます。Web ACLとAWSリソースの関係は1対多です。

https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-associating-aws-resource.html

つまり、
「AWSリソースに対して関連付けることができるWeb ACLsは1つだけ」
ということです。

この制約を守るために、自動でWAF Classicから関連付けが外れたということになります。

まとめ

お恥ずかしながら、AWSドキュメントを確認せずに思いついたことに対して検証を実施してしまいました。。
ですが、実際に手を動かして動きを見た後にドキュメントを読んだことで更に理解が深まりました。
移行方法としては、検証結果の通り自動で外れることがわかったため、同様の手順を踏む対応となりました!

WAF Classic からの移行に関しまして、どなたかの参考になりますと幸いです!