AWS WAFをCloudFrontに導入する

2021.03.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、八木です。

ドイツはここ2週間で大分暖かくなり、過ごしやすい季節となりました。

連日天気も良くお散歩日和で、密に気をつけつつ、ライン川沿いを家族で散歩したりしています。

本日は、先日公開した記事「CloudFrontで簡単なディストリビューションを作成しログで動作確認する」に、AWS WAFを導入して結果を確認したので記載します。

AWS WAFについての説明は以下をご参照ください。

AWS WAF の使用を開始する

今回も公式ドキュメントのチュートリアルに沿って作成していきます。

以下のAWS公式ドキュメントを参考にしました。

AWS WAF の使用を開始する

こちらのトピックは6つのステップから構成されています。

トピック

ステップ 1: AWS WAF のセットアップ

ステップ 2: ウェブ ACL を作成する

ステップ 3: 文字列一致ルールの追加

ステップ 4: AWS マネージドルール ルールグループ の追加

ステップ 5: ウェブ ACL の設定を完了する

ステップ 6: リソースのクリーンアップ

ウェブ ACLの設定

ステップ 2: ウェブ ACL を作成する

ステップ 1 はすでに対応完了しているので、ステップ 2から実施します。

AWS マネジメントコンソールから、「WAF & Shield」を選択します。

「Create web ACL」をクリックします。

詳細設定画面が表示されるので、 「Resource type」でCloudFrontディストリビューションを指定し、WebACLの名前を「Name」に入力します。こちらの名前はあとで変えられないので注意。

「Next」を押下して次画面遷移します。

ステップ 3: 文字列一致ルールの追加

「Add rules and rule groups」画面に遷移します。ここで、文字列一致ルールの追加ができます。 「Add rules」の「Add my own rules and rule groups」を押下。

Rule builderを選択し、Rule名とTypeを入力します。

「If a request」で「Exactly matches string」を選択し、 ルールの内容を入れていきいます。 ここでは、ヘッダーを検査して、「User-Agent」に入力した内容が一致した場合、 「Count」する内容にしたいと思います。(今回はSafariの場合をカウントするようログから予めヘッダーを入手) 「Add rule」で追加します。

「Rules」に先ほどの「TestRuleCustom」が追加されたことを確認します。

ステップ 4: AWS マネージドルール ルールグループ の追加

AWS WAFのWebACLでは、ステップ3で設定した個別に自分で設定できるカスタムルールと、 AWSでのマネージドルールを共存させることができます。

AWS マネージドルール ルールグループを追加するには、先ほどの「Add rules and rule groups」画面にて、 「Add rules」から、今度は「AWS managed rule groups」を押下します。

「Add managed rule groups」画面に遷移して、追加したいセクションを開き、「Add to web ACL」をオンにします。 同時に「Set rules action to count」もオンにしておき、countされるように設定しておきます。

「Add rules」で追加します。

「Add rules and rule groups」で2つのルールが「Count」で追加されたことを確認します。

ステップ 5: ウェブ ACL の設定を完了する

「Add rules and rule groups」ページで画面右下の「Next」を押下します。

「Set rule priority」で優先順位を設定します。 ルールは上から実行されます。

次画面で設定内容を確認し、「Create web ACL」を押下します。 「Web ACL」画面で表示を確認します。

Cloudfront側へ設定する

AWSコンソールからCloudfrontへ移動し、「CloudFront Distributions」画面へ遷移します。

「General」の「Edit」を押下し、設定画面へ遷移します。

「AWS WAF Web ACL」を先ほど作成した「TestACL(wafv2)」に変更します。

結果の確認

WAFのWebACLへ戻り、「Overview」からリクエストの結果(Allow/Count)をグラフで確認します。 今回Blockは設定していません。

グラフの下部の「Sampled requests」から、作成した「TestRuleCustom」で、「Count」されていることが確認できます。

マネージドルール「AWS-AWSManagedRulesAdminProtectionRuleSet」も表示させてみますが、こちらは検査項目にMatchしないため、結果の表示はありません。

結論

先日作成したCloudFrontディストリビューションに、AWS WAFを導入し、結果を確認することをやってみました。

カスタムルール、マネージドルールの使い分けでさらに柔軟に設定できるので便利かと思います。 結果の確認も簡単にできるのも良いと思います。

AWS AWFについて、詳しい内容は以下の公式ドキュメントをご参照ください。

AWSWAFドキュメント