AWS WAF を使えばスクレイピングやボット、DDoSなどの悪質なアクセスを事前に防ぐことができる。
が、100%防ぐことは多分できない。
けど、簡単設定で効果が大分良い感じに出たので、
導入マストかもしれない。
使用する主な AWS アプリケーション
- AWS ALB(ELB)
- AWS WAF
EC2 に対して直接 WAF を割り当てることはできないらしく、
AWS ALB を導入する必要がある。
Cloudfront にも割り当てれるらしいけど、今回は関係ないのでスルー。
WAF とは
WAF(Web Application Firewall)は、WebサイトやAPIへの通信を監視・解析し、脆弱性を突くサイバー攻撃を検知・ブロックするセキュリティ対策です。
個人情報やクレジットカード情報を扱うWebアプリケーションを、SQLインジェクションやクロスサイトスクリプティング(XSS)などから保護します。
とのこと。
コストやルール等を確認していると出てくる WCU とは
ざっと読んだ感じ、一つの保護パックにおける最大 WCU は 5000WCU。
基本料金内で抑えるには WCU を1500WCU以内にする必要がある。
で、この1500WCUを超えると追加料金が発生する。
という感じ。
WCU はルール毎に値が決められていて、
カスタムルールは条件を追加する度に WCU が加算されていく。
なので、全てのルールを詰め込むとか、雑に条件を追加していくと、
コストが増えるので注意。
まずは AWS が提供してるデフォルト設定を用意する
- 「AWS WAF」→「保護パック (ウェブ ACL)」→「保護パック (ウェブ ACL) を作成」クリック
- アプリについて教えてください
- アプリカテゴリ: 適当(一旦「コンテンツおよび公開システム」選択)
- アプリケーションフォーカス: 適当(一旦「API とウェブの両方」選択)
- 保護するリソースを選択
- 「リソースを追加」→「リージョンリソースを追加」クリック
- 割り当てたい ALB を選択
- 「リソースを追加」→「リージョンリソースを追加」クリック
- 初期の保護を選択
- 「重要」を選択
- 名前を付けて、説明を入力
- 名前: 適当
- 保護パック (ウェブ ACL) をカスタマイズ
- デフォルトのルールアクション: Count アクションと Block アクションに推奨のデフォルトを使用する
- 「保護パック (ウェブ ACL) を作成」クリック
- アプリについて教えてください
カスタマイズしていく
このままだとけっこう強力で、
普通のユーザーもアクセス拒否されたりするので、
ルールをゆるくする。
- 「AWS WAF」→「保護パック (ウェブ ACL)」→ 作成した保護パックを選択 →「ルールを管理」クリック
初期の保護を「重要」にした場合、良い感じのルールが入ってるので、
それを見直していく。
自分の環境では下記ルールがセットされていた。
- xxxxx_IPV4_Allow
- xxxxx_IPV6_Allow
- AWS-AWSManagedRulesAntiDDoSRuleSet
- AWS-AWSManagedRulesCommonRuleSet
- AWS-AWSManagedRulesSQLiRuleSet
- AWS-AWSManagedRulesAdminProtectionRuleSet
- BodySizeRestrictionRule
- GeoRule
- GlobalRateBasedRule
AWS-AWSManagedRulesCommonRuleSet
サービスによっては Block から Count に変更してもいいかも。
- SizeRestrictions_BODY
AWS-AWSManagedRulesAdminProtectionRuleSet
ここもサービスによっては Block から Count に変更してもいいかも。
- AdminProtection_URIPATH
ルールを追加、変更する
ルールの優先度を変える
基本的に Allow 系のルールは優先度高めにして、
後は母数の大きそうなものから優先度高くする感じになると思う。
- 「AWS WAF」→「保護パック (ウェブ ACL)」→ 作成した保護パックを選択 →「ルールを管理」クリック
- 「ルール順序を編集」クリック
- リストの上部が優先度高いらしいので、追加したルールを上の方へドラッグする
- 「ルール順序を保存」クリック
検知されると
Block 対象者は403エラーが返ってくる。
Count はログに残るだけでユーザーには何も影響がない。
Allow これは無条件で通すので注意。