AWS WAF の移行ツールで作成されるテンプレートを修正して WAF v2 を作成してみた

AWS WAF の移行ツールで作成されるテンプレートを修正して WAF v2 を作成してみた

移行できるルールが大量に存在する Web ACL の移行だったら便利なのではないでしょうか。
Clock Icon2025.05.21

カスタマーサクセス部 運用支援チームのいたくらです。

はじめに

WAF Classic から WAF v2 に移行するときに migration wizard という移行ツールが使えるのはご存じでしょうか?
この移行ツールは制限事項 (※1) もあるので万能ではありませんが、テンプレート作成が苦手な方にとってはテンプレート作成をゼロから始める必要がないので、便利なツールだと思います。

※1 制限事項についてはこちらのブログで紹介されているのでご一読ください

今回は移行ツールによって作成された Web ACL 構築テンプレートをトラフィックログが出力できるように修正し、デプロイするまでをやってみました。

やってみた

1. 移行ツールを使用してテンプレートを作成

移行ツールを使用してテンプレートを作成する方法は以下を参照ください。

2. 移行ツールで作成したテンプレートをローカルにダウンロード

まずは出力先に指定した S3 に移動します。
aws-waf-migration- で始まる S3 バケットをクリックします。
1-2.png

さらに階層を下げていくと、<WAF Classic の Web ACL 名 (ハイフンは削除される) > + <ランダムな数列>.template というオブジェクトが存在するので、それをダウンロードします。
2-3.png

3. VS Code でテンプレートを修正

ダウンロードしたファイルを VS Code で開きます。JSON ファイルは 1 行に圧縮された形になっています。
3.png

コマンドパレット: Ctrl + Shift + P (Windows/Linux) または Cmd + Shift + P (macOS) を押して、「format」と入力し、「ドキュメントのフォーマット」を選択します。
(キーボードショートカットでも出来ます:Shift + Alt + F (Windows/Linux) または Shift + Option + F (macOS))
4.png

すると VS Codeの設定に従って自動で整形されます。
5.png

移行ツールで出力されたテンプレートは以下です。(今回は Web ACL のみの簡易なリソースで試しています)

移行ツールで出力されたテンプレート(整形済み)
{
    "Resources": {
        "Stacktestwafv11740117922405": {
            "Type": "AWS::WAFv2::WebACL",
            "Properties": {
                "DefaultAction": {
                    "Allow": {}
                },
                "Scope": "REGIONAL",
                "VisibilityConfig": {
                    "CloudWatchMetricsEnabled": true,
                    "MetricName": "testwafv1",
                    "SampledRequestsEnabled": true
                },
                "Description": "testwafv1",
                "Name": "test-wafv1a026cf91-159b-4e7a-99ac-1d4329ab1090",
                "Rules": []
            }
        }
    }
}

Web ACL 名を修正したり、WAF のトラフィックログを出力する設定を追記したテンプレートが以下です。
修正・追記した行はハイライトしています。

修正したテンプレート
{
    "Resources": {
+       "S3BucketForWAFLog": {
+           "Type": "AWS::S3::Bucket",
+           "Properties": {
+               "BucketName": "aws-waf-logs-test-wafv2-xxxxxxxxxxxx",
+               "AccessControl": "Private",
+               "PublicAccessBlockConfiguration": {
+                   "BlockPublicAcls": true,
+                   "BlockPublicPolicy": true,
+                   "IgnorePublicAcls": true,
+                   "RestrictPublicBuckets": true
+               },
+               "LifecycleConfiguration": {
+                   "Rules": [
+                       {
+                           "Id": "DeleteWAFLogsAfterOneYear",
+                           "Status": "Enabled",
+                           "ExpirationInDays": 365
+                       }
+                   ]
+               }
+           }
+       },
+       "WebACL": {
            "Type": "AWS::WAFv2::WebACL",
            "Properties": {
                "DefaultAction": {
                    "Allow": {}
                },
                "Scope": "REGIONAL",
                "VisibilityConfig": {
                    "CloudWatchMetricsEnabled": true,
+                   "MetricName": "test-wafv2",
                    "SampledRequestsEnabled": true
                },
+               "Description": "wafv2 for test",
+               "Name": "test-wafv2-20250521",
                "Rules": []
            }
        },
+       "WAFLog": {
+           "Type": "AWS::WAFv2::LoggingConfiguration",
+           "Properties": {
+               "LogDestinationConfigs": [
+                   {
+                       "Fn::GetAtt": [
+                           "S3BucketForWAFLog",
+                           "Arn"
+                       ]
+                   }
+               ],
+               "ResourceArn": {
+                   "Fn::GetAtt": [
+                       "WebACL",
+                       "Arn"
+                   ]
+               }
+           }
+       }
    }
}

この修正したテンプレートを使用して、WAF v2 の Web ACL を作成します。

4. CloudFormation で WAF v2 を作成

CloudFormation に移動し、「新しいリソースを使用 (標準)」をクリックします。
6.png

「既存のテンプレートを選択」で、「テンプレートファイルのアップロード」を選択し、先ほど修正したテンプレートをアップロードします。
アップロードが完了したら「次へ」をクリックします。
7.png

スタック名を入力し、「次へ」をクリックします。
8.png

スタックオプションの設定は特に変更せず、そのまま「次へ」をクリックします。
9.png

確認画面が出てくるので内容を確認して、最後に「送信」をクリックします。
スタックのイベントタブが表示されるので CREATE_COMPLETE まで待ちます。
10-1.png

スタックのステータスが CREATE_COMPLETE になったことを確認できました。
11.png

WAF のサービスページに移動して、作成された Web ACL を確認します。
左の「Web ACLs」より Web ACL の一覧を確認すると、CloudFormation で作成した Web ACL が確認できます。
12.png

Web ACL 名をクリックして詳細画面に移動し「Logging and metrics」タブを開くと、テンプレート通りにトラフィックログが出力されるように設定できていることが確認できます。
13-1.png

あとがき

テンプレートをゼロから作成するのが楽勝なつよつよエンジニアにはあまり必要がないかもしれないですが、テンプレート作成が苦手な方でも簡単に移行できるように移行ツールが存在するので、是非活用いただけたらと思います。

この記事がどなたかのお役に立てれば幸いです。

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。
サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.