diff --git a/assets/queries/terraform/aws/kms_key_with_full_permissions/query.rego b/assets/queries/terraform/aws/kms_key_with_full_permissions/query.rego index d1d50a6d1e1..b083866a882 100644 --- a/assets/queries/terraform/aws/kms_key_with_full_permissions/query.rego +++ b/assets/queries/terraform/aws/kms_key_with_full_permissions/query.rego @@ -26,10 +26,34 @@ CxPolicy[result] { } } +CxPolicy[result] { + resource := input.document[i].resource.aws_kms_key_policy[name] + + policy := common_lib.get_policy(resource.policy) + st := common_lib.get_statement(policy) + statement := st[_] + + common_lib.is_allow_effect(statement) + not common_lib.valid_key(statement, "Condition") + common_lib.has_wildcard(statement, "kms:*") + + result := { + "documentId": input.document[i].id, + "resourceType": "aws_kms_key_policy", + "resourceName": tf_lib.get_resource_name(resource, name), + "searchKey": sprintf("aws_kms_key_policy[%s].policy", [name]), + "issueType": "IncorrectValue", + "keyExpectedValue": sprintf("aws_kms_key_policy[%s].policy should not have wildcard in 'Action' and 'Principal'", [name]), + "keyActualValue": sprintf("aws_kms_key_policy[%s].policy has wildcard in 'Action' or 'Principal'", [name]), + "searchLine": common_lib.build_search_line(["resource", "aws_kms_key_policy", name, "policy"], []), + } +} + CxPolicy[result] { resource := input.document[i].resource.aws_kms_key[name] not common_lib.valid_key(resource, "policy") + not has_external_policy(name) result := { "documentId": input.document[i].id, @@ -43,3 +67,8 @@ CxPolicy[result] { } } +has_external_policy(name) { + keyPolicy := input.document[_].resource.aws_kms_key_policy[_] + tf_lib.matches(keyPolicy.key_id, name) +} + diff --git a/assets/queries/terraform/aws/kms_key_with_full_permissions/test/negative.tf b/assets/queries/terraform/aws/kms_key_with_full_permissions/test/negative1.tf similarity index 100% rename from assets/queries/terraform/aws/kms_key_with_full_permissions/test/negative.tf rename to assets/queries/terraform/aws/kms_key_with_full_permissions/test/negative1.tf diff --git a/assets/queries/terraform/aws/kms_key_with_full_permissions/test/negative2.tf b/assets/queries/terraform/aws/kms_key_with_full_permissions/test/negative2.tf new file mode 100644 index 00000000000..2e3fb65fce4 --- /dev/null +++ b/assets/queries/terraform/aws/kms_key_with_full_permissions/test/negative2.tf @@ -0,0 +1,30 @@ +resource "aws_kms_key" "negative2" { + description = "KMS key 2" + deletion_window_in_days = 10 +} + +resource "aws_kms_key_policy" "negative2" { + key_id = aws_kms_key.negative2.id + policy = <