🛡️
開発環境のCognitoにWAFを導入した時の注意点
開発中のCognitoではよく以下の設定をすると思います。localhostをCallbackに設定するヤツですね。
しかし、この設定をするとWAFの設定によっては403エラーが出ます。
WAFでのエラーなので、403エラーの相談をClaudeやChatGPTに聞いても全然解決しません。
WAFのルールは一般的な以下
この中の、AWS-AWSManagedRulesCommonRuleSetの中にあるEC2MetaDataSSRF_QUERYARGUMENTS によってWAFの挙動としてBlockされ、403が返ってきます。
これは、「リクエストクエリ引数から Amazon EC2 メタデータを盗み出す試みがないかを検査します。」ってやつですね。
参考:https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-baseline.html
なので、開発中の環境ではこれをCountにしてあげた方がいいと思います。
これをCountにするだけでlocalhostをCallbackにするのは成功します。
早まって全部CountにするとWAF入れてるのにガバガバになるのでなんでWAF入れてるのか分からなくなっちゃいますよねー。
また、localhostでの検証が終わったらちゃんとBlockに戻すのを忘れないようにしてくださいー。
参考までに僕が使用した開発中のCognitoで使うWAFのTerraformファイルを置いておきます。
resource "aws_wafv2_web_acl" "this" {
name = "${var.service_name}-cognito-waf-${var.environment}"
description = "WAF on Cognito UserPool ${var.service_name}-${var.environment}"
〜省略〜
rule {
name = "AWS-AWSManagedRulesCommonRuleSet"
priority = 2
override_action {
none {}
}
statement {
managed_rule_group_statement {
name = "AWSManagedRulesCommonRuleSet"
vendor_name = "AWS"
rule_action_override {
name = "EC2MetaDataSSRF_QUERYARGUMENTS"
action_to_use {
count {}
}
}
}
}
visibility_config {
cloudwatch_metrics_enabled = true
metric_name = "AWS-AWSManagedRulesCommonRuleSet"
sampled_requests_enabled = true
}
}
〜省略〜
}
Discussion