Terraform
Trivy supports the scanners listed in the table below.
Scanner | Supported |
---|---|
Misconfiguration | ✓ |
Secret | ✓ |
It supports the following formats:
Format | Supported |
---|---|
JSON | ✓ |
HCL | ✓ |
Plan Snapshot | ✓ |
Plan JSON | ✓ |
Trivy can scan Terraform Plan files (snapshots) or their JSON representations. To create a Terraform Plan and scan it, run the following command:
terraform plan --out tfplan
trivy config tfplan
To scan a Terraform Plan representation in JSON format, run the following command:
terraform show -json tfplan > tfplan.json
trivy config tfplan.json
Misconfiguration
Trivy recursively searches directories and scans all found Terraform files. It also evaluates variables, imports, and other elements within Terraform files to detect misconfigurations.
Value Overrides
You can provide tf-vars
files to Trivy to override default values specified in the Terraform HCL code.
trivy config --tf-vars dev.terraform.tfvars ./infrastructure/tf
Exclude Downloaded Terraform Modules
By default, downloaded modules are also scanned.
If you don't want to scan them, you can use the --tf-exclude-downloaded-modules
flag.
trivy config --tf-exclude-downloaded-modules ./configs
Secret
The secret scan is performed on plain text files, with no special treatment for Terraform.
Limitations
Terraform Plan JSON
For each and count objects in expression
The plan created by Terraform does not provide complete information about references in expressions that use each
or count
objects. For this reason, in some situations it is not possible to establish references between resources that are needed for checks when detecting misconfigurations. An example of such a configuration is:
locals {
buckets = toset(["test"])
}
resource "aws_s3_bucket" "this" {
for_each = local.buckets
bucket = each.key
}
resource "aws_s3_bucket_acl" "this" {
for_each = local.buckets
bucket = aws_s3_bucket.this[each.key].id
acl = "private"
}
With this configuration, the plan will not contain information about which attribute of the aws_s3_bucket
resource is referenced by the aws_s3_bucket_acl
resource.
See more here.