# main.tf — EKM violations fixture # Triggers all 8 EKM policy violations terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } } provider "aws" { region = "ap-south-1" } # EKM-001 + EKM-002 — No rotation, short deletion window resource "aws_kms_key" "bad_key" { description = "bad key" customer_master_key_spec = "SYMMETRIC_DEFAULT" enable_key_rotation = false deletion_window_in_days = 7 } # EKM-003 — Broad KMS decrypt in IAM policy resource "aws_iam_policy" "bad_kms_policy" { name = "bad-kms-policy" policy = jsonencode({ Version = "2012-10-17" Statement = [{ Effect = "Allow" Action = ["kms:Decrypt"] Resource = "*" }] }) } # EKM-004 — KMS key policy grants kms:* to root without condition # deletion_window and rotation set correctly so only EKM-004 fires resource "aws_kms_key" "bad_root_key" { description = "bad root key" customer_master_key_spec = "SYMMETRIC_DEFAULT" enable_key_rotation = true deletion_window_in_days = 30 policy = jsonencode({ Version = "2012-10-17" Statement = [{ Effect = "Allow" Principal = { AWS = "arn:aws:iam::123456789012:root" } Action = "kms:*" Resource = "*" }] }) } # EKM-005 — S3 encryption using AES256 instead of KMS CMK resource "aws_s3_bucket" "bad_bucket" { bucket = "bad-ekm-bucket" } resource "aws_s3_bucket_server_side_encryption_configuration" "bad_sse" { bucket = aws_s3_bucket.bad_bucket.id rule { apply_server_side_encryption_by_default { sse_algorithm = "AES256" } } } # EKM-006 — EBS default encryption disabled resource "aws_ebs_encryption_by_default" "bad_ebs" { enabled = false } # EKM-007 — Secret with no rotation resource "aws_secretsmanager_secret" "bad_secret" { name = "bad-secret" } # No aws_secretsmanager_secret_rotation = EKM-007 violation # EKM-008 — Weak RSA key resource "aws_acm_certificate" "bad_cert" { domain_name = "bad.example.com" validation_method = "DNS" key_algorithm = "RSA_1024" }