LCL Engineers' Blog

バス比較なび・格安移動・バスとりっぷを運営する LCLの開発者ブログです。

AWS WAFの概要まとめ

年末年始にかけて、AWS関連の最新情報を整理していたところ、AWS WAFがかなり使いやすいレベルにアップデートされていました。 セキュリティ関連のサービスは、日頃はそれほど最新の情報を追えていないので、これを機会に簡単にまとめたいと思います。

AWS WAFとは

AWS WAF は、CloudFrontまたは、ALBへのHTTP/HTTPSリクエストをモニタリングできるWeb Application Firewallです。 詳細については、各所で記事がありますので割愛しますが、「従量課金で低コスト」「専用のインスタンス不要」「マネージドルール」という点が、他のWAF製品との違いになると思います。

概念

まず、AWS WAFの概念について整理します。基本的には、一般的なACLの考え方と同じです。

Condition

Conditionは、AWS WAFがモニタリングするリクエストの条件を定義します。

例として以下のような条件を定義できます。

  • IPアドレス
  • リクエスト元の地域
  • User-Agent等のHTTP Header
  • URI

Conditionでは、あくまでもモニタリングする条件のみを定義し、この条件に対する振る舞いは定義しません。

Rule

Ruleは、Conditionを組み合わせて、アクションを発動するための条件を定義します。(アクションについては、後述します)

例えば、下記を一つのRuleとして定義し、このRuleに対しての振る舞いを設定できます。

  • リクエスト元のIPアドレスが 192.xx.xx.xxでない
  • リクエスト元の User-Agent ヘッダーに XxxBot が含まれる
  • 特定の地域からのリクエストである

また、レートベースのRuleも定義可能です。レートベースのRuleでは通常のRuleに加え、リクエスト数がレートリミット(最小値2,000 / 5分)を超えた場合にアクションを発動します。

Web ACL

Web ACLは、各Ruleのアクションとデフォルトアクションを定義します。

アクションの種類

アクションには、3種類あります。

  • Allow
    • 条件に一致するリクエストを許可します。
  • Block
    • 条件に一致するリクエストを拒否します。( ステータスコード403を返します)
  • Count
    • 条件に一致するリクエストをカウントします。主にACLのテストに利用するようです。

各Ruleのアクション

各Ruleに対してアクションを定義します。Ruleに定義したすべての条件に一致した場合の振る舞いを定義します。

デフォルトアクション

デフォルトアクションは、Web ACLのすべてのRuleの条件に一致しないリクエストの振る舞いを定義します。

例えば、「特定のIPアドレスのリクエストのみ許可」という場合には、

  1. 特定のIPアドレスのRuleを定義し、アクションはAllow
  2. デフォルトアクションはBlock

という定義をします。

以上で、AWS WAFの基本的な概念について説明しました。

マネージドルール

マネージドルールは、AWS re:Invent 2017 で発表された新機能です。

AWS WAFではルールを柔軟に定義できるものの、適切なルールをメンテナンスし続けるには運用負荷が高いことがネックでした。

マネージドルールでは、セキュリティベンダーが事前設定済みのルールを利用することができます。 さらに、ルールはセキュリティベンダーによって自動的に更新されるため、ルールの運用から開放されます。

マネージドルールの料金は、利用するルール毎に異なりますが、現在見る限りでは、月額 数ドルから数十ドルと比較的低コストで導入できます。

ALBへ設定例

AWS ConsoleからALBに対しての設定も紹介します。例として、「特定のIPからのリクエストは拒否する」というルールを定義します。

Web ACLの基本情報を入力

ACLの名前と、対象とするALBを設定します。対象とするALBは、ACL作成後も変更できます。

f:id:lcl-engineer:20180103012730p:plain

Conditionの作成

拒否対象のIPアドレスを定義します。

f:id:lcl-engineer:20180103012740p:plain

Ruleの作成

作成したConditionを元に、Ruleを定義します。ここでは、「IPアドレスが一致」を条件としています。

f:id:lcl-engineer:20180103013327p:plain

ACLにRuleを追加

ACLにRuleを追加します。上記で作成したRuleに対しては、ActionをBlockと設定します。その他、デフォルトのActionはAllowを設定します。

f:id:lcl-engineer:20180103013546p:plain

以上で完了です。このように簡単な条件なら、すぐに設定できます。

Sampled requestsの確認

設定がうまくいっているかどうかは、Web ACLの画面の「Sampled requests」から確認ができます。

Block条件に該当するリクエストが発生していた場合は、リクエストの情報・該当するRuleが表示されます。

f:id:lcl-engineer:20180103013814p:plain

まとめ

AWS WAFの最初のリリース時は、ALBには対応しておらずCloud Frontのみの利用可能でした。その後、ALB対応・レートベースのRule・マネージドルールなど、ユーザが本当に必要な機能を着実に追加しているのは、さすがAWSです。

特に、マネージドルールの登場で、セキュリティ専任者が不在のチームにもAWS WAFの導入の敷居が大幅に下がったと思います。今後もマネージドルールの拡充などが予定されているので、アップデート情報は随時追っていきたいと思います。