AWS環境のアプリケーションを守るにはAWS WAFが必要不可欠です。AWS WAFの効果を発揮するには適切な設定が必要です。
この記事ではAWS WAFの設定方法について詳しく解説します。また、AWS WAFの検知ルールの設定工数を減らすためのAWSマネージドルールの選び方や注意点についても紹介します。AWS WAFの導入を予定している企業の担当者はぜひ最後までお読みください。
目次
AWS WAFとは?
AWS WAF(Web Application Firewall)は、AWS(Amazon Web Services)が提供するWAFで、Webサイトを含めたWebアプリケーションをさまざまなサイバー攻撃から守るセキュリティサービスです。
AWS WAFの導入によってSQLインジェクションやクロスサイトスクリプティング(XSS)など、情報漏えいやWebサイト改ざんなどの被害を引き起こす攻撃を防御できます。さらにレートベースを設定することでDDoS攻撃を緩和できるため、AWS環境で強固なセキュリティを実現できます。
AWS WAFの導入も簡単です。2023年11月現在、AWS WAFは下記のAWSサービスとスムーズに連携しているので、これらのサービスを利用していれば数クリックで簡単にAWS WAFを導入できます。
- Amazon CloudFront
- Amazon API Gateway
- Application Load Balancer
- AWS AppSync GraphQL API
- Amazon Cognito
- AWS App Runner
- AWS Verified Access
AWS WAFについてこちらの資料にまとめているので、ぜひダウンロードしてください。
AWS WAFの設定方法
AWS WAFを導入するのに難しい設定は不要です。下記の4ステップでAWS WAFを簡単に導入することができます。
- Web ACLを作成する
- ルールを追加する
- ルールの優先順位を調整する
- AWS WAFの検知ログの保存場所を設定する
また、ここではAmazon CloudFrontでの導入設定について紹介しますが、ほかのAWSサービスでも基本同じような流れでAWS WAFを導入できます。
1.Web ACLを作成する
Amazon CloudFrontでAWS WAFの有効設定をしたあと、Web ACLを作成します。
Web ACL(Web Access Control List)は、AWS WAFに使われる検知ルールの箱のようなものです。Web ACLに作成されたルールやルールグループによって通信の制御を行います。
Web ACLを作成するには下記の手順に従って行います。
- AWS Management ConsoleからAWS WAFコンソールを開き、”Create Web ACL”でWeb ACLを作成します。
- Web ACLの名前を”Name”に入力します。必要があればWeb ACLの説明を”Description – optional”に入れます。”CloudWatch metric name”(CloudWatchメトリクス名)はデフォルトのままで大丈夫ですが、必要に応じて変更できます。
- 次は”Resource Type”と”Region”を選択してください。AWS WAFでAmazon CloudFrontを保護する場合、”CloudFront distributions”を選んでください。この場合Region(リージョン)が自動的に”Global(CloudFront)”になるので追加の設定は不要です。ほかのリソースやリージョンを保護したいのであれば”Resource Type”を”Regional resources”にして設定してください。
- 必要があれば”Associated AWS resources – optional”で”Add AWS resources”を選択して追加で保護したいAWSリソースを登録してください。
- “Next”を押して次のステップに進みます。
2.ルールを追加する
実際にルールを作成する前にまずAWS WAFルールの構成を理解しましょう。AWS WAFのルールはステートメントとアクションの2部分に分けられます。
ステートメントは検知する条件です。地理的一致やIPセット一致、文字列一致などさまざまな種類のステートメントがあります。またSQLインジェクションを検知するSQLi攻撃やクロスサイトスクリプティングを検知するXSSスクリプティング攻撃などのステートメントもあります。
さらに、ステートメントをAND、OR、NOTなどのロジックを組み合わせてより高度な検知を実現することができます。
アクションは通信内容がステートメントに合致したときに実行される処理で、主に下記の3種類あります。
Allow:条件に合致するリクエストを許可します。
Block:条件に合致するリクエストをブロックし、アクセスを拒否します。
Count:条件に合致するリクエストの数をカウントし、実際にはブロックまたは許可しませんが、監視目的で使われます。
AWS WAFのルールを追加するのにステートメントとアクションを指定する必要があります。ここでは文字列一致ステートメントを使って「Attack」が含まれる通信をブロックするルールの作成方法について解説します。
- “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(JSON 本文)”、”Headers(ヘッダー)”、”Cookies”なども選択できます。
- “Match type”を選択します。この例ですと”Exactly matches string”を選びます。
- “String to match”にAWS WAFで検索したい文字列を入れます。この場合”Attack”を入力します。
- “Action”でこのルールのアクションを選択します。Attackが含まれる通信を遮断したいのでこの場合は”Block”にします。
- “Add rule”をクリックしてルールを追加します。
このように、AWS WAFに使われる検知ルールを一つひとつ作成しますが、AWSマネージドルールを活用することでこのプロセスを楽にできます。手順1 “Add rules”を選択したあとに”Add managed rule groups”でAWSマネージドルールを追加できます。
AWSマネージドルールはAWSが提供するルールセットのことで、AWS WAFの検知ルールの作成工数を低減できるメリットがある一方、注意点もあります。詳細は後ほど解説します。
3.ルールの優先順位を調整する
ルールの設定を完了したあと、その優先順位を調整する必要があります。優先順位の設定によってルールが処理される順番が変わります。ルールの優先順位を調整するには下記の手順に沿って実施してください。
- ルールの設定が終わったあと、”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とルール設定のプロセスを終わらせます。
4.AWS WAFの検知ログの保存場所を設定する
誤検知の原因特定やセキュリティリスクの分析にはAWS WAFの検知ログがとても重要です。AWS WAFのoverview画面では最大過去3時間までとなるので、それより前の検知ログを確認したい場合、検知ログを別のAWSサービスに出力して保存する必要があります。
具体的にはAWS WAFの検知ログをAmazon CloudWatch Logs、Amazon S3、Amazon Kinesis Data FirehoseなどのAWSサービスに出力し保存します。
検知ログの保存先を決定する前に、検知ログの分析に利用するAWSサービスも含めて検討しましょう。
検知ログをAmazon S3に保存した場合、Amazon Athenaを利用することでSQLで簡単に分析できますが、1TBあたりに5USDの料金がかかるので、大規模な分析で高額な費用が発生する恐れがあります。
一方、検知ログをAmazon CloudWatch Logsに保存した場合、Amazon CloudWatch Logs Insightsで検知ログの分析をできます。無料枠もありAmazon CloudWatch Logs Insightsのほうが安いですが、SQL言語では専用のクエリ言語が必要なので慣れるまでに時間がかかります。
それぞれのメリットとデメリットをしっかり確認し自社に合ったサービスを利用することをおすすめします。
AWSマネージドルールとは?選び方や注意点も把握
先ほど紹介した通り、AWS WAFの検知ルールの設定を楽にするためにはAWSマネージドルールを活用する方法があります。AWSマネージドルールを利用することで検知ルールの作成工数を軽減することができますが、注意点もあります。ここでは詳しく解説します。
AWSマネージドルールとは?
AWSマネージドルールとは、AWSが提供するAWS WAFで利用できるプリセットされたルールセットのことです。合計10種類以上のAWSマネージドルールが用意されているので、自社のセキュリティリスクに合わせて選定することができます。
- コアルールセット(Core Rule Set、CRS)マネージドルールグループ
- 管理者保護(Admin Protection)マネージドルールグループ
- 既知の不正な入力(Known Bad Inputs)マネージドルールグループ
- SQLデータベース(SQL Database)マネージドルールグループ
- Linuxオペレーティングシステム(Linux operating system)マネージドルールグループ
- POSIXオペレーティングシステム(POSIX Operating System)マネージドルールグループ
- Windowsオペレーティングシステム(Windows Operating System)マネージドルールグループ
- PHPアプリケーション(PHP Application)マネージドルールグループ
- WordPressアプリケーション(WordPress Application)マネージドルールグループ
- Amazon IPレピュテーションリスト(Amazon IP Reputation)マネージドルールグループ
- 匿名IPリスト(Anonymous IP List)マネージドルールグループ
各種類のルールの内容に関しては下記の記事にまとめています。
詳しくはこちらの記事:
AWSマネージドルールの選び方
AWS WAFのマネージドルールを選択する際、Web ACLの容量を考慮する必要があります。Web ACLの基本利用料金には1,500 WCU(Web ACL Capacity Unit)の容量が含まれますが、それを超えた場合500 WCUごとに課金する必要があります。さらに5,000 WCUを超えるとWeb ACLを追加しなければなりません。
AWSマネージドルールの種類によって消費するWCUの量が異なります。AWS WAFのマネージドルールを選ぶ際には、必要な保護とそれに伴うWCUの消費量を照らし合わせ、セキュリティリスクと料金のバランスを取りながらAWS WAFのマネージドルールを選ぶ必要があります。
AWSマネージドルールの種類 | 消費するWCU |
コアルールセット(CRS)マネージドルールグループ | 700 |
管理者保護マネージドルールグループ | 100 |
既知の不正な入力マネージドルールグループ | 200 |
SQLデータベースマネージドルールグループ | 200 |
Linuxオペレーティングシステムマネージドルールグループ | 200 |
POSIXオペレーティングシステムマネージドルールグループ | 100 |
Windowsオペレーティングシステムマネージドルールグループ | 200 |
PHPアプリケーションマネージドルールグループ | 100 |
WordPressアプリケーションマネージドルールグループ | 100 |
Amazon IPレピュテーションリストマネージドルールグループ | 25 |
匿名IPリストマネージドルールグループ | 50 |
AWS Managed Rules の選び方について詳しくはこちらの記事:
AWSマネージドルールの注意点
AWS WAFの検知ルールの作成工数を抑えることができるもののAWSマネージドルールには大きなデメリットがあります。それはルールがカスタマイズできないことです。
すべての利用者が共通して同じマネージドルールを利用しているため、マネージドルールのカスタマイズは基本できません。そのため、マネージドルールでは、自社のアプリケーション特有のセキュリティリスクを対策することが難しいです。
自社特有のセキュリティリスクを対策するにはカスタムルールを別途作成しないといけません。ただし、脆弱性やサイバー攻撃の特徴や内容をきちんと理解し、その特徴をルールのステートメントに落とし込む知識や経験が必要なため、カスタムルールの作成は簡単ではありません。
そもそもマネージドルールの詳細内容が公開されていないため、具体的にどの攻撃を防げるのか、どのように防ぐのかはわからないので、どういったカスタムルールを追加すれば安全なのかも判定しづらいです。
そのため、AWSマネージドルールを導入したにもかかわらず、AWS WAFの運用負荷が依然として高い企業は少なくありません。
まとめ
AWS WAFは、AWSが提供するWAFで、SQLインジェクションやクロスサイトスクリプティング(XSS)をはじめ、DDoS攻撃を含めて幅広いサイバー攻撃を対策できるセキュリティサービスです。
Amazon CloudFrontやAmazon API Gateway、Application Load BalancerなどAWSサービスを利用していれば、AWS WAFを簡単に導入することができます。導入したあとに下記の4つのステップでAWS WAFの設定を行います。
- Web ACLを作成する
- ルールを追加する
- ルールの優先順位を調整する
- AWS WAFの検知ログの保存場所を設定する
ただし、ルールの作成にはWebセキュリティにおける高い専門知識が必要です。また作成するルールの量によって作業や運用負荷が膨大になることもあります。
AWS WAFの検知ルールの作成工数を減らすには、WAF自動運用サービス「WafCharm」を利用することがおすすめです。自社のアプリケーションに合ったルールをWafCharmが自動適用するので、カスタムルールを作成する必要がなくAWS WAFの運用工数を最低限に抑えることができます。
さらに、WafCharmには24時間365日の日本語サポートが付いています。AWS WAFの運用に何かの問題があった際にもAWS WAFに詳しい専門家に相談できるので安心できます。
WafCharmの機能や詳細についてこちらの資料にまとめているので、ぜひダウンロードしてご確認ください。