Sign inSign up

wesleydeanflexion/tfsec

By wesleydeanflexion

Updated about 5 years ago

This is a daily build of tfsec by Liam Galvin for performing static code analysis on Terraform code.

Image
2

100K+

wesleydeanflexion/tfsec repository overview

tfsec

Travis Build Status GoReportCard Open Source Helpers Github Release GitHub All Releases

tfsec uses static analysis of your terraform templates to spot potential security issues. Now with terraform v0.12+ support.

Example Output

Example screenshot

Installation

Install with brew/linuxbrew:

brew tap liamg/tfsec
brew install liamg/tfsec/tfsec

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

Alternatively, install with Go:

env GO111MODULE=on go get -u github.com/liamg/tfsec/cmd/tfsec

Usage

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

The exit status will be non zero if problems are found, 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.

To build:

docker build -t tfsec .

To run:

docker run --rm -it -v "$(pwd):/workdir" tfsec .

Features

  • Checks for sensitive data inclusion across all providers
  • Checks for violations of AWS, Azure and GCP security best practice recommendations
  • Scans modules (currently only local modules are supported)
  • Evaluates expressions as well as literal values

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:<CODE> to the offending line in your templates. If the problem refers to a block of code, such as a multiline string, you can add the comment on the line above the block, by itself.

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:AWS006
}

...or...

resource "aws_security_group_rule" "my-rule" {
    type = "ingress"
    #tfsec:ignore:AWS006
    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.

Included Checks

Currently, checks are mostly limited to AWS/Azure/GCP resources, but there are also checks which are provider agnostic.

CodeProviderDescription
GEN001*Potentially sensitive data stored in "default" value of variable.
GEN002*Potentially sensitive data stored in local value.
GEN003*Potentially sensitive data stored in block attribute.
AWS001awsS3 Bucket has an ACL defined which allows public access.
AWS002awsS3 Bucket does not have logging enabled.
AWS003awsAWS Classic resource usage.
AWS004awsUse of plain HTTP.
AWS005awsLoad balancer is exposed to the internet.
AWS006awsAn ingress security group rule allows traffic from /0.
AWS007awsAn egress security group rule allows traffic to /0.
AWS008awsAn inline ingress security group rule allows traffic from /0.
AWS009awsAn inline egress security group rule allows traffic to /0.
AWS010awsAn outdated SSL policy is in use by a load balancer.
AWS011awsA resource is marked as publicly accessible.
AWS012awsA resource has a public IP address.
AWS013awsTask definition defines sensitive environment variable(s).
AWS014awsLaunch configuration with unencrypted block device.
AWS015awsUnencrypted SQS queue.
AWS016awsUnencrypted SNS topic.
AWS017awsUnencrypted S3 bucket.
AWS018awsMissing description for security group/security group rule.
AZU001azurermAn inbound network security rule allows traffic from /0.
AZU002azurermAn outbound network security rule allows traffic to /0.
AZU003azurermUnencrypted managed disk.
AZU004azurermUnencrypted data lake store.
AZU005azurermPassword authentication in use instead of SSH keys.
GCP001googleUnencrypted compute disk.
GCP002googleUnencrypted storage bucket.
GCP003googleAn inbound firewall rule allows traffic from /0.
GCP004googleAn outbound firewall rule allows traffic to /0.

Running in CI

tfsec is designed for running in a CI pipeline. For this reason it will exit with a non-zero exit code if a potential problem is detected. 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).

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.

Tag summary

Content type

Image

Digest

Size

185.7 MB

Last updated

about 5 years ago

docker pull wesleydeanflexion/tfsec