Why audytx has 36× fewer false positives than Checkov
Most Terraform scanners check each resource in isolation against a checklist. That produces hundreds of findings on clean infrastructure — because a Lambda without a DLQ is always flagged, regardless of whether anything async ever invokes it. audytx reasons across how your resources actually connect, applies 17 suppression axes, and only flags what the context can't explain away. Every suppressed finding is preserved with its rationale — never silently dropped.
The numbers
Why single-resource scanners produce so many false positives
A scanner that checks each Terraform resource in isolation has no choice but to apply every rule that could apply — it can't see the context that makes the rule irrelevant.
1. Lambda DLQ pattern
2. DLQ-needs-a-DLQ pattern
3. Ephemeral data pattern
4. Internal-load-balancer pattern
5. IMDSv2 inheritance pattern
The 17 reasoning checks
Each check represents a class of relationship that proves a finding benign in context — computed once per scan across your full resource graph.
How a suppression looks in the PR comment
Suppressed findings are never silently dropped. They appear in a collapsible block in the PR comment, each with a plain-English rationale. You can audit every call audytx made.
Every suppression shows its reasoning in plain English. If you disagree with a call, you can override it in a .audytx-baseline.yaml file in your repo.
The benchmark: 21 clean production modules
The false-positive comparison ran all five tools against 21 well-maintained AWS community Terraform modules with an expected HIGH finding count of 0. Lower is better — every finding here is noise. Full data and methodology: the benchmark page.
| Module | audytx | Checkov | Trivy | KICS |
|---|---|---|---|---|
| terraform-aws-iam | 3 | 287 | 1 | 0 |
| terraform-aws-ecs | 0 | 86 | 16 | 2 |
| terraform-aws-lambda | 6 | 112 | 23 | 7 |
| terraform-aws-rds | 2 | 124 | 7 | 1 |
| terraform-aws-alb | 4 | 54 | 13 | 2 |
| terraform-aws-eks | 6 | 88 | 38 | 1 |
| terraform-aws-s3-bucket | 3 | 129 | 18 | 4 |
| + 14 more modules | 9 | 313 | 59 | 17 |
| Total (21 modules) | 33 | 1,193 | 175 | 34 |
FAQ
Doesn't suppression hide real issues?
No — suppressed findings are never removed. They appear in a dedicated collapsible block in every PR comment, each with a plain-English explanation of why it was dismissed. You can always see what was reasoned away and why, and override any suppression in your .audytx-baseline.yaml.
How do I override a suppression I disagree with?
Add an entry to .audytx-baseline.yaml in your repo root specifying the rule ID and resource. audytx will stop suppressing that finding — it'll surface as a real finding on the next PR that touches the resource. You can set an expiry date so the override is time-bounded.
What if audytx is wrong about the context?
The reasoning checks are conservative — audytx only suppresses when the relationship in your Terraform configuration is unambiguous. If the configuration is incomplete or the connection can't be proven (e.g. the DLQ reference is behind a variable), the finding is kept. Incomplete evidence = no suppression.
Why does Checkov have 1,193 false positives on clean modules?
Checkov applies every rule that matches a resource type, without checking whether the finding is warranted by the resource's actual role in the system. It has more rules (breadth) and less context reasoning (precision). Both tools detect 100% of IAM privesc paths — the difference is entirely in clean-infrastructure precision.
Does audytx support suppression files like Checkov's .checkov.yaml?
Yes, via .audytx-baseline.yaml. You list rule IDs to suppress, optionally scoped to specific files or resources, with an expiry date. This is for cases the reasoning axes can't cover — team-specific decisions, known acceptable risks, or third-party modules you can't change.
Stop triaging false positives
Install audytx on one repo. Open a PR that touches your ECS, Lambda, or IAM resources. See the reasoning block — and how many findings don't make it through.
Install audytx free →See the full benchmark: audytx vs Checkov, Trivy, KICS, Terrascan →