Discover / Security

tfsec

by aquasecurityGo

Static analysis security scanner for Terraform code.

Toolactive

Maturity: active because commit 131d ago, latest release v1.28.14. Derived from release and commit history, not a rating.

Stars
7.0k
Forks
559
Downloads / mo
Last commit
2026-03-25
License
MIT
Open issues
18

Market and trust evidence

Edition not yet matched

No exact skills.sh identity match is available for this repository. Repository adoption and freshness remain visible above; install momentum is not inferred.

Trust analysis is a screening signal, not a security warranty. Read the ranking and trust methodology.

In practice

Written by AI from this repository’s README · high confidence

Insecure infrastructure as code settings reach the cloud because nothing checks them before apply.

Use it when

When scanning Terraform code locally or in CI and you accept that development attention has moved to Trivy.

Not the right pick when

The README encourages the community to transition to Trivy, which now carries the engineering effort.

Capabilities

  • Checks misconfigurations across major cloud providers
  • Hundreds of built in rules
  • Scans local and remote modules
  • Evaluates HCL expressions and Terraform functions
  • Applies user defined Rego policies
  • Output formats including JSON, SARIF, CSV and JUnit

Cost: Free and open source

Video walkthroughs

Third-party YouTube uploads matched to this tool by title, channel and repository name on 2026-08-03. Not made, reviewed or endorsed by SkillPilot. View counts and publish months are as of the match date and the month is approximate. Nothing loads from YouTube until you press play.

What the repository ships

Has testsHas docsDocker imageCI configured

Detected from the actual files in the repository root.

Latest release v1.28.14

Published 2025-05-02

What's Changed

  • fix: CVE-2025-22869: Denial of Service in the Key Exchange of golang.org/x/crypto/ssh by @jdesouza in https://github.com/aquasecurity/tfsec/pull/2172
  • chore: update and clean up golangci-lint by @mmorel-35 in https://github.com/aquasecurity/tfsec/pull/2165
  • chore: update golangci lint by @simar7 in https://github.com/aquasecurity/tfsec/pull/2175
  • chore(deps): bump golang.org/x/net from 0.33.0 to 0.38.0 by @dependabot in https://github.com/aquasecurity/tfsec/pull/2174
  • chore(deps): bump golangci-lint to v2.1 by @mmorel-35 in https://github.com/aquasecurity/tfsec/pull/2176

New Contributors

  • @mmorel-35 made their first contribution in https://github.com/aquasecurity/tfsec/pull/2165

Full Changelog: https://github.com/aquasecurity/tfsec/compare/v1.28.13...v1.28.14

Tags

README

<p align="center">

<img width="354" src=".github/images/tfsec_worded.png">

</p>

GoReportCard

Join Our Slack

Docker Build

Homebrew

Chocolatey

AUR version

VScode Extension

📣 tfsec to Trivy Migration

As part of our goal to provide a comprehensive open source security solution for all, we have been consolidating all of our scanning-related efforts in one place, and that is Trivy.

Over the past year, tfsec has laid the foundations to Trivy's IaC & misconfigurations scanning capabilities, including Terraform scanning, which has been natively supported in Trivy for a long time now.

Going forward we want to encourage the tfsec community to transition over to Trivy. Moving to Trivy gives you the same excellent Terraform scanning engine, with some extra benefits:

  1. Access to more languages and features in the same tool.
  2. Access to more integrations with tools and services through the rich ecosystem around Trivy.
  3. Commercially supported by Aqua as well as by a the passionate Trivy community.

tfsec will continue to remain available for the time being, although our engineering attention will be directed at Trivy going forward.

tfsec to Trivy migration guide

For further information on how Trivy compares to tfsec and moving from tfsec to Trivy, do have a look at the migration guide.

Overview

tfsec uses static analysis of your terraform code to spot potential misconfigurations.

Features

  • :cloud: Checks for misconfigurations across all major (and some minor) cloud providers
  • :no_entry: Hundreds of built-in rules
  • :nesting_dolls: Scans modules (local and remote)
  • :heavy_plus_sign: Evaluates HCL expressions as well as literal values
  • :arrow_right_hook: Evaluates Terraform functions e.g. concat()
  • :link: Evaluates relationships between Terraform resources
  • :toolbox: Compatible with the Terraform CDK
  • :no_good: Applies (and embellishes) user-defined Rego policies
  • :page_with_curl: Supports multiple output formats: lovely (default), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif.
  • :hammer_and_wrench: Configurable (via CLI flags and/or config file)
  • :zap: Very fast, capable of quickly scanning huge repositories
  • :electric_plug: Plugins for popular IDEs available (JetBrains, VSCode and Vim)
  • :house_with_garden: Community-driven - come and chat with us on Slack!

Recommended by Thoughtworks

Rated _Adopt_ by the Thoughtworks Tech Radar:

For our projects using Terraform, tfsec has quickly become a default static analysis tool to detect potential security risks. It's easy to integrate into a CI pipeline and has a growing library of checks against all of the major cloud providers and platforms like Kubernetes. Given its ease of use, we believe tfsec could be a good addition to any Terraform project.

Example Output

Example screenshot

Installation

Install with brew/linuxbrew


brew install tfsec

Install with Chocolatey


choco install tfsec

Install with Scoop


scoop install tfsec

Bash script (Linux):


curl -s https://raw.githubusercontent.com/aquasecurity/tfsec/master/scripts/install_linux.sh | bash

You can also grab the binary for your system from the releases page.

Alternatively, install with Go:


go install github.com/aquasecurity/tfsec/cmd/tfsec@latest

Please note that using go install will install directly from the master branch and version numbers will not be reported via tfsec --version.

Signing

The binaries on the releases page are signed with the tfsec signing key D66B222A3EA4C25D5D1A097FC34ACEFB46EC39CE

Form more information check the signing page for instructions on verification.

Usage

tfsec will scan the specified directory. If no directory is specified, the current working directory will be used.

The exit status will be non-zero if tfsec finds problems, otherwise the exit status will be zero.


tfsec .

Use with Docker

As an alternative to installing and running tfsec on your system, you may run tfsec in a Docker container.

There are a number of Docker options available

| Image Name | Base | Comment |

|------------|------|---------|

|aquasec/tfsec|alpine|Normal tfsec image|

|aquasec/tfsec-alpine|alpine|Exactly the same as aquasec/tfsec, but for those whole like to be explicit|

|aquasec/tfsec-ci|alpine|tfsec with no entrypoint - useful for CI builds where you want to override the command|

|aquasec/tfsec-scratch|scratch|An image built on scratch - nothing frilly, just runs tfsec|

To run:


docker run --rm -it -v "$(pwd):/src" aquasec/tfsec /src

Use with Visual Studio Code

A Visual Studio Code extension is being developed to integrate with tfsec results. More information can be found on the tfsec Marketplace page

Use as GitHub Action

If you want to run tfsec on your repository as a GitHub Action, you can use https://github.com/aquasecurity/tfsec-pr-commenter-action.

Use as an Azure DevOps Pipelines Task

You can now install the official tfsec task. Please raise any issues/feature requests on the task repository.

Ignoring Warnings

You may wish to ignore some warnings. If you'd like to do so, you can

simply add a comment containing tfsec:ignore:<rule> to the offending

line in your templates. Alternatively, you can add the comment to the line above the block containing the issue, or to the module block to ignore all occurrences of an issue inside the module.

For example, to ignore an open security group rule:


resource "aws_security_group_rule" "my-rule" {
    type = "ingress"
    cidr_blocks = ["0.0.0.0/0"] #tfsec:ignore:aws-vpc-no-public-ingress-sgr
}

...or...


resource "aws_security_group_rule" "my-rule" {
    type = "ingress"
    #tfsec:ignore:aws-vpc-no-public-ingress-sgr
    cidr_blocks = ["0.0.0.0/0"]
}

If you're not sure which line to add the comment on, just check the

tfsec output for the line number of the discovered problem.

You can ignore multiple rules by concatenating the rules on a single line:


#tfsec:ignore:aws-s3-enable-bucket-encryption tfsec:ignore:aws-s3-enable-bucket-logging
resource "aws_s3_bucket" "my-bucket" {
  bucket = "foobar"
  acl    = "private"
}

Expiration Date

You can set expiration date for ignore with yyyy-mm-dd format. This is a useful feature when you want to ensure ignored issue won't be forgotten and should be revisited in the future.


#tfsec:ignore:aws-s3-enable-bucket-encryption:exp:2025-01-02

Ignore like this will be active only till 2025-01-02, after this date it will be deactivated.

Disable checks

You may wish to exclude some checks from running. If you'd like to do so, you can

simply add new argument -e check1,check2,etc to your cmd command


tfsec . -e general-secrets-sensitive-in-variable,google-compute-disk-encryption-customer-keys

Including values from .tfvars

You can include values from a tfvars file in the scan, using, for example: --tfvars-file terraform.tfvars.

Included Checks

tfsec supports many popular cloud and platform providers

| Checks |

|:----------------------------------------------------------------------------------------|

| AWS Checks |

| Azure Checks |

| GCP Checks |

| CloudStack Checks |

| DigitalOcean Checks |

| GitHub Checks |

| Kubernetes Checks |

| OpenStack Checks |

| Oracle Checks |

Running in CI

tfsec is designed for running in a CI pipeline. You may wish to run tfsec as part of your build without coloured

output. You can do this using --no-colour (or --no-color for our American friends).

Output options

You can output tfsec results as JSON, CSV, Checkstyle, Sarif, JUnit or just plain old human-readable format. Use the --format flag

to specify your desired format.

GitHub Security Alerts

If you want to integrate with Github Security alerts and include the output of your tfsec checks you can use the tfsec-sarif-action Github action to run the static analysis then upload the results to the security alerts tab.

The alerts generated for tfsec-example-project look like this.

github security alerts

When you click through the alerts for the branch, you get more information about the actual issue.

github security alerts

For more information about adding security alerts, check the GitHub documentation

Support for older terraform versions

If you need to support versions of terraform which use HCL v1

(terraform <0.12), you can use v0.1.3 of tfsec, though support is

very limited and has fewer checks.

Contributing

We always welcome contributions; big or small, it can be documentation updates, adding new checks or something bigger. Please check the Contributing Guide for details on how to help out.

Some People who have contributed

<a href = "https://github.com/aquasecurity/tfsec/graphs/contributors">

<img src = "https://contrib.rocks/image?repo=aquasecurity/tfsec"/>

</a>

Made with contributors-img.

tfsec is an Aqua Security open source project.

Learn about our open source work and portfolio here.

Join the community, and talk to us about any matter in GitHub Discussion or Slack.

Related tools