S3とCloudFrontで公開した静的ページにAWS WAFは必要か?
私は業務外で、S3とCloudFrontで静的ページのみのホームページを公開しているのですが、CloudFrontのディストリビューションを作成した際に「念のため」AWS WAFを有効にしました。
しかし、毎月約3000円のコストが発生しており、ホームページ運用の大半をこのコストが占めています。
このブログ作成を機に、WAFについて整理しながら、WAFをなくすことができないか検討していきたいと思います。
もくじ
① WAFとは?
② AWS WAFとは?
③ AWS WAFの料金体系
④ 自動適用されていた各マネージドルールについて
⑤ 結論
① WAFとは?
WAFとは Web Application Firewall の略で、Webアプリケーションの脆弱性を狙うサイバー攻撃から情報を保護にすること特化したセキュリティ対策です。
ファイアウォールやIPS/IDSはレイヤ3(ネットワーク層)と レイヤ4(トランスポート層)を中心に保護しますが、WAFはレイヤ7(アプリケーション層)の保護に特化しています。
WAFは以下のようなを攻撃を防ぐことが可能です。
- SQLインジェクション
- クロスサイトスクリプティング(XSS)
- ディレクトリトラバーサル
- パラメータ改ざん
- バッファオーバーフロー
- OSコマンドインジェクション
- DDoS攻撃
- ブルートフォースアタック
Webアプリケーションの脆弱性は、開発の際に紛れ込み、認識されていない、あるいは、認識はされているが、改修することが困難ということが多々あります。
そのため、ファイアウォールやIPS/IDSで防ぐことができないWebアプリケーションの脆弱性への攻撃を防ぐためにWAFは必要となっています。
② AWS WAFとは?
AWS WAFは、Amazon CloudFront、Application Load Balancer(ALB)上で動作するAWSが提供するクラウド型のWAFとなります。
クラウド型のWAFは保護対象の外で通信を遮断するため、通信が保護対象まで到達せず、WAF自体の冗長化やファームウェアアップデートなどをユーザ側で行わずに済みます。
また、AWS WAFは悪意のあるリクエストを判別するためのルールが事前に用意されており、その中からルールを選択することも可能ですが、AWSパートナーのセキュリティベンダーが提供するマネージドルールをMarket Placeから購入して適用することも可能です。
③ AWS WAFの料金体系
AWS WAFの料金は、以下に基づいて課金されます。
種別 |
利用料金 |
作成したWeb ACL(ウェブアクセスコントロールリスト)の数 |
1ACLあたり5ドル/月 |
Web ACLごとに追加したルールの数 |
1ルールあたり1ドル/月 |
AWS WAFが受信したリクエストの数 |
100万リクエストごとに0.6ドル |
「ルールをまとめたグループ」 = 「Web ACL」と考えるとわかりやすいと思います。
具体的に、CloudFrontからAWS WAFを有効にした場合の料金を見てみましょう。
CloudFrontのサービス画面で「セキュリティ」タブを開き、WAFの項目にある「Edit」をクリックします。
この画面でCloudFrontにWAFを適用したり、無効にしたりできます。
(私はCloudFront作成時にWAFを有効にしたため、「AWS WAF protection enabled」がONになっています)
「View details of your configuration」をクリックして、CloudFrontに適用しているWAFの詳細を確認できます。
CloudFrontに適用されているWAFのWeb ACLの詳細画面が表示されます。
※AWSコンソール画面から「WAF & Shield」と検索しても、CloudFrontから作成したWAFのWeb ACLは確認できないので注意してください
「Rules」タブを開くと、現在のWeb ACLに適用されているルールが確認できます。
CreatedByCloudFront-****というWeb ACLに以下の4つのルールが適用されていました。
(CloudFront作成時にWAFを有効にしただけなので、自動的に適用されたマネージドルールのみになります)
AWSの無料のマネージドルール、追加したルールの数にカウントされる
- AWS-AWSManagedRulesAmazonIpReputationList(0ドル/月)
- AWS-AWSManagedRulesCommonRuleSet(0ドル/月)
- AWS-AWSManagedRulesKnownBadInputsRuleSet(0ドル/月)
AWSの有料のマネージドルール、追加したルールの数にカウントされる
- AWS-AWSManagedRulesBotControlRuleSet(10ドル/月)
よって、1か月あたりのWAFの料金の計算は以下のようになります。
Web ACL:5ドル × 1 = 5ドル
ルール:1ドル × 4 = 4ドル
有料マネージドルール:10ドル × 1 = 10ドル
5ドル + 4ドル + 10ドル = 19ドル
アクセス数の計算は含めていませんが、1か月あたりWAFの料金は約19ドルとなり、現在のWAFの料金とも一致しています。
④ 自動適用されていた各マネージドルールについて
マネージドルール |
役割 |
静的サイトで有用か? |
AWS-AWSManagedRulesAmazonIpReputationList |
AWSが維持・管理する「悪意のあるIPアドレスのリスト」をもとに、攻撃によく使われるIPからのアクセスをブロックします。 |
○ |
AWS-AWSManagedRulesCommonRuleSet |
SQLインジェクションやクロスサイトスクリプティングなどの一般的なWebアプリケーションの脆弱性を狙った攻撃をブロックします。 |
× |
AWS-AWSManagedRulesKnownBadInputsRuleSet |
SQLインジェクションやクロスサイトスクリプティングなどで攻撃者がよく使う悪意のある文字列やパターンを含む入力を検出し、ブロックします。 |
× |
AWS-AWSManagedRulesBotControlRuleSet |
悪意のあるボットや不要なクローラーをブロックします。 |
△ |
⑤ 結論
S3とCloudFrontで公開した静的ページは、サーバ側の処理やDBがないため、一般的なWebアプリケーションの脆弱性を心配する必要はありません。
しかし、DoS攻撃については注意する必要があります。
CloudFrontにはAWS Shield Standardが自動付帯しているため、レイヤ3(ネットワーク層)と レイヤ4(トランスポート層)を狙ったDDoS攻撃は防ぐことができますが、レイヤ7(アプリケーション層)を狙ったDDoS攻撃には、WAFが必要になります。
また、最近ではクラウドの従量課金モデルを悪用して経済的負担を増やすことを目的にしたEDoS攻撃というものも流行っています。
DDoS攻撃はサービスを停止することを目的としているため気づきやすいですが、EDoS攻撃はサービスが停止しないように負荷を調整しながら攻撃するため、請求額で初めて気づくことも多いです。(陰湿な嫌がらせですね。。)
EDoSもレイヤ7(アプリケーション層)を狙ったDDoS攻撃と同じくWAFで対策可能です。
よって、今回はWAFをなくすことはやめておこうと思います。(EDoS攻撃怖いので。。)
ただ、静的サイトに不要なマネージドルールをなくすことでWAFの料金は見直せるので、次回の記事ではWeb ACLのルールの変更と調整、アクセスの監視方法を検討したいと思います。