grasys blog

GCP Cloud armorとAWS WAFのban反映時間を比較

こんにちは角田(tsunoda)です。
最近腹が出てきた気がします。( ‘-’ )

GCPのCloud armorと、AWSのWAF、
実際に両方使ってみたのでban-timeを比較した結果を書いていこうと思います!
Cloud armorについては以前ご紹介したので、今回はWAFを主にご紹介します。
fail2banとCloud armorでbanする

Cloud armorとは

GCPのglobal HTTP(S) Load Balancerの新しいセキュリティ対策サービスです。
主な機能は以下になります。

DDoS対策
IP制限(whitelist,bkacklist)

検証詳細はこちら↓
fail2banとCloud armorでbanする

AWS WAFとは

可用性、セキュリティ侵害、リソースの過剰消費といった一般的なウェブの脆弱性から
ウェブアプリケーションまたは API を保護するウェブアプリケーションファイアウォールです。
こちらもDDoS対策やIP制限に使えます!

WAFを設定してみる

まずはWeb ACLを作成します。

regionの選択を忘れがちなので注意です。 Create web ACL をぽち。
detailsの設定をして、今回Ruleなどは後で作成します。

Create web ACL ぽち!できました。

Web ACLができたら、作成したWeb ACLを選択、Add rules をぽちってRuleを作成します。
こんな感じで設定します。↓

5分間で100アクセス以上してきたIPをbanするルールを作成してみます。↓

-Rule/Type
  Regular ruleか、Rateをベースにしたルールを作るよという意味

-Request rate details/Rate limit
  この値はアクセス数。全アクセスか、リクエスト指定か選べる。  
  Rate-based ruleの場合はここでrateを設定する。  

-Action/Action
  Blockは実際にルールにしたがってbanする。Countにすると計測のみ行いbanはしない。

Add rule ぽちで作成完了です。
5分間で100アクセス以上アクセスのあるIPを5分間ban ルールができました。
すると先ほど作成したWeb ACLに設定されています。

次にこの設定を入れるresourceを選びます。
Add AWS resources ぽち。

API GatewayかLBか選択できます。
今回はLBを選択します。

以上で基本的な設定は完了です。おっしゃおっしゃ。

AWS WAF検証

ということで、banされるまでおもむろにLBにcurlを投げてみます。

$ while true; do curl ${LB-DNS_NAME} -I; done
HTTP/1.1 200 OK
Date: Thu, 19 Dec 2019 09:28:32 GMT
Content-Type: text/html
Content-Length: 612
Connection: keep-alive

・・・

HTTP/1.1 403 Forbidden
Server: awselb/2.0
Date: Thu, 19 Dec 2019 08:09:07 GMT
Content-Type: text/html
Content-Length: 134
Connection: keep-alive

HTTP/1.1 403 Forbidden
Server: awselb/2.0
Date: Thu, 19 Dec 2019 08:09:08 GMT
Content-Type: text/html
Content-Length: 134
Connection: keep-alive

アクセスし続けること約30秒。
403が返ってきました。
Web ACLのoverviewでもちゃんとbanされたことを確認できます。

unbanは5分後なので、時々アクセスしながら待ってみます。

$ curl ${LB=DNS_NAME} -I
HTTP/1.1 200 OK
Date: Thu, 19 Dec 2019 09:15:10 GMT
Content-Type: text/html
Content-Length: 612
Connection: keep-alive

5分と言いながら実際にbanされてから約6分後にunbanでした。
何回か検証しましたが、banになる時間、unbanになる時間は大体同じでした。

GCP Cloud armorとAWS WAF ban-time比較

banされるまでの時間unbanされるまでの時間
GCP Cloud armor約2~3min設定可能(約2〜3min〜)
AWS WAF約30sec約6min

WAF早っ!

### まとめ AWS WAFは `反映時間が早く、インスタンスより手前でのアクセス計測なので` 同一IPからの大量アクセスによる高負荷は最小限に抑えられそうですね。 かゆい所としては、 “` unbanされるまでの時間をまだ設定できない所、 overviewでは過去3時間分しか確認できない所、 より詳細なデータを収集するにはcloud watchやs3にログを吐かせる設定を追加しなければならない所 “` でしょうか。

GCP Cloud armorは 反映時間が遅く、インスタンス単位でのアクセス計測なので 高負荷がやってくる事もしばしば。。
unbanの反映にも最低2〜3分はかかります。
ただfail2banと併用すればban-timeや、ルールの微調整も可能なので、柔軟性があると思いました。
logもstackdriver loggingで調査し易く、過去のデータも閲覧しやすいです。

両方使ってみて、
迅速な対応に向いているのは反映時間の早いAWS WAFでした。
DDoS対策などに加えてホワイトリスト登録やbanの微調整など融通が効くのはGCP Cloud armorといった印象です。

もう少し詳細なWAFの設定などはまた次回紹介しようと思います。


株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。

grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。

お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。


採用情報
お問い合わせ