Skip to content
Field Notes

E6 · Com2us Platform · Feb 2023 – Feb 2026

Making sure the same finding never comes back

Sort by impact, agree on alternatives, and block it with code defaults

60% → 85%+

  • CSPM
  • Terraform
  • GitLab CI/CD
  • Jenkins
  • Collaboration
No service impactService impactHigh riskLow riskFindingFindingFindingFindingFindingFindingFindingFindingFindingFindingBlockDev teamClose the portentirely?IP restriction + WAFTerraform moduleDefaults60%85%Audit remediation rate
The gauge rises from 60% to 85%.

In one line

Sorted security findings by service impact, agreed on compensating controls, and turned repeated findings into code defaults, raising the audit remediation rate from 60% to over 85%.

Background

The security team scanned four clouds with CSPM (a cloud configuration checking tool) and handed over a list of findings. I was the main owner of sorting and fixing them.

The first-year remediation rate was about 60%. Some items were postponed because fixing them could affect the live service.

What I did

1. Sort by service impact

Select a cell to see how it is handled.

No service impactService impact
High risk
Low risk

High risk with no service impact gets fixed right away.

What I did

2. When blocking is not possible, agree on compensating controls

One finding said to close a port entirely, but the service was actively using that port.

Instead of choosing between “block” and “keep”, I proposed another way to reduce the risk.

  • Restrict source access to only the required IP ranges
  • Add WAF (web application firewall) rules on web paths

Exposure shrank from “the whole internet” to “the required ranges”, so the security team accepted it, and the dev team could apply it with no service change.

What I did

3. Repeated findings become Terraform defaults

If people fix findings by hand every time, the same problem returns with each new resource. So I treated the cause as “the default is not safe” rather than “someone forgot”, and changed the Terraform module defaults themselves. I also created a code review checklist.

Default example (for illustration)

# Block opening admin ports to the whole internet (0.0.0.0/0) at the code stage
variable "admin_ingress_cidrs" {
  type = list(string)
  validation {
    condition     = !contains(var.admin_ingress_cidrs, "0.0.0.0/0")
    error_message = "0.0.0.0/0 is not allowed on admin ports. Specify only the required ranges."
  }
}

# Encrypt disks by default
resource "aws_ebs_volume" "this" {
  encrypted = true
  # ...
}

4. Add a gate to the deployment pipeline

Terraform validate (syntax and configuration check) and plan (preview of changes) became required gates in the GitLab CI/CD and Jenkins pipelines. A change that fails a module’s validation stops here and cannot reach deployment.

Developer code change → terraform validate (failure stops the deployment) → terraform plan → review and checklist → apply

Result

The audit remediation rate rose from about 60% in the first year to over 85% the next year.

New resources now start with safe settings from the beginning.

What I learned

If a security owner stops at “no”, the conversation ends. Fixes happen when you bring an alternative.

A structure that keeps the problem from coming back matters more than a one-time fix, and it only lasts if the dev team can accept it.

Related repositories

Connected stories

Open to work · Cloud infrastructure and security