Terraform Modules That Prevent Infrastructure Audit Findings

One-line drop-in from terraform-aws-modules. Compliance controls enforced at the module source - before terraform apply, not discovered missing after.

No credit card or AWS account needed to start.

By Anton Babenko · Maintainer of terraform-aws-modules - 2B+ downloads

If we were building governance from scratch today, your model is likely the direction we’d take.

VP of Engineering, Fortune 500 food & beverage company

Companies want to pay for a compliance accelerator.

Cloud Security Architect, enterprise consultancy

We spent 6 months building custom wrappers around terraform-aws-modules. Compliance.tf does what we built, maintained by someone else.

Platform Engineering Lead, Series B fintech

Three Steps to Compliant Infrastructure

For terraform-aws-modules users, migration is a one-line change. Same workflow, same interface. Custom modules (BYOM) are in beta - join via Enterprise.

1

Change One Line

main.tf
module "s3" {
- source = "registry.terraform.io/..."
+ source = "soc2.compliance.tf/..."
 
  bucket = "awesome-docs"
}
2

Run Terraform Commands

terminal
$ terraform login soc2.compliance.tf
Success! Terraform has obtained and saved an API token.
$ terraform init
- module.s3 in soc2.compliance.tf/...
$ terraform plan
+ server_side_encryption (enforced)
+ public_access_block (enforced)
3

Compliance Enforced

CC6.1 · Versioning Enabled
CC6.1 · Default Encryption
CC6.1 · Public Access Blocked
CC6.1 · Object Lock Enabled
CC6.6 · SSL Requests Only
CC7.2 · Logging Enabled
CC7.2 · Event Notifications
CC7.2 · Lifecycle Policy

Controls with module coverage are enforced automatically - compliant defaults where the modules decide, visibility where they do not.

Operational Rules (lifecycle blocks, tagging, instance restrictions) are also applied at download time alongside compliance controls.

See compliance.tf in Action

See the one-line migration and plan-time enforcement in action.

For Engineering, Platform, and SRE Teams

Same modules, same workflow. Compliance is already there.

35 AWS Modules, Ready to Use

Based on terraform-aws-modules - the same interface and variables you already use, with module-enforced controls for 36 compliance frameworks. Custom module support (BYOM) is in beta - available on Enterprise.

Zero Workflow Changes

Change one line in your module source. Run terraform init. That's it. No new CLI tools, no policy agents, no sidecars.

Controls You Can Override - With an Audit Trail

Need to disable object lock for a dev environment? Authorize the exception via query parameter. Every override is logged.

Runs in Any CI Pipeline

GitHub Actions, GitLab CI, Atlantis, HCP Terraform - if it runs terraform init, it works. API tokens scoped per team and framework.

Operational Rules

Lifecycle blocks, tagging standards, provisioner removal, instance restrictions - applied to every module at download time. Your platform team configures once, every developer gets hardened modules. Learn more

For CISOs, Compliance Leads, and GRC Teams

Controls that prevent non-compliance. Evidence your auditor already accepts.

One Subscription, 36 Frameworks, Every Team

SOC 2, PCI DSS, HIPAA, NIST, CIS, FedRAMP, ISO 27001, GDPR, and more. Enforced by the module, not by a policy engine you maintain.

A Preventive Control, Not a Scanner

Unencrypted storage, public buckets, missing logging - the control failures that generate audit findings never make it to production. Removes the module-level misconfigurations CSPMs flag most often.

SOC 2 Type II report

We have a valid SOC 2 Type II report, audited by Atom Assurance Services. Request access through our Trust Center.

Evidence via AWS Config and Audit Manager

AWS Config and Audit Manager - running in your own AWS account, tools your auditor already trusts - generate the evidence from the configuration state each terraform apply leaves behind. Evidence maps directly to framework clauses (SOC 2 CC6.1, PCI DSS 3.4.1, HIPAA §164.312). No last-minute evidence scramble before the audit.

Where compliance.tf Fits in Your Compliance Stack

compliance.tf handles the infrastructure configuration layer.

compliance.tf Handles

  • Module-level control enforcement (encryption, logging, access, versioning)
  • Operational Rules - lifecycle blocks, tagging standards, instance restrictions
  • Framework-to-control mapping (SOC 2, PCI DSS, HIPAA, NIST, CIS, FedRAMP, ISO 27001, GDPR)
  • Configuration state that AWS Config / Audit Manager can evidence
  • Upstream module updates (terraform-aws-modules kept in sync)
  • Exception management with audit trail
  • Control documentation and compliance mapping matrices

See which modules are covered · See Operational Rules

Your Team Still Owns

  • IAM policies and identity management
  • Network architecture and segmentation
  • Application-layer security
  • Runtime monitoring (GuardDuty, CloudTrail, SIEM)
  • Incident response procedures
  • Organizational policies, training, vendor management
  • Resources outside compliance.tf module coverage

Most teams pair compliance.tf with a GRC platform (Vanta, Drata, Sprinto) for organizational controls and a CSPM tool (Wiz, Prowler) for runtime monitoring. compliance.tf is the infrastructure configuration layer in that stack.

We eliminate the infrastructure controls portion of SOC 2 preparation, a large share of audit findings. Your team focuses on organizational controls while compliance.tf handles the infrastructure layer.

Prevention vs Detection

compliance.tf prevents non-compliant deployments. Scanning tools detect them after the fact. Most mature programs use both.

DimensionIaC Scanningcompliance.tf
Prevents non-compliant configs before terraform applyNo (post-plan scan)Yes
Adds lifecycle blocks (prevent_destroy, ignore_changes) to modulesNo (scan-time only)Yes (Operational Rules)
Keeps pace with upstream module updatesN/AYes
Maps controls to framework clause IDsPartialYes
Enables AWS-native evidenceScan reports onlyYes
Exception management with audit trailSuppression rulesYes
Catches runtime drift / console changesYesNo
Covers non-Terraform resourcesYesNo
Internal engineering timeMediumLow
Custom rule authoringScan-time checks onlyIn development

We recommend keeping scanning tools active alongside compliance.tf for defense in depth. The scanner validates what compliance.tf already enforces.

Choose Your Plan

Free forever on CIS v6.0. Every signup starts with a 30-day trial of all frameworks.

Free

CIS v6.0 compliance + 30-day trial of all frameworks

$0/ forever
  • CIS v6.0 framework (18 enforced controls)
  • All 35 Terraform AWS modules
  • Team collaboration during your trial
  • Registry access with daily request limits
  • 30-day trial of all frameworks
Get Started Free
Best Value

Full Access

All compliance frameworks for your entire team

$1,000/ year
  • All 36 compliance frameworks
  • All 35 Terraform AWS modules
  • Team collaboration included
  • Unlimited downloads
  • Email support
Buy with AWS

Enterprise

Custom frameworks, BYOM, and dedicated support

Custom/ contact sales
  • Everything in Full Access
  • Bring Your Own Modules (BYOM)
  • Custom frameworks & controls
  • Priority support
  • SSO/SAML
Contact Sales

Common Questions From Platform and Security Teams

How is this different from Checkov, Trivy, or Prowler?

Those tools are detective controls - they scan infrastructure after you write it and report findings you fix manually. compliance.tf is a preventive control. The modules cannot silently produce non-compliant resources - every exception is an explicit parameter in your code, visible in review.

Most teams keep their scanners running alongside compliance.tf for defense in depth.

How is this different from OPA or Sentinel?

OPA and Sentinel are policy engines - you write rules in Rego or Sentinel language, deploy an engine, and maintain policies as your infrastructure changes. With compliance.tf, the controls are already built into the modules. You do not need to write policies or run a policy engine. Many teams use both. We handle framework-specific infrastructure controls (encryption, logging, access blocking, versioning) at the module level. OPA or Sentinel can verify organizational policies (naming conventions, tagging standards, allowed regions) across the broader stack, but they only flag violations. Custom rule authoring is in development, so those same policies will be enforced directly in the modules.

Which Terraform modules are available today?

35 modules based on terraform-aws-modules, including S3, VPC, EKS, RDS, Lambda, ALB, DynamoDB, and more. Same variables, same outputs, same interface. See the full list with controls per framework.

Module versions track upstream terraform-aws-modules releases and publish usually within hours. Pin versions using Terraform's standard version argument in your module block. Ranges like ~> 4.0 work the same way as any other module.

If you need a module we do not support yet, contact us. Custom module support (BYOM) is in beta - available on Enterprise.

Can I adopt this gradually, or is it all-or-nothing?

Fully incremental. Start with one module in one environment. Your existing modules continue working untouched. If you use Terragrunt or Terramate to orchestrate your runs, nothing changes - you're only swapping the module source line. There is no global policy agent to deploy, no wrapper binary, no sidecar. Each module source line is independent.

Does this work with OpenTofu, Terragrunt, or Terramate?

Yes. Our registry uses the standard Terraform module protocol, which OpenTofu supports natively. Run tofu login soc2.compliance.tf instead of terraform login and everything else works the same way. Terragrunt and Terramate orchestrate runs without changing how modules are resolved, so they work out of the box.

Does changing the module source replace my existing resources?

No. Terraform tracks resources by their address in state, not by the source URL. Changing the source updates where Terraform downloads the module code. Run terraform plan after switching. If your existing resources don't meet compliance controls yet (unversioned buckets, unencrypted storage), the plan will show those changes. Review the plan before applying.

What does compliance.tf cover vs. what do I still own?

We enforce controls at the Terraform module level - encryption, logging, versioning, access blocking for 35 AWS modules. You still own IAM policies, network architecture, application security, runtime monitoring, and incident response. We are transparent about this because compliance is a stack, not a single tool. We handle the infrastructure configuration layer.

What if I need to disable a control for a legitimate reason?

Disable specific controls via a query parameter in the module source. Every exception is explicit in the source URL - the control ID appears in code, state, and plan output. Your team documents the approver and justification through your standard change process. Your audit trail shows exactly which controls were overridden - the exact documentation auditors need during exception reviews.

Does this replace Vanta, Drata, or Sprinto?

No. We enforce controls inside Terraform modules. Your GRC platform tracks policies, collects evidence, and manages audit workflows. We feed evidence into your GRC platform, not the other way around.

Will my auditor accept this as evidence?

Your auditor does not need to trust compliance.tf directly. Evidence comes from AWS-native tools they already accept: AWS Config, Security Hub, and Audit Manager. We enforce controls before terraform apply, so those tools report the enforced controls as passing. We can also help you prepare downloadable control mapping matrices for your environments - the exact artifact auditors request.

How do I get started?

Click Start Free Trial and sign in - no AWS account or credit card required. Run terraform login soc2.compliance.tf, change your module source line, and run terraform init. If you use OpenTofu, run tofu login soc2.compliance.tf instead. 35 modules with compliance controls are available today. You can also subscribe directly through AWS Marketplace.

A complete module source line looks like this:
source = "soc2.compliance.tf/terraform-aws-modules/s3-bucket/aws"

Stay Informed About New Features

Join the mailing list for releases, new modules, and roadmap updates. No spam. Unsubscribe anytime.

Not convinced yet, or missing a feature you need? Send us an email - we really want to hear your feedback!