
AWS環境でのWebアプリケーションを守るために、AWS WAFを活用する企業が多いです。AWS WAFを有効にするにはいくつかの方法がありますが、ALBにアタッチする方法が、その1つです。
この記事では、AWS WAFをALBに設定する方法を詳しく解説します。設定後の運用における注意点についても紹介します。
目次
そもそもALBとAWS WAFとは?
AWS WAFをALBにアタッチする方法を説明する前に、まずはALBとAWS WAFの基本的な概念を理解しておきましょう。
ALB(Application Load Balancer)とは?
ALB(Application Load Balancer)とは、AWSが提供するロードバランサーの1つで、WebサイトやWebサービスを含めたアプリケーション層へのアクセスを複数のEC2(サーバ)に分散することができます。
Webアプリケーションへのアクセスが集中する場合、EC2が処理しきれなくなり、Webアプリケーションが動作しなくなり、システム(サイト)ダウンしてしまうため、事業にも大きな影響を与える恐れがあります。
ALBのようなロードバランサーを利用することで、Webアプリケーションへのアクセスを複数のEC2に振り分けることができるので、不安定な処理や停止などを回避することができ、安定的な稼働を実現できます。
AWS WAFとは?
AWS WAF(Web Application Firewall)は、AWSが提供するWAFです。主にクロスサイトスクリプティング(XSS)やSQLインジェクションなど、Webアプリケーションの脆弱性を突く攻撃を防御するセキュリティサービスとなります。
ルール(シグネチャ)を設定することで、AWS WAFが悪意のあるアクセスや攻撃者からのアクセスを検知し、ブロックすることができます。
さらに、特定の国や特定のIPアドレスもしくはBotからのアクセスもAWS WAFによって防御できるので、Webアプリケーションをサイバー攻撃から守る方法としてAWS WAFが多くの企業で導入されています。
AWS WAFをALBに設定する方法とは?
AWS WAFをALBにアタッチする方法は2つあります。ALB側で設定する方法と、AWS WAF側で設定する方法です。ここではAWS WAF側から設定する方法を紹介します。
ALB側での設定方法について詳しくはこちら:
AWS WAF側でWeb ACLを作成する
まず、AWS WAF側でWeb ACLを作成します。Web ACLはトラフィックをフィルタリングするためのルールの集まりです。
- AWS Management Consoleにサインインし、AWS WAFコンソールを開きます。
- “Web ACLの作成”を選択し、Web ACLを作成します。
- “Name”欄に、このWeb ACLの識別に使用する名前を入力します。必要に応じて、“Description – optional”欄に、Web ACLの詳しい説明を入力します。
- “CloudWatch metric name”欄で、必要に応じてデフォルト名を変更します。有効な文字については、コンソールのガイダンスに従ってください。特殊文字、空白、“All”や“Default_Action”などのAWS WAF用に予約されたメトリクス名は使用できません。
- “Resource type”で、“Regional resources(リージョンリソース)”を選択し、“Region”からALBが配置されているリージョンを選択します。
- Associated AWS resources – optionalにある“Add AWS resources”を選択し、そして“Application Load Balancer”を選択し、アタッチしたいALBの名前をチェックします。
- “Next”を選択して次の設定に進みます。
AWS WAFのルールを追加する
Web ACLを作成したあと、不正アクセスの検知や遮断に使われるルールを追加します。ルールは、許可またはブロックするトラフィックを定義します。
- 「Add rules and rule groups」ページで、「Add rules」→「Add my own rules and rule groups」→「Rule builder」→「Rule visual editor」の順に選択します。
- 「Name」に検知ルールの名前を入力します。
- 「Type」で「Regular rule」を選択します。DDoS攻撃を対策するレートベースルールを作成する場合は「Rate-based rule」を選択します。
- 「If a request」で「matches the statement」を選択します。他のステートメントやステートメントの組み合わせを利用する場合もここで設定できます。
- 「Statement」の「Inspect」でAWS WAFで検査する部分を選択します。通信の本文を検査したい場合は「Body」を選択します。「Body」以外にも、「JSON body」、「Headers」、「Cookies」なども選択できます。
- 「Match type」を選択します。完全一致のみを検知する場合は「Exactly matches string」を選びます。
- 「String to match」にAWS WAFで検出対象としたい文字列を入力します。
- 「Action」でルールのアクションを選択します。通信を遮断したい場合は「Block」を選択します。
- 「Add rule」をクリックしてルールを追加します。
ルールの作成が難しい場合、AWSが提供しているAWSマネージドルール(AWS Managed Rules)を利用することも可能です。
AWSマネージドルールについて詳しくはこちらの記事:
AWS WAFルールの優先順位を調整する
複数のルールを追加した場合、ルール間の優先順位を設定する必要があります。下記の手順に沿ってルールの優先順位の調整をしてください。
- ルールの設定が終わったあと、「Add rules and rule groups」ページで「Next」を選択します。
- 「Set rule priority」ページでルールやルールグループを「Move up」か「Move down」で移動できます。上にあるルールほど優先度が高くなり、ルールが優先的に処理されます。
- 「Next」をクリックしてCloudWatchのメトリクス名を決めます。ここはデフォルトのままで問題ありません。
- 「Next」を押して「Review and create web ACL」ページで設定内容を改めて確認します。問題がなければ「Create Web ACL」を選択し、Web ACLとルール設定が完了となります。
ALB側で設定する
AWS WAF側でWeb ACLとルールの設定が完了したら、ALB側でもWAFを有効にする設定を行います。
- AWSコンソールからWAFを適用したいALBのコンソールに移動します。
- 設定画面のサービスの統合で最適化の枠から、「AWS Web Application Firewall(WAF)」の下にある「ロードバランサーの背後にWAFセキュリティ保護を含める」をチェックします。
- 前のステップで設定していたWeb ACLを選択し、Web ACLをALBにアタッチします。
これでALBにAWS WAFのアタッチの設定が完了です。このALBへのトラフィックは、設定したWAFのルールに基づいてフィルタリングされるようになります。
AWS WAFを設定しただけじゃ足りない!その後の運用とは?
AWS WAFをALBに設定して終わりではありません。効果的なセキュリティ対策を維持するためには、継続的な運用が不可欠です。ここでは、AWS WAFを設定したあとの必要な運用について紹介します。
ルールの定期更新
セキュリティ脅威は日々進化しているため、AWS WAFの防御能力を維持するには、ルールの定期的な更新が必要です。
新しい脅威や攻撃に対策できるように新しい情報を積極的に収集し、設定したルールを定期的に調整する必要があります。
しかし、ルールの定期更新作業にはセキュリティやAWS WAFに詳しい知見が必要です。セキュリティ人材のリソースが不足している企業が多い現在、ルール更新が実施できていない企業も多いでしょう。
ここで注意してほしいのは、AWSマネージドルールを適用した場合でも、この作業が残る可能性があります。そもそもAWSマネージドルールは汎用ルールであり、重大性や影響が大きい脆弱性に関する更新は期待できる一方、個社特有のものや影響度がそこまで高くない脆弱性の場合、対応が遅くなったり対応されない恐れもあります。
対応状況についてAWSに問い合わせしてもセキュリティの観点から教えてくれないため、新しい脅威や攻撃が気になる場合は、カスタムルールの作成を含めた自社なりの対応が必要となります。
誤検知対応
誤検知とは、正常な動きや通信を不正アクセスとして誤って判定することです。誤検知によって通常のWeb利用者がWebサイトやWebシステムにアクセスできなくなるため、顧客の不信感やクレームを招いてしまい、売上機会の損失にもつながります。
ルールの更新や追加のタイミングで誤検知が発生しやすくなります。AWSマネージドルールを使う場合、マネージドルールの更新によって誤検知が発生する可能性があります。
誤検知を回避するためには、誤検知の原因となるルールを特定し調整する必要があります。マネージドルールを適用している場合は、ルールの詳細が非公開のため、AWS WAFの機能を活用し誤検知原因を特定する必要があるので、難易度が上がります。また、ルール自体の調整はできないため、カスタムルールを作成し対応する必要があります。
AWS WAFの誤検知対応について詳しくはこちら:
ブロックリストの運用
AWS WAFの防御効果を高めるため、攻撃元のIPアドレスを検知ログから特定しブロックリストに登録する作業を定期的に行う必要があります。
また、ブロックリストに登録できるIPアドレスの件数に上限があるため、登録された古いIPアドレスの整理も定期的に行わなければなりません。
ただし、検知ログの量が膨大の場合は、解析するために多くの時間がかかります。ブロックリストの登録作業に追われて本来の業務に集中できない担当者も少なくありません。
AWSのブロックリストについて詳しくはこちらの記事:
AWS WAFの運用を楽にするなら「WafCharm」
AWS WAFの設定は比較的簡単ですが、その後の継続的な運用は多くの手間とリソースがかかります。AWS WAFの運用をスマートにしたいなら、AWS WAFの自動運用サービス「WafCharm」がおすすめです。
WafCharmを利用することで、AWS WAFルールの作成・更新作業の負担が軽減できます。カスタムルールの作成もWafCharmサポートが代行するため、自社で作成する必要がありません。ブロックリストはWafCharmによって自動で追加されるので、手動による対応も基本的に不要です。
結果として、AWS WAFの運用時間を月間約30時間削減することができます。
WafCharmについて詳しくはこちらの資料をダウンロードし、ご確認ください。