Subchapter 96.1
references/adaptive-mitigation-playbook-for-forwarded-signals.mdMarkdown9 KBView on GitHub
Domain expertise for what the application does once a bot confidence signal reaches it, the decision layer on top of the labels-to-confidence-signal and dynamic-label-interpolation references. Covers the graduated response by confidence level, the friction-free path for teams that will not use CAPTCHA, and the one piece that is AWS WAF configuration: a rate-based rule aggregating on the session token for volumetric abuse.
This reference is mostly application-side guidance, not AWS WAF steps. Deciding when to move a customer from signal forwarding into this playbook belongs to the router and reasoning layer, not to this reference reaching into another.
Execute commands using the AWS MCP server when connected (sandboxed execution, audit logging, observability). Fall back to the AWS CLI otherwise.
To apply the adaptive mitigation playbook, follow the guidance below and the procedure for the one AWS WAF piece. The application owns the low, medium, and high responses; AWS WAF owns the rate-based rule.
A single block-or-allow decision either lets abuse through or blocks real users. A graduated response uses the confidence signal the application already receives.
Constraints:
Teams that refuse CAPTCHA still need to slow abuse without blocking real users.
Constraints:
Volumetric abuse from sessions that each stay under a per-IP limit is keyed to a token, not an address. This is the one piece that is AWS WAF configuration.
Constraints:
This reference is the decision layer, not an orchestrator.
Constraints:
The response is too aggressive at low confidence. Withhold data or nudge to sign in rather than block (Graduated response by confidence).
The abuse is per-session, not per-IP. Add a rate-based rule on the session token (Volumetric abuse: rate-based on the session token).
This procedure covers the one AWS WAF piece, the session-token rate-based rule; the graduated responses are application-side guidance above.
Constraints for parameter acquisition:
Constraints:
aws sts get-caller-identityConstraints:
You MUST add a rate-based rule with a CUSTOM_KEYS aggregation on the session token or JWT, in
Count first, following the adding-rate-based-rules reference for the window and threshold rules
You MUST fetch the current LockToken with get-web-acl immediately before update-web-acl
and pass the full rule set, since --rules is a complete replacement
You MUST preserve the web ACL’s existing DefaultAction from the get-web-acl response and pass
it back as {default_action}; do not assume Allow={}, since that would silently open all
unmatched traffic on a web ACL whose default action is Block. For example, a CUSTOM_KEYS
rate-based rule aggregating on the session-token header, in Count:
aws wafv2 get-web-acl --name {web_acl_name} --scope {scope} --id {web_acl_id} --region {region}
aws wafv2 update-web-acl --name {web_acl_name} --scope {scope} --id {web_acl_id} \
--lock-token {lock_token} --default-action {default_action} \
--rules '[{"Name":"RateLimitSession","Priority":1,"Action":{"Count":{}},"Statement":{"RateBasedStatement":{"Limit":100,"EvaluationWindowSec":300,"AggregateKeyType":"CUSTOM_KEYS","CustomKeys":[{"Header":{"Name":"{session_key}","TextTransformations":[{"Priority":0,"Type":"NONE"}]}}]}},"VisibilityConfig":{"SampledRequestsEnabled":true,"CloudWatchMetricsEnabled":true,"MetricName":"RateLimitSession"}}]' \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName={web_acl_name} \
--region {region}You SHOULD leave the throttling response to the application once the rule flags the session
Constraints:
You MUST present the web ACL console link and tell the customer to confirm the rate-based rule:
https://us-east-1.console.aws.amazon.com/wafv2/homev2/web-acls?region={region}{
"web_acl_name": "example-webacl",
"web_acl_id": "abc",
"scope": "REGIONAL",
"session_key": "x-session-token"
}Application guidance: low -> withhold data / nudge sign-in; medium -> step-up MFA; high -> manual review.
Added a CUSTOM_KEYS rate-based rule on x-session-token for the volumetric case, in Count.
Open the web ACL and confirm the rate-based rule:
https://us-east-1.console.aws.amazon.com/wafv2/homev2/web-acls?region=us-east-1Soften the low-confidence response (Step, Graduated response by confidence).
Add the session-token rate-based rule (Step 2).
This procedure modifies a security control, so misconfiguration directly weakens the application’s defenses.
wafv2: actions a task needs (for example wafv2:GetWebACL and wafv2:UpdateWebACL) rather than wafv2:* or the AWSWAFFullAccess managed policy.aws sts assume-role) rather than long-lived IAM user access keys when running these WAF CLI commands.wafv2 management events and set CloudWatch alarms on critical web ACL configuration changes (such as DeleteWebACL and UpdateWebACL rule removals) and on the web ACL’s BlockedRequests and CountedRequests metrics, so rule changes and sudden spikes in blocked or counted traffic are detected.