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

fix(query): tf mfa delete doing checks out of its scope #7051

Merged
merged 13 commits into from
May 20, 2024
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,6 @@ package Cx
import data.generic.common as common_lib
import data.generic.terraform as tf_lib

CxPolicy[result] {
bucket := input.document[i].resource.aws_s3_bucket[name]
# version before TF AWS 4.0
not common_lib.valid_key(bucket, "lifecycle_rule")
not common_lib.valid_key(bucket, "versioning")

# version after TF AWS 4.0
not tf_lib.has_target_resource(name, "aws_s3_bucket_lifecycle_configuration")
not tf_lib.has_target_resource(name, "aws_s3_bucket_versioning")

result := {
"documentId": input.document[i].id,
"resourceType": "aws_s3_bucket",
"resourceName": tf_lib.get_specific_resource_name(bucket, "aws_s3_bucket", name),
"searchKey": sprintf("aws_s3_bucket[%s]", [name]),
"issueType": "MissingAttribute",
"keyExpectedValue": "versioning should be defined and not null",
"keyActualValue": "versioning is undefined or null",
"searchLine": common_lib.build_search_line(["resource", "aws_s3_bucket", name], []),
}
}

checkedFields = {
"enabled",
"mfa_delete"
Expand Down Expand Up @@ -66,25 +44,6 @@ CxPolicy[result] {
}
}

CxPolicy[result] {
module := input.document[i].module[name]
keyToCheck := common_lib.get_module_equivalent_key("aws", module.source, "aws_s3_bucket", "versioning")

not common_lib.valid_key(module, "lifecycle_rule")
not common_lib.valid_key(module, keyToCheck)

result := {
"documentId": input.document[i].id,
"resourceType": "n/a",
"resourceName": "n/a",
"searchKey": sprintf("module[%s]", [name]),
"issueType": "MissingAttribute",
"keyExpectedValue": "'versioning' should be defined and not null",
"keyActualValue": "'versioning' is undefined or null",
"searchLine": common_lib.build_search_line(["module", name], []),
}
}

CxPolicy[result] {
module := input.document[i].module[name]
keyToCheck := common_lib.get_module_equivalent_key("aws", module.source, "aws_s3_bucket", "versioning")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
provider "aws" {
region = "us-east-1"
}

terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.0"
}
}
}

resource "aws_s3_bucket" "negative6" {
bucket = "my-tf-test-bucket"
acl = "private"

tags = {
Name = "My bucket"
Environment = "Dev"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module "s3_bucket" {
source = "terraform-aws-modules/s3-bucket/aws"
version = "3.7.0"

bucket = "my-s3-bucket"
acl = "private"
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,8 @@ resource "aws_s3_bucket" "positive1" {
Name = "My bucket"
Environment = "Dev"
}

versioning {
enabled = true
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ resource "aws_s3_bucket" "positive2" {

versioning {
enabled = true
mfa_delete = false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ resource "aws_s3_bucket" "positive3" {
}

versioning {
enabled = true
mfa_delete = false
enabled = false
}
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,11 @@
provider "aws" {
region = "us-east-1"
}

terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.0"
}
}
}
module "s3_bucket" {
source = "terraform-aws-modules/s3-bucket/aws"
version = "3.7.0"

resource "aws_s3_bucket" "positive3" {
bucket = "my-tf-test-bucket"
bucket = "my-s3-bucket"
acl = "private"

tags = {
Name = "My bucket"
Environment = "Dev"
}

versioning {
enabled = false
enabled = true
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,9 @@ module "s3_bucket" {

bucket = "my-s3-bucket"
acl = "private"

versioning {
enabled = true
mfa_delete = false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ module "s3_bucket" {
acl = "private"

versioning {
enabled = true
enabled = false
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,30 @@
module "s3_bucket" {
source = "terraform-aws-modules/s3-bucket/aws"
version = "3.7.0"
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.2.0"
}
}
}

provider "aws" {
# Configuration options
}

resource "aws_s3_bucket" "b0" {
bucket = "my-tf-test-bucket"

tags = {
Name = "My bucket"
Environment = "Dev"
}
}

bucket = "my-s3-bucket"
acl = "private"
resource "aws_s3_bucket_versioning" "example2" {
bucket = aws_s3_bucket.b0.id

versioning {
enabled = true
mfa_delete = false
versioning_configuration {
status = "Enabled"
mfa_delete = "Disabled"
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,30 @@
module "s3_bucket" {
source = "terraform-aws-modules/s3-bucket/aws"
version = "3.7.0"
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.2.0"
}
}
}

provider "aws" {
# Configuration options
}

resource "aws_s3_bucket" "bbb" {
bucket = "my-tf-test-bucket"

tags = {
Name = "My bucket"
Environment = "Dev"
}
}

bucket = "my-s3-bucket"
acl = "private"
resource "aws_s3_bucket_versioning" "example" {
bucket = aws_s3_bucket.bbb.id

versioning {
enabled = false
versioning_configuration {
status = "Disabled"
mfa_delete = "Enabled"
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,74 +1,62 @@
[
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 14,
"fileName": "positive1.tf"
},
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 23,
"fileName": "positive2.tf"
"fileName": "positive1.tf"
},
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 25,
"fileName": "positive3.tf"
"fileName": "positive2.tf"
},
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 24,
"fileName": "positive4.tf"
"fileName": "positive3.tf"
},
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 23,
"fileName": "positive4.tf"
},
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 1,
"fileName": "positive5.tf"
"fileName": "positive3.tf"
},
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 8,
"fileName": "positive6.tf"
"fileName": "positive4.tf"
},
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 10,
"fileName": "positive7.tf"
"fileName": "positive5.tf"
},
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 8,
"fileName": "positive8.tf"
"fileName": "positive6.tf"
},
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 9,
"fileName": "positive8.tf"
"fileName": "positive6.tf"
},
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 28,
"fileName": "positive9.tf"
"fileName": "positive7.tf"
},
{
"queryName": "S3 Bucket Without Enabled MFA Delete",
"severity": "LOW",
"line": 27,
"fileName": "positive10.tf"
"fileName": "positive8.tf"
}
]
Loading
Loading