目次
AWS Bot 対策

AWS Bot 対策

🌐 Read in English

AWS で CloudFront + ECS で Web サービスを配信していますが、
Bot が多く、その対策を WAF で実行しようとしたい際にいくつかつまづきましたので、その備忘録になります。

以下 2 点を試しました。

  1. WAF v2 で GEO マッチステートメントで Bot のリクエスト元の海外 IP をブロック
  2. WAF v2 Bot Control で Bot 対策

WAF v2 で GEO マッチステートメントで対策

JP (日本) 以外をブロックしました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
resource "aws_wafv2_web_acl" "main" {
# 日本以外をブロック
rule {
action {
block {}
}

statement {
not_statement {
statement {
geo_match_statement {
country_codes = ["JP"]
}
}
}
}

すると、日本からアクセスしたにも関わらず、
日本外と判断され、ブロックされてしまった事象がありました。

その際はスマートフォン (docomo, au, softbank) でのアクセスでした。

誤検知があったのでこの方法は回避しました。

WAF v2 Bot Control で Bot 対策

AWS Bot Control で bot 対策をしてみました。

こちらで現状特段大きな問題がないのですが、
AWS Bot Control を terraform で有効化しようとした際につまづいた点をまとめます。

ManagedRuleGroupConfigs をサポートしていない

※2022-11-29 時点でサポートしておらず、 InspectionLevel の設定ができません。

https://github.com/hashicorp/terraform-provider-aws/issues/23290

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"Name": "AWS-AWSManagedRulesBotControlRuleSet",
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesBotControlRuleSet",
"ManagedRuleGroupConfigs": [
{
"AWSManagedRulesBotControlRuleSet": {
"InspectionLevel": "COMMON"
}
}
],
...

Bot Control Rules をサポートしていない

※ 2022-11-29 時点

Bot Control Rules の設定をサポートしていないので、手動で設定等が必要です。

Override rule group action はサポートしている

以下設定を rule {} ブロック内に設定すれば、検知モード (ブロック等せずカウントだけ実施する) にできます。

1
2
3
override_action {
count {}
}

先述した issue で既に言及されているのでいずれサポートされると思います。

利用時には要注意です。

local-exec で aws-cli からアップデートしちゃおうという猛者がいた

https://github.com/hashicorp/terraform-provider-aws/issues/23287

意図しない挙動があるとも否定できないので terraform で完結させたい。
shell スクリプトのテストや構文チェック等をするのも憚れる。

総評

rate limit やその他 SQLi, XSS を設定していたとしても
Bot が一時的に複数 IP 元からリクエストがあると防ぐことが難しいです。

GEO 制限で抑えられたら良かったのですが、リクエストの多いサービスの場合でご検知があると
それだけで商用環境での利用は憚れます。

Bot Control で検知モード (Count) で様子を見て、適宜ブロック設定をしていくのが安全でした。

以上
参考になれば幸いです。

kenzo0107

kenzo0107