Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add rule for enforcing terrascan pre-commit hook #240

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions rule-types/common/require_terrascan_pre_commit_hook.test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
tests:
- name: "Should have Talisman pre-commit hook configured"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- name: "Should have Talisman pre-commit hook configured"
- name: "Should have Terrascan pre-commit hook configured"

def: {}
params: {}
expect: "pass"
git:
repo_base: correct
- name: "Should fail Talisman pre-commit hook is not configured"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- name: "Should fail Talisman pre-commit hook is not configured"
- name: "Should fail Terrascan pre-commit hook is not configured"

def: {}
params: {}
expect: "fail"
git:
repo_base: misconfigured
- name: "Should fail is pre-commit is not configured at all"
def: {}
params: {}
expect: "fail"
git:
repo_base: empty
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files

- repo: https://github.com/tenable/terrascan
rev: 'v1.28.0'
hooks:
- id: terraform-pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
args: ['--maxkb=600']
63 changes: 63 additions & 0 deletions rule-types/common/require_terrascan_pre_commit_hook.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
version: v1
release_phase: alpha
type: rule-type
name: require_terrascan_pre_commit_hook
display_name: Enable Terrascan Pre-commit hooks for detecting compliance and security violations
short_failure_message: Terrascan Pre-commit hook is not configured for the repository
severity:
value: medium
context: {}
description: |
Verifies that Terrascan Pre-commit hook is configured for the repository
guidance: |
Ensure that Terrascan is configured as a (pre-commit)[https://pre-commit.com/]
hook for the repository.

Terrascan is a static code analyzer for Infrastructure as Code. Terrascan allows you to:
- Seamlessly scan infrastructure as code for misconfigurations.
- Monitor provisioned cloud infrastructure for configuration changes that introduce posture drift, and enables reverting to a secure posture.
- Detect security vulnerabilities and compliance violations.
- Mitigate risks before provisioning cloud native infrastructure.
- Offers flexibility to run locally or integrate with your CI\CD.

[Read more](https://runterrascan.io/)

def:
in_entity: repository
rule_schema:
type: object
properties: {}
ingest:
type: git
git: {}
eval:
type: rego
rego:
type: deny-by-default
def: |
package minder
import future.keywords.if
import future.keywords.every
Comment on lines +40 to +41
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
import future.keywords.if
import future.keywords.every
import rego.v1


default message := "Terrascan pre-commit hook is not configured for the repository"
default allow := false


# pre-commit hook
precommit := file.read(".pre-commit-config.yaml")

parsed_data := parse_yaml(precommit)

allow if {
some repo_id, hook_id
repo_data := parsed_data.repos[repo_id]
endswith(repo_data["repo"], "https://github.com/tenable/terrascan")
hooks = repo_data["hooks"]
hooks[hook_id].id == "terraform-pre-commit"
}

message := "" if allow
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
message := "" if allow
message := "Terrascan pre-commit hook is not configured for the repository"

alert:
type: security_advisory
security_advisory: {}
Loading