Tested tool guide
Tested browser tools
Checked August 16, 2026
What Terraform Security Scanner does, with a checked example
Paste a Terraform .tf file into the box and this tool parses the HCL and reports resources that match known insecure patterns: security group ingress from 0.0.0.0/0 or ::/0, S3 buckets with public ACLs or disabled public-access blocks, and storage without encryption at rest. Findings name the resource address, the offending line, and a concrete fix, and the file never leaves the browser. What surprises people: the scan reads the full text you pasted, but it evaluates only literal values. Values that arrive through variables, module calls, or data sources are skipped rather than resolved, so a range written as var.admin_cidr passes even when it resolves to the world.
Worked example
A concrete input and expected output from the current implementation.
Input
resource "aws_s3_bucket" "logs" {
bucket = "app-logs"
acl = "public-read"
}
resource "aws_security_group" "ssh" {
name = "ssh-from-everywhere"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_db_instance" "main" {
engine = "postgres"
instance_class = "db.t3.micro"
} ->
Expected output
3 findings
[CRITICAL] aws_security_group.ssh (line 13)
Port 22 (SSH) is open to 0.0.0.0/0. Restrict cidr_blocks to a known range.
[HIGH] aws_s3_bucket.logs (line 3)
ACL "public-read" grants anonymous read access. Set acl = "private" or remove the argument.
[HIGH] aws_db_instance.main (line 17)
Encryption at rest is not enabled. Add storage_encrypted = true.
All three findings follow from the file: the ingress block opens SSH to every IPv4 address, the ACL grants anonymous reads, and aws_db_instance without storage_encrypted is created unencrypted by provider default. Nothing else in the file matches a rule, so nothing else is reported.