AWS WAF Module

aws iac oss terraform

NOTE: This includes AWSManagedRulesKnownBadInputsRuleSet by default, which AWS updated to mitigate the recent Log4j issue (CVE-2021-44228).

Just released a Terraform module for AWS WAF. If you host “standard” web services (atop something Linux-like), this takes an opinionated approach to save you time while providing enough flexibility for common use cases.

module "waf" {
  source                  = "git::ssh://git@github.com/sonatype/terraform-aws-waf.git?ref=v0.0.1"
  association_arns        = [module.foo.alb_arn]
  environment             = var.environment
  name                    = var.name
  namespace               = var.namespace
  tags                    = var.tags

  # these have caused problems for legitimate queries, YMMV
  common_ruleset_excludes = [
    "GenericRFI_QUERYARGUMENTS",
    "EC2MetaDataSSRF_QUERYARGUMENTS",
    "EC2MetaDataSSRF_BODY",
    "SizeRestrictions_BODY",
    "CrossSiteScripting_QUERYARGUMENTS",
    "NoUserAgent_HEADER"
  ]
}

Associate your ALB, API Gateway, etc. ARNs (typical WAF-enabled resources), generate test traffic, watch the WAF console for unexpected blocks, and adjust excludes as needed.

This was a spike to flesh out adding modular web firewalling to terraform-keycloak-aws. As part of that, additional improvements will be added along with more real-world testing. If you have feature requests or find bugs, browse the project repo and feel free to submit PRs or open issues.