WAFv2 Web ACL (managed rules + rate limit)
A WAFv2 web ACL (REGIONAL or CLOUDFRONT) with a default-allow posture, configurable AWS managed rule groups blocking by default, and a rate-based rule that throttles abusive IPs.
Part of: AWS Production Landing Zone
Verification
Live-testedReally deployed to a cloud sandbox, verified against its outputs and assertions, then destroyed - with the teardown confirmed.
Conformance
- Static validation (fmt · validate · tflint)
- Security scan clean (Checkov)
- Plan test superseded by live test
Provenance
- SHA-256 checksum
- Cosign signature
Functional
- Live-tested - applied, verified, destroyed
Last verified 2026-06-30 · how we verify
Verify this download
cosign · sha-256Don't take our word for it. Every release is signed with cosign - check the bytes against our pinned public key before you trust them.
# 1. Our pinned public key - fetch once, trust out-of-band
curl -O https://www.iac-bazaar.com/cosign.pub
# 2. This module's Sigstore bundle
curl -o aws-waf-1.0.0.sigstore.json \
https://www.iac-bazaar.com/api/artifacts/aws-waf/signature
# 3. Verify the tarball you downloaded
cosign verify-blob \
--key cosign.pub \
--bundle aws-waf-1.0.0.sigstore.json \
aws-waf-1.0.0.tar.gz
# → Verified OK
# 4. (optional) confirm the checksum too
echo "cc30594db863d2426917a75c5dec3e24b292cc3e3cff93f3a2803221104a7001 aws-waf-1.0.0.tar.gz" | sha256sum -cUse it from the registry
terraform · opentofumodule "waf" {
source = "www.iac-bazaar.com/iac-bazaar/aws-waf/aws"
version = "1.0.0"
}Paid module — needs a purchase (or a subscription that covers it) plus a registry token from /account/tokens. Full setup: registry docs.
Inputs & outputs
Create a free account to read this module's contract
The declared contract — every input name, type, default and description, plus every output — is shown to signed-in accounts, not to anonymous visitors.
A free account sees the contract of every Free module. This one is Professional, so its contract unlocks when you buy it.
Documentation
aws-waf
AWS WAFv2 web ACL (REGIONAL or CLOUDFRONT scope) with a default-allow
posture, a configurable set of AWS managed rule groups (blocking by default),
and an optional rate-based rule that throttles abusive IPs. Works with
Terraform and OpenTofu (>= 1.6), AWS provider >= 6.0, < 7.0.
The two classic WAFv2 gotchas are handled for you: managed rule groups attach via
override_action (not action) so the group's own blocking decisions apply, and
the web ACL ships with the required visibility_config on the ACL and every
rule.
Secure defaults:
- Default action
allow(the standard posture: pass normal traffic, let rules block the bad) — flip toblockfor an allow-list-only edge. - Managed rule groups run active/blocking (
override_action { none {} }), not count-only. Setoverride_to_count = trueper group to observe before enforcing. - A rate-based rule is enabled by default and blocks any IP exceeding
rate_limitrequests (2000) per 5-minute window. - CloudWatch metrics + request sampling on, so you can tune false positives.
Scope note:
CLOUDFRONT-scope web ACLs must be created with the AWS provider configured forus-east-1.REGIONALACLs live in (and protect resources in) the provider's region. Resource associations apply toREGIONALonly — CloudFront attaches a web ACL through its distribution'sweb_acl_id.
Requirements
- Terraform or OpenTofu
>= 1.6 hashicorp/aws>= 6.0, < 7.0
Security notes
- Managed rule groups are blocking by default. When introducing a new group to
production traffic, set
override_to_count = truefirst, watch the CloudWatchCountedRequests/sampled requests, then switch it to enforcing. - Full WAF traffic logging is built in but opt-in: pass the ARN of a
Kinesis Data Firehose, S3 bucket, or CloudWatch log group whose name starts
with the mandatory
aws-waf-logs-prefix vialog_destination_configs.authorizationandcookierequest headers are redacted from logs by default (log_redacted_headers). - Keep
default_action = "allow"; only useblockwhen you intend an allow-list-only edge driven entirely by explicit allow rules.
License
Commercial — IaC Bazaar EULA. © IaC Bazaar. Original work (not derived from a third-party module).
Usage code & full reference unlock after purchase
The complete copy-paste usage, the full input/output reference, and operational notes ship with your licence - shown here and bundled in the download.
- Usage
- Inputs
- Outputs
Related modules
Cognito User Pool & App Client
A secure-by-default Cognito user pool and app client with optional hosted-UI domain - strong password policy, TOTP MFA, account-enumeration protection, SRP-only flows, and refresh-token revocation.
IAM Roles, Policies & OIDC Trust
Least-privilege IAM roles, managed policies, and GitHub/EKS OIDC federation in one composable module.
Security Group with Rule Presets
Security groups with named rule presets (https, postgres, redis...) using modern standalone rule resources.