SOC2

SOC 2 Configuration Management: System Change Tracking

Dax Okafor had eleven days until his Type II fieldwork closed, and one open sample was going to blow the whole audit.

SOC 2 Configuration Management: System Change Tracking
Loading advertisement...
72

Dax Okafor had eleven days until his Type II fieldwork closed, and one open sample was going to blow the whole audit.

Dax was VP of Infrastructure at Cascade Ledger, a mid-market payments orchestration platform that routed roughly $900 million a year in transaction volume for 340 mid-size merchants. Cascade's single biggest prospect — a national retail chain worth $3.1 million in first-year contract value — had made a clean SOC 2 Type II report a signed condition of the deal. No report, no contract. The retailer's own vendor risk team had said as much in writing.

The auditor, a meticulous second-year senior at a regional CPA firm, had pulled a sample of twenty production firewall rule changes from the twelve-month observation window. Nineteen had a Jira ticket, a peer-reviewed pull request, and a Terraform plan output attached. The twentieth — a rule opened eight months earlier to let a new payment gateway reach an internal API — had none of that. An engineer, under pressure during an on-call incident, had SSH'd into the firewall appliance and hand-typed the change to stop a cascading failure at 2:14 a.m. It worked. Nobody wrote it down. Nobody rolled it into the infrastructure-as-code repository afterward. Six months later, nobody remembered it existed until the auditor found it sitting open in production with no ticket, no approver, and no record of who made it or why.

That single unlogged rule change didn't just risk a control exception. It threatened to unravel the entire CC7.1 and CC8 testing population, because if one change bypassed the tracked pipeline, the auditor now had to ask how many others did too. Dax spent the next eleven days doing what should have been a five-minute config diff: reconstructing a paper trail for a change nobody had planned to write down.

This is the article I wish Dax had read a year earlier. Configuration management is one of the quietest, most under-resourced corners of a SOC 2 program — and one of the most consistently cited sources of exceptions I see in Type II reports. It sits at the intersection of two Common Criteria: CC7.1, which covers how you detect and correct configuration deviations that could compromise system security, and CC8, which governs how you authorize, test, approve, and track changes to infrastructure and software. Get it right, and it becomes some of the easiest, most automatable evidence in your whole audit. Get it wrong, and every hand-typed change becomes a landmine waiting for a sample to land on it.

Who this is for, and what you'll walk away with

This is written for infrastructure leaders, DevOps and platform engineers, security engineers, and compliance managers who are building or maturing a SOC 2 program and need configuration management to actually hold up under audit — not just look good in a policy document. You should already have a basic grasp of your Trust Services Criteria scope; if you need that foundation first, start with our complete guide to the AICPA Trust Services Criteria.

By the end, you'll have a working model for secure baselines and hardening standards (including how CIS Benchmarks actually get used in practice, not just cited), a defensible asset and configuration inventory, an infrastructure-as-code and GitOps approach that doubles as your change evidence, a real drift-detection program, and a clear map of exactly what an auditor will ask to see — with sample tables and templates you can adapt this week.

Where configuration management sits inside SOC 2

Configuration management doesn't have its own dedicated Trust Services Criterion the way access control or risk assessment do. Instead, it's stitched across two Common Criteria series that auditors test together because they're operationally inseparable.

CC7.1 sits inside the System Operations criteria series and is where auditors look for evidence that the organization uses baseline configurations for its infrastructure and monitors systems for deviations from that baseline that could introduce vulnerabilities. This is the "did you define what 'secure' looks like, and do you know when something drifts away from it" criterion. CC8, the Change Management series, is where auditors test whether changes to infrastructure, data, and software are authorized, designed, developed, configured, documented, tested, approved, and implemented in a controlled way before they reach production.

The table below shows how these two criteria typically get tested together in a configuration management context — this is the mental model to build your program around before you buy a single tool.

Table 1: CC7.1 and CC8 — what each is actually testing in a configuration management context

Criterion

What it's testing

Typical configuration management evidence

CC7.1

Baseline configurations exist and deviations are detected

Hardening standards, CIS Benchmark scan results, drift detection reports

CC7.1

Vulnerabilities from misconfiguration are identified

CSPM findings, configuration scan tickets, remediation SLAs

CC8.1

Changes are authorized before development/configuration

Change request tickets, approval workflow logs

CC8.1

Changes are designed and documented

Architecture notes, pull request descriptions, IaC diffs

CC8.1

Changes are tested before deployment

CI pipeline test results, staging validation logs

CC8.1

Changes are approved prior to implementation

Peer review / approver sign-off (e.g., pull request approval)

CC8.1

Changes are tracked and traceable

Version control history, ticket-to-commit linkage, deployment logs

CC8.1

Emergency changes follow a defined (if abbreviated) process

Emergency change log, retroactive approval records

Notice that configuration management is really the infrastructure and system-state half of change management, applied continuously — not a one-time project. A hardened baseline that nobody monitors for drift is a document, not a control. An IaC pipeline that nobody actually uses for real production changes is theater, not evidence.

Configuration management vs. change management: where the line actually is

I get asked constantly whether configuration management and change management are the same control area with two names. They're not, and the distinction matters both for how you build your program and for how you'll be tested.

Change management (CC8, broadly) is the process discipline: how any change — a code deployment, a new feature, a database schema update, a third-party integration, a config change — gets requested, reviewed, approved, tested, and released. It's process-first and applies to software and infrastructure alike.

Configuration management (mostly CC7.1, feeding into CC8) is narrower and state-first: it's about the desired state of your systems — server hardening settings, firewall rules, IAM policies, container base images, database parameters — and whether the actual state matches that desired state at any given moment, with a record of how and why it diverged when it did. Configuration management asks "what should this system look like, and does it still look like that?" Change management asks "was this change to the system properly authorized and controlled?"

In practice they overlap constantly, because most configuration changes are also changes subject to CC8's approval and tracking requirements. But you can have excellent change management and still fail configuration management — for example, a team that runs a disciplined pull-request-and-approval process for application code deployments but has no baseline at all for how its servers, Kubernetes clusters, or firewalls should be configured, and no way to detect when someone (or some automation) quietly changes a setting outside that process.

Table 2: Configuration management vs. change management, side by side

Dimension

Configuration Management

Change Management

Primary SOC 2 criterion

CC7.1 (with CC8 overlap)

CC8

Core question

Does the system match its defined secure baseline?

Was this change authorized, tested, and approved?

Unit of work

System/infrastructure state

A discrete change event

Detects

Drift — unauthorized or unintended deviation

Unauthorized or untested releases

Primary evidence

Baseline docs, scan reports, drift alerts

Tickets, approvals, test results, deployment logs

Typical tooling

CIS-CAT, CSPM, Ansible/Chef/Puppet, Terraform state

Jira/ServiceNow, CI/CD pipelines, GitHub/GitLab

Related PentesterWorld article

This article

SOC 2 Change Management: System and Application Updates

If you're building both programs simultaneously — which is the right way to do it — treat configuration management as the state layer underneath change management's process layer. Every configuration baseline needs a change process to update it; every change process needs a configuration baseline to compare against. Our companion piece on SOC 2 system configuration and hardening goes deeper on how to write the hardening standards themselves; this article focuses on tracking those configurations, detecting drift, and producing evidence over the full observation period.

Why this control area produces so many audit exceptions

I've sat through more Type II fieldwork than I can count, and configuration management is consistently in the top three sources of exceptions, alongside access reviews and vendor management. There's a specific reason: it's the control area most likely to have a gap between "what we documented" and "what we actually do under pressure."

Access control failures usually come from process gaps — someone forgot to run an offboarding checklist. Configuration management failures come from a different place: engineers making legitimate, often correct, often urgent changes outside the system that's supposed to record them. Dax's 2:14 a.m. firewall rule is the textbook case. Nobody was being negligent. Someone was fixing a live incident, and the tooling that should have captured the change — either automatically or through a fast-tracked emergency process — didn't exist or wasn't used.

"The exceptions I write up almost never come from a team with no process. They come from a team with a great process that has one undocumented escape hatch — usually root SSH access to something that's supposed to be managed entirely through code. Auditors don't need to find that hatch every time. We just need to find it once in the sample." — Renata Sousa-Klein, Principal SOC 2 Auditor, Bristow & Yale CPAs

A second, quieter reason configuration management produces exceptions: organizations conflate "we have a hardening standard" with "we enforce and monitor a hardening standard." A PDF hardening checklist from three years ago that nobody has re-validated against current CIS Benchmark versions is worse than having no checklist, because it creates a false sense that the control exists. Auditors will ask for the last time the baseline was reviewed, who approved it, and what evidence shows current systems are actually measured against it — not just that the document exists in a policy binder.

Table 3: The most common configuration management exceptions I see in Type II fieldwork

Exception pattern

Root cause

Fastest fix

Sampled change has no ticket/approval

Out-of-band manual change during incident

Formal emergency change process with retroactive logging

Baseline document exists but is outdated

No review cadence tied to CIS Benchmark releases

Annual baseline review tied to a calendar control owner

Drift detected but no remediation evidence

Drift alerts generated, nobody owns closing them

Assign drift alerts an SLA and a ticket queue, like vulnerabilities

Inventory doesn't match production reality

Asset inventory manually maintained, goes stale

Auto-discovery feeding the inventory from cloud/IaC APIs

IaC repo exists, but console changes still happen

No guardrails preventing manual console edits

Restrict production write access; enforce IaC-only deploys

Config change approved by the person who made it

No segregation of duties in the approval workflow

Require a second, independent approver in the pipeline

Step one: build and document secure baselines

Everything downstream — drift detection, change tracking, evidence — depends on having an actual, specific, versioned answer to the question "what does a correctly configured system look like here?" That answer is your secure configuration baseline (sometimes called a hardening standard), and it needs to exist for every asset class in scope: servers and VMs, containers, databases, network devices, cloud account settings, SaaS admin consoles, and endpoints.

A baseline that says "harden all servers per best practices" is not a baseline. A usable baseline specifies concrete, testable settings: disable password authentication over SSH, require key-based auth, disable unused services, enforce a minimum TLS version, set specific audit logging parameters, restrict root/administrator login, apply specific file permission settings on sensitive directories. The test for whether your baseline is audit-ready is simple: could an engineer who has never seen your environment run a scan against it and get a pass/fail result for every line item? If not, it's a philosophy, not a standard.

The overwhelming majority of organizations I work with don't write hardening baselines from scratch — they adopt an industry standard and tailor it. That's the right move, and it's also what auditors expect to see referenced, because it demonstrates the baseline reflects independent, widely-vetted security guidance rather than one engineer's opinion.

CIS Benchmarks in practice

The Center for Internet Security (CIS) Benchmarks are the most widely adopted hardening reference in SOC 2 audits I encounter, covering operating systems (Windows, Linux distributions), cloud platforms (AWS, Azure, GCP), containers and Kubernetes, databases, and common applications. Each benchmark defines specific configuration recommendations, typically organized into profile levels that trade off security rigor against operational impact.

Table 4: CIS Benchmark profile levels, explained

Profile

What it means

Typical use case

Level 1

Practical, minimizes impact on system usability/performance

Baseline for most production systems

Level 2

Defense-in-depth, may impact functionality or performance

High-sensitivity environments (payment processing, regulated data)

STIG variant (where applicable)

Aligned to DoD Security Technical Implementation Guides

Government/defense-adjacent environments

Most SOC 2 organizations I advise land on CIS Level 1 as their baseline for general production infrastructure, with Level 2 applied selectively to systems handling payment data, health data, or other elevated-sensitivity workloads. That tiering decision itself should be documented — auditors will ask why you chose the profile you did, and "we picked whichever one our scanning tool defaulted to" is not a satisfying answer.

Table 5: Where CIS Benchmarks typically get applied across a SOC 2 environment

Asset class

Example CIS Benchmark

Common scanning tool

Linux servers

CIS Distribution Independent Linux / Ubuntu / RHEL

CIS-CAT Pro, OpenSCAP, Lynis

Windows servers

CIS Microsoft Windows Server Benchmark

CIS-CAT Pro, Microsoft Defender for Cloud

AWS account/services

CIS Amazon Web Services Foundations Benchmark

AWS Config, Prowler, CSPM tools

Azure

CIS Microsoft Azure Foundations Benchmark

Microsoft Defender for Cloud, CSPM tools

GCP

CIS Google Cloud Platform Foundation Benchmark

Security Command Center, CSPM tools

Kubernetes

CIS Kubernetes Benchmark

kube-bench, CSPM tools

Docker

CIS Docker Benchmark

Docker Bench for Security

Databases

CIS benchmarks for MySQL, PostgreSQL, MongoDB

Native audit tools, CSPM

I typically recommend logging the specific CIS Benchmark version and profile level applied to each asset class inside the baseline document itself — CIS updates benchmarks regularly, and auditors increasingly ask when you last reconciled your baseline against the current published version.

Beyond CIS: cloud, container, and SaaS baselines

CIS Benchmarks cover the technical substrate well, but a complete configuration management program also needs baselines for things CIS doesn't fully address: SaaS administrative console settings (your identity provider's session timeout policy, your code repository's branch protection rules, your cloud storage bucket's default access policy), and internal application-specific configuration (feature flags with security implications, API rate limits, encryption settings for application-managed data). These deserve the same rigor — a written standard, a testable pass/fail state, and a named control owner — even though no external benchmark exists for them.

"The CIS Benchmark gets you maybe 70% of the way for infrastructure. The other 30% — your SSO session policy, your storage bucket defaults, your CI/CD runner permissions — nobody hands you a benchmark for that. You have to write it yourself, and that's usually the part that's missing when I do a gap assessment." — Marcus Chen, Director of Security Engineering, Loomstack

Golden images and hardened templates

The most efficient way to make a baseline stick is to bake it into a golden image — a pre-hardened VM image, container base image, or infrastructure module that new systems are provisioned from, rather than hardened after the fact. This flips the economics of configuration management: instead of scanning every new server after deployment and remediating findings, you start every deployment from a known-good state and only need to detect deviation from it afterward.

Table 6: Golden image approach vs. post-deployment hardening

Dimension

Golden image / hardened template

Post-deployment hardening

When hardening happens

Before first boot

After deployment, reactively

Consistency across fleet

High — every instance starts identical

Variable — depends who ran the script and when

Audit evidence

Image build pipeline + version tag

Individual scan-and-remediate tickets per host

Effort at scale

Front-loaded, then low marginal cost

Recurring cost per new system

Drift risk

Lower — deviation is easier to spot against a known start state

Higher — no consistent starting point to compare against

Cascade Ledger, after its firewall incident, moved to exactly this model: a hardened image pipeline rebuilt weekly against the latest CIS Level 1 Ubuntu benchmark, with every production instance required to trace back to a tagged image version. That single change turned "prove this server is hardened" from a manual scan-and-screenshot exercise into a one-line query against the image tag.

Step two: build a real asset and configuration inventory

You cannot detect drift, track changes, or produce evidence for a system you don't know exists. An asset and configuration inventory — often called a configuration management database, or CMDB — is the foundation everything else in this article sits on top of, and it's also one of the first things an auditor asks for: a complete list of in-scope systems, with enough detail to understand what each one is, what it runs, who owns it, and what its expected configuration state should be.

The mistake I see most often isn't a missing inventory — it's a stale one. A spreadsheet maintained by hand, updated when someone remembers, drifting further from reality every sprint. Auditors test this directly: they'll ask for your asset inventory, then independently pull a live list from your cloud provider or infrastructure tooling, and compare. A meaningful gap between the two is an automatic finding, because it demonstrates the inventory isn't a reliable source of truth for anything downstream.

Table 7: Minimum fields for a SOC 2-defensible configuration inventory

Field

Why it matters to an auditor

Asset identifier (hostname, resource ID)

Unique reference for sampling and tracing

Asset type/class

Determines which baseline/hardening standard applies

Environment (production, staging, dev)

Scoping — most controls focus on production

Owner (team or named individual)

Accountability for remediation

Data sensitivity/classification

Determines whether elevated hardening (e.g., CIS Level 2) applies

Baseline/hardening standard applied

Links the asset to its expected configuration state

Last configuration scan date

Evidence of ongoing CC7.1 monitoring

Source of truth (IaC module, image tag)

Traces the asset back to its authorized definition

In-scope for SOC 2? (Y/N)

Confirms boundary alignment with your system boundary

The most durable fix for inventory staleness is to stop maintaining it by hand at all. Auto-discovery — pulling live inventory from your cloud provider's resource APIs, your infrastructure-as-code state files, and your container orchestration platform — keeps the inventory synchronized with reality by construction rather than by diligence. Several CSPM and asset management tools do this natively; even a scheduled script that queries your cloud APIs and reconciles against your inventory weekly is a substantial improvement over manual updates.

"Every readiness engagement starts the same way: I ask for the asset inventory, and I get a spreadsheet last touched two quarters ago. Once we replace it with something the cloud APIs populate automatically, half the other findings in the engagement quietly disappear, because you can't fix drift on a system you didn't know you had." — Aisha Bello-Fitzgerald, Compliance Lead, Nordbridge Health Analytics

Step three: manage configuration through code

The single most effective structural change I recommend to clients struggling with configuration management is moving configuration out of consoles and runbooks and into version-controlled code — infrastructure as code (IaC). When your servers, networks, IAM policies, and cloud resources are defined in Terraform, CloudFormation, Pulumi, or a configuration management tool like Ansible, Chef, or Puppet, the configuration itself becomes the evidence. A pull request is a change ticket. A merge is an approval record. A commit history is an audit trail that nobody has to reconstruct by hand.

This matters enormously for CC8 testing because it collapses two separate evidentiary burdens — "prove the change was approved" and "prove the resulting configuration matches what was approved" — into a single artifact. The auditor can trace a production security group directly back to the Terraform module that defines it, back to the pull request that changed it, back to the approver who signed off. That's a fundamentally stronger evidence chain than a change ticket that describes an action taken manually somewhere else.

Table 8: IaC and configuration management tool landscape

Tool category

Examples

Primary use

What it contributes as SOC 2 evidence

Declarative infrastructure provisioning

Terraform, Pulumi, AWS CloudFormation

Defining cloud resources as code

Diffable plan/apply output tied to a commit and PR

Configuration management (host-level)

Ansible, Chef, Puppet, SaltStack

Enforcing OS-level settings on running hosts

Run logs showing convergence to defined state

Container/image build

Packer, Docker, Buildah

Building golden images and container base images

Build pipeline logs, image digest/version tags

Kubernetes manifests/policy

Helm, Kustomize, OPA/Gatekeeper, Kyverno

Defining and enforcing cluster configuration

Policy-as-code enforcement logs, admission denials

Version control

Git (GitHub, GitLab, Bitbucket)

Source of truth and change history

Commit history, PR approvals, branch protection logs

Secrets/config management

HashiCorp Vault, AWS Secrets Manager, SOPS

Managing sensitive configuration values

Access logs, rotation history

Adopting IaC isn't free, and I'm careful not to oversell it to clients who are mid-migration: legacy systems, acquired infrastructure, and vendor-managed appliances often can't be fully expressed as code, and that's fine — it just means those assets need a compensating configuration-tracking mechanism (scheduled scans, manual change logs with the same rigor) rather than being quietly excluded from scope.

GitOps as the audit trail

GitOps takes the IaC model one step further: instead of engineers running terraform apply from their laptops, a pipeline automatically reconciles the live environment against whatever is merged into a designated branch, and — critically — production is configured to reject changes that didn't come through that pipeline. This is the single strongest control I know of for closing the "manual console change" gap that caused Cascade Ledger's incident, because it doesn't just document changes better; it structurally prevents undocumented ones from persisting.

"Once we moved to GitOps and locked down console write access to break-glass only, our change sample pass rate went from something like 85% to 100% in two audit cycles. Not because our engineers got more disciplined — because the path of least resistance became the compliant path." — Tomasz Wieczorek, Site Reliability Engineering Manager, Ferrovia Logistics

Table 9: Manual configuration changes vs. GitOps-managed changes

Dimension

Manual / console-driven changes

GitOps-managed changes

Where the change originates

Cloud console, SSH session, admin panel

Pull request against an IaC repository

Approval mechanism

Verbal, Slack message, or none

Required PR review/approval before merge

Record of who/what/when

Cloud provider audit log only (if enabled)

Git commit history + cloud audit log, cross-referenced

Drift risk

High — live state can diverge from any documentation

Low — pipeline continuously reconciles state to the repo

Rollback

Manual, often undocumented

git revert — auditable and repeatable

Auditor sampling experience

Reconstructive, time-consuming

Direct trace from resource to commit to approver

GitOps doesn't eliminate the need for an emergency change process — incidents will always require fast, sometimes out-of-band action — but it does mean the default path for 95%+ of changes produces its own evidence automatically, which shrinks the emergency-change population an auditor needs to test manually.

Step four: detect configuration drift

Configuration drift is what happens when a system's live state diverges from its documented, approved baseline — whether through a manual change, an automated process behaving unexpectedly, a failed deployment that partially applied, or simple entropy as dependencies update themselves over time. Drift is not inherently a policy violation; sometimes it's a legitimate emergency fix that hasn't been reconciled back into code yet, as with Dax's firewall rule. What makes drift a control failure isn't that it happens — it's that it happens silently, without detection or a remediation record.

Even organizations with strong IaC adoption experience drift. Someone with console access fixes something at 2 a.m. and forgets to open a follow-up PR. An auto-scaling event provisions a resource from a slightly stale image. A third-party integration modifies a setting through its own API access. A well-designed configuration management program assumes drift will happen and builds the detection and remediation loop as a first-class, permanent process — not a one-time cleanup project before the audit.

Table 10: How configuration drift typically happens

Drift source

Example

Detection method

Manual emergency change

Console-based firewall rule during an incident

Cloud audit log diff against IaC state

Partial/failed deployment

Pipeline run fails halfway, leaves inconsistent state

CI/CD pipeline failure alerts + post-deploy state check

Auto-scaling from stale image

New instances provisioned from an outdated golden image

Image version check against current approved tag

Third-party/API-driven change

SaaS integration modifies a setting via its own permissions

Periodic configuration export and diff

Local/host-level drift

Package manager auto-updates a dependency outside the pipeline

Host-level configuration management agent (Ansible/Chef check mode)

Human error in the pipeline itself

Engineer merges an unreviewed change to a shared module

Branch protection + mandatory review enforcement

Table 11: Drift detection tooling by layer

Layer

Tooling examples

Detection cadence

Cloud account/resource configuration

AWS Config, Azure Policy, GCP Security Command Center, CSPM platforms (Wiz, Prisma Cloud, Orca)

Continuous / near-real-time

IaC state reconciliation

terraform plan in CI (scheduled), Pulumi drift detection

Daily or on a defined schedule

Host-level configuration

Ansible in check mode, Chef InSpec, Puppet noop runs

Daily

Kubernetes cluster state

OPA/Gatekeeper, Kyverno policy reports, kube-bench

Continuous (admission control) + scheduled scans

Benchmark/hardening compliance

CIS-CAT Pro, OpenSCAP, Qualys, Tenable

Weekly to monthly

The cadence matters as much as the tool. A drift check that runs once a quarter, right before the audit, tells the auditor exactly what it looks like: a compliance exercise, not an operational control. Continuous or daily drift detection, feeding into a ticket queue with an SLA, is what demonstrates CC7.1 is a living monitoring process rather than a pre-audit fire drill.

"I ask every client the same question in the readiness call: when drift is detected, does a human ever see it, or does the report just sit in a dashboard nobody checks? Detection without a ticket and an owner is the same as no detection, from an audit-evidence standpoint." — Priya Natarajan, CISO, Havenmark Financial

Step five: track and approve configuration changes

Detection is half the loop. The other half is a defensible record of every configuration change — planned or emergency — that shows what changed, who authorized it, when it happened, and how it was verified. This is where configuration management hands off directly to CC8 change tracking, and where most of your Type II sample testing will actually happen.

A configuration change log, at minimum, should capture: the asset affected, the specific setting changed (before and after values where feasible), the requester, the approver (who must not be the same person, to preserve segregation of duties), the ticket or pull request reference, the date implemented, and — critically — the date it was reconciled back into the source-of-truth (the IaC repository or configuration management tool), if it wasn't made through that pipeline in the first place.

Table 12: Anatomy of a defensible configuration change record

Field

Purpose

Change ID / ticket reference

Links to the request and business justification

Asset(s) affected

Ties the change to a specific inventory entry

Change type (standard, emergency, routine)

Determines which approval path applies

Requested by

Accountability for the change request

Approved by (independent of requester)

Evidence of segregation of duties

Description of change (before/after state)

What auditors will compare against the live system

Test/validation evidence

Confirms the change didn't introduce a new risk

Implementation date/time

Places the change within the observation period

Reconciled to IaC/source of truth? (Y/N, date)

Closes the loop for changes made out-of-band

Emergency and out-of-band changes

Every organization I've worked with, without exception, needs a legitimate emergency change path — incidents don't wait for a two-day review cycle. The mistake isn't having an emergency path; it's not having one at all, which pushes engineers toward silent, undocumented workarounds like the one that nearly cost Cascade Ledger its retail contract. A well-designed emergency change process has a lighter-weight approval (often a single on-call lead rather than a full review board), but it still requires retroactive documentation and reconciliation within a defined window — I typically recommend 24 to 72 hours — after which the change is either formally approved after the fact, rolled back, or captured permanently in the IaC baseline.

Table 13: Standard vs. emergency change process

Element

Standard change

Emergency change

Approval timing

Before implementation

Before or immediately after (defined window)

Approver

Peer review + designated approver

On-call lead or incident commander

Testing

Pre-production validation required

Post-implementation validation, if pre-testing isn't feasible

Documentation

Filed with the change

Filed retroactively within 24–72 hours

Reconciliation to IaC

Change originates in IaC

Must be reconciled back into IaC/baseline afterward

Audit sample expectation

Ticket, approval, test evidence, deployment log

Same, plus incident reference and reconciliation record

Auditors are not surprised to see emergency changes in a sample — production incidents happen everywhere. What draws scrutiny is an emergency change with no retroactive documentation, or one that was never reconciled back into the baseline, because six months later it looks exactly like Cascade Ledger's orphaned firewall rule: a change nobody can explain.

Cloud configuration management and CSPM

For organizations running primarily in AWS, Azure, or GCP — which describes most of the SaaS companies I work with — cloud configuration management deserves its own callout, because the attack surface here moves fast and the blast radius of a single misconfigured setting (a public storage bucket, an overly permissive IAM role, an unencrypted database snapshot) can be enormous.

Cloud Security Posture Management (CSPM) tools continuously evaluate your cloud accounts against a defined benchmark (typically CIS Benchmarks plus vendor-specific best practices) and flag deviations in near real time. This is, functionally, drift detection purpose-built for cloud environments, and it's rapidly become the default expectation auditors have for any organization with meaningful cloud infrastructure in scope.

Table 14: What a CSPM policy set typically checks

Policy category

Example check

Why it matters

Identity and access

No IAM users/roles with unused admin privileges

Enforces least privilege at the account level

Storage

No publicly readable/writable storage buckets

Prevents accidental data exposure

Encryption

Encryption at rest enabled on all data stores

Confirms confidentiality commitments are technically enforced

Network

No security groups open to 0.0.0.0/0 on sensitive ports

Reduces exposed attack surface

Logging

CloudTrail/activity logging enabled account-wide

Ensures the audit trail itself can't be silently disabled

Secrets

No hardcoded credentials in resource configuration

Prevents credential leakage through misconfiguration

CSPM findings should feed the same remediation workflow as vulnerability findings — a ticket, an owner, an SLA, and evidence of closure — rather than living only in a dashboard. Our article on SOC 2 vulnerability management covers that remediation-tracking discipline in more depth; the mechanics translate directly to configuration findings.

Container and Kubernetes configuration hardening

Container platforms introduce a configuration layer most legacy hardening standards were never written for, and auditors in DevOps-heavy environments increasingly ask about it directly. Kubernetes in particular has a large, easy-to-misconfigure surface: role-based access control (RBAC) bindings, network policies, pod security standards, and admission control all need explicit baselines.

Table 15: Kubernetes/container hardening baseline elements

Area

Baseline expectation

Common misconfiguration

Pod security

Non-root containers, no privileged mode, read-only root filesystem where possible

Privileged containers left enabled from early development

RBAC

Namespace-scoped roles, no cluster-admin for routine workloads

Service accounts granted cluster-admin for convenience

Network policy

Default-deny between namespaces, explicit allow rules

No network policies defined — flat, fully-open cluster network

Image provenance

Images built from approved base images, scanned before deploy

Images pulled from unverified public registries

Secrets handling

Secrets injected via a secrets manager, not baked into manifests

Secrets committed in plaintext to Kubernetes YAML

Admission control

Policy-as-code (OPA/Gatekeeper, Kyverno) blocking non-compliant deploys

No enforcement — bad configs reach production silently

Admission control is worth calling out specifically because it changes drift detection from reactive to preventive: instead of finding a privileged container running in production during a weekly scan, a policy engine refuses to schedule it in the first place. That's the container-world equivalent of the golden-image approach for VMs — bake the baseline into the deployment gate rather than checking for it after the fact.

Network device and endpoint configuration management

Not every SOC 2 environment is fully cloud-native. Organizations with on-premises data centers, physical network appliances, or a substantial endpoint fleet need configuration management for those asset classes too, and the tooling looks different from the cloud-native stack above.

Table 16: Network device and endpoint configuration management approaches

Asset class

Baseline source

Configuration tracking approach

Firewalls/routers/switches

CIS Network Device Benchmarks, vendor hardening guides

Config backup + diff tooling (e.g., Oxidized, RANCID), change tickets for manual CLI changes

Load balancers

Vendor hardening guides, internal TLS/cipher standard

Config export and version control, scheduled diff against baseline

Laptops/workstations

CIS Benchmarks for the OS, internal endpoint standard

Mobile device management (MDM) enforced policies, compliance dashboards

VPN/remote access gateways

Vendor hardening guides

Centralized policy management, periodic configuration export

IoT/specialized hardware

Vendor guidance, compensating controls where hardening is limited

Network segmentation, monitoring in lieu of full hardening

Where full automation isn't feasible — an aging firewall appliance without a robust API, for instance — the fallback is a disciplined manual process: scheduled configuration exports, a maintained diff history, and change tickets for every manual edit. It's more labor-intensive than a GitOps pipeline, but it's still auditable, which is the bar that actually matters.

The evidence auditors actually request

By the time fieldwork starts, an auditor testing CC7.1 and CC8 for configuration management is going to ask for a specific, fairly predictable set of artifacts. Building your program around producing these as a natural byproduct of daily operations — rather than assembling them under deadline pressure — is the difference between a smooth audit and Dax's eleven-day scramble.

Table 17: Configuration management evidence request checklist

Evidence requested

Where it should come from

Documented secure baseline/hardening standard per asset class

Baseline documentation repository, version-controlled

Current asset and configuration inventory

Auto-discovered inventory or CMDB export

CIS Benchmark (or equivalent) scan results for a sample of systems

CSPM, CIS-CAT, OpenSCAP, or equivalent scan reports

Drift detection reports and remediation tickets

CSPM/IaC drift alerts linked to ticketing system

Sample of configuration change tickets across the audit period

Ticketing system (Jira, ServiceNow) with linked PRs

Evidence changes were approved by someone other than the requester

PR approval logs, ticket approval fields

Evidence of testing prior to production deployment

CI pipeline logs, staging validation records

Emergency change log with retroactive approvals

Emergency change register, incident references

Baseline review/update history

Version history on the baseline document, review sign-offs

Reconciliation of manual changes back into IaC

Commit history showing post-hoc IaC updates

I encourage clients to build a lightweight internal "evidence locker" — a shared drive or GRC tool folder mirroring this exact list, refreshed monthly rather than assembled in the two weeks before fieldwork. Our SOC 2 evidence collection article covers the broader discipline of evidence management across all criteria; configuration management evidence tends to be the most automatable category if you've built the CSPM and IaC pipeline described above.

Common audit findings — and how to close them before your auditor sees them

Beyond the exception patterns already covered, a few specific findings show up often enough in my engagements that they're worth calling out directly, along with the remediation path I typically recommend.

Table 18: Frequent configuration management findings and remediation paths

Finding

Why it happens

Remediation

No documented baseline for a specific asset class (e.g., SaaS admin consoles)

Baseline effort focused only on infrastructure, not SaaS

Extend baseline documentation to every in-scope asset class, including SaaS

Scan results exist but findings were never remediated

No SLA or ownership assigned to scan output

Route findings into the same remediation queue and SLA as vulnerabilities

Inventory omits assets provisioned outside the standard pipeline

Shadow IT or a team using a different cloud account

Periodic account/subscription discovery sweep; enforce centralized provisioning

Change approver is the same person as the requester

Small team, no defined segregation of duties

Add a second approver requirement in the ticketing/PR workflow, even if it's a rotating peer

No evidence baseline was reviewed in the audit period

No calendar owner or reminder for the review cycle

Assign a named control owner with an annual (or benchmark-release-triggered) review date

CIS Benchmark version referenced is several years out of date

Baseline never revisited after initial adoption

Tie baseline reviews to CIS's benchmark release cadence, not an arbitrary date

Building the program: a realistic 120-day roadmap

Clients often ask how long it takes to stand up configuration management from a cold start. The honest answer depends heavily on how much infrastructure is already under IaC, but this is the sequencing I use most often for a mid-size SaaS organization with a mix of cloud-native and legacy assets.

Table 19: 120-day configuration management build roadmap

Phase

Timeframe

Key activities

Discovery

Days 1–15

Inventory all in-scope assets; identify what's already under IaC vs. manually managed

Baseline definition

Days 16–35

Adopt CIS Benchmarks per asset class; document tailoring decisions and exceptions

Tooling selection

Days 20–40

Select CSPM, scanning, and drift-detection tooling; pilot on one environment

IaC/GitOps rollout

Days 30–75

Migrate priority infrastructure into IaC; lock down manual console write access

Drift detection go-live

Days 60–90

Enable continuous scanning; route findings into a ticketing queue with SLAs

Change process formalization

Days 60–90

Define standard and emergency change workflows; enforce segregation of duties

Evidence locker build-out

Days 90–110

Establish recurring evidence capture aligned to the audit evidence checklist

Internal validation / mock testing

Days 110–120

Run an internal sample test simulating auditor sampling before real fieldwork

Organizations already running substantial IaC can compress this significantly — sometimes to 45–60 days — because phases three and four are largely already in place. Organizations with heavy legacy or on-premises footprints should expect the low end of this range to stretch, particularly for network device and endpoint tooling that lacks clean APIs.

Roles and responsibilities

Configuration management fails as often from unclear ownership as from missing tooling. A RACI structure — even a lightweight one — prevents the most common failure mode: everyone assuming someone else is watching the drift dashboard.

Table 20: Configuration management RACI

Activity

Platform/Infra Engineering

Security Engineering

Engineering Managers

Compliance/GRC

Executive Sponsor

Define secure baselines

Responsible

Consulted

Informed

Consulted

Informed

Maintain asset inventory

Responsible

Accountable

Informed

Consulted

Informed

Operate IaC/GitOps pipeline

Responsible

Consulted

Accountable

Informed

Informed

Monitor for configuration drift

Responsible

Accountable

Informed

Consulted

Informed

Approve standard changes

Consulted

Consulted

Accountable

Informed

Informed

Approve emergency changes

Responsible

Consulted

Accountable

Informed

Informed

Review baseline annually

Consulted

Responsible

Informed

Accountable

Informed

Assemble audit evidence

Consulted

Consulted

Informed

Accountable

Informed

What this actually costs, by company size

Budget conversations for configuration management tend to focus on tooling license costs and undercount the engineering time required to migrate legacy infrastructure into a trackable state. Both matter, and the ratio between them shifts a lot with company size.

Table 21: Illustrative configuration management program costs by company size

Company size

Primary cost driver

Illustrative annual tooling spend

Illustrative engineering investment

Startup (under 50 employees, cloud-native)

CSPM/scanning tool licensing

$6,000–$18,000

1 engineer, part-time, ~1 quarter to establish

Mid-market (50–500 employees, mixed cloud/legacy)

IaC migration + CSPM at scale

$25,000–$80,000

2–4 engineers, part-time, 2–3 quarters

Enterprise (500+ employees, hybrid/multi-cloud)

Enterprise CSPM, config management platform, dedicated headcount

$100,000–$400,000+

Dedicated platform/security engineering team, ongoing

These figures are illustrative, tied to the scenarios in this article, and will vary with your cloud footprint, number of accounts, and how much legacy infrastructure resists automation. What's consistent across every size band I've advised: the cost of building this proactively is a fraction of the cost of reconstructing evidence retroactively during fieldwork, the way Dax's team had to.

Case study: Cascade Ledger closes the gap

Back to Dax. His eleven-day scramble did save the audit — the auditor accepted a retroactive incident reference, an interview with the on-call engineer, and a documented remediation plan as sufficient to characterize the finding as a single, isolated exception rather than a systemic control failure. The report shipped with a qualified management letter comment rather than a qualified opinion, and the $3.1 million retail contract closed six weeks later than originally planned.

But the real work started after the audit closed. Over the following two quarters, Cascade Ledger built exactly the program described in this article: a hardened image pipeline rebuilt weekly, production console write access restricted to break-glass emergency use only, a GitOps pipeline enforcing that Terraform was the sole path for infrastructure changes, and a CSPM tool feeding drift alerts into the same Jira queue used for vulnerability remediation. When Cascade's next Type II observation period opened, the auditor pulled a fresh sample of twenty-five configuration changes. All twenty-five had a complete evidence chain — ticket, PR, approval, deployment log — with zero exceptions. Dax's team also cut the time spent assembling audit evidence from roughly three weeks of dedicated effort to under four days, because the evidence had been accumulating automatically the entire year rather than being reconstructed at the end of it.

Case study: Loomstack's benchmark rollout

Loomstack, a DevOps tooling SaaS company with roughly 180 employees, came to a readiness assessment with a common profile: strong application-layer security practices, but no formalized infrastructure hardening standard beyond "whatever the base cloud image ships with." Their auditor's prior-year report had included a CC7.1 exception noting the absence of a documented baseline and no evidence of periodic configuration scanning.

Marcus Chen's team adopted CIS Level 1 benchmarks across their Linux fleet and AWS account, tailored roughly 15% of the benchmark's checks with documented exceptions (mostly around specific package requirements for their build agents), and stood up scheduled CIS-CAT scanning across their production fleet. Within one quarter, their configuration scan pass rate moved from an unmeasured baseline to 96% first-pass compliance, with the remaining 4% tracked through a standing remediation queue. Their next SOC 2 Type II report closed with zero configuration-related exceptions, and — as a secondary benefit Marcus didn't initially expect — their sales engineering team started using the benchmark scan summary as a talking point in security questionnaires with prospective enterprise customers.

Case study: Nordbridge Health Analytics tames cloud drift

Nordbridge Health Analytics, a healthcare data analytics platform operating across three AWS accounts, had a different problem: strong IaC discipline for new infrastructure, but a substantial amount of older infrastructure provisioned manually before their IaC adoption, with no reliable way to tell which resources were and weren't under code management. Aisha Bello-Fitzgerald, their compliance lead, described their pre-engagement state as "flying half-instrument" — confident about new deployments, blind about the rest.

The team deployed a CSPM platform across all three accounts, which surfaced 340 resources with no corresponding IaC definition — roughly 22% of their total footprint. Rather than migrating everything at once, they triaged by data sensitivity, prioritizing the 40-odd resources touching protected health information for immediate IaC migration and applying compensating manual change-tracking to the remainder. Within five months, configuration drift incidents (measured as CSPM findings open longer than 30 days) dropped by roughly 78%, and Nordbridge's following Type II audit period showed a clean CC7.1 testing result for the first time in the company's three-year SOC 2 history.

Configuration change lifecycle: the loop between baseline definition, deployment, continuous drift detection, and reconciliation. Emergency changes feed back into the same loop through retroactive documentation rather than bypassing it.

Configuration management as a business advantage, not just an audit line item

It's tempting to treat configuration management as pure audit overhead — the tedious inventory-and-scanning work nobody wants to own. I'd push back on that framing, based on what I've watched happen at companies that build this well versus companies that treat it as a checkbox.

A real-time, accurate configuration inventory and drift-detection capability isn't just SOC 2 evidence — it's the same operational visibility that shortens incident response, because you can immediately see what changed before an outage started. A golden-image and IaC pipeline isn't just change-tracking evidence — it's the same infrastructure discipline that lets engineering teams ship faster with fewer production surprises, because every deployment starts from a known-good, tested state instead of an ad hoc one. And a clean CC7.1/CC8 testing result isn't just a line item in your report — it's a credible signal to prospects and their vendor risk teams that your engineering organization has real operational maturity, not just a compliance program bolted on top of chaotic infrastructure.

The organizations I've seen extract the most value from this work are the ones that stopped asking "what's the minimum we need to pass the audit" and started asking "what configuration visibility do we actually want, for our own operational sanity, regardless of the audit." The audit evidence falls out of that as a byproduct. Cascade Ledger didn't just fix an audit exception — they cut their mean time to diagnose infrastructure-related incidents by watching the same drift dashboard they built for their auditor. That's the version of this control area worth building.

If you're ready to formalize this, our SOC 2 Control Matrix / RACI Template gives you a starting structure for assigning exactly the ownership described above, and our SOC 2 Gap Analysis Tool can help you baseline where your current configuration management practices stand against CC7.1 and CC8 before you commit engineering time to a build-out. PentesterWorld's assessment and advisory team also works directly with infrastructure and security teams to design and validate configuration management programs ahead of Type II fieldwork — reach out if you'd rather have a second set of eyes before your auditor becomes that second set of eyes for you.

Frequently asked questions

Does SOC 2 require us to use CIS Benchmarks specifically?

No. SOC 2 doesn't mandate any specific hardening standard by name. CC7.1 requires that you define and monitor baseline configurations; CIS Benchmarks are simply the most widely recognized, freely available, and auditor-familiar way to satisfy that requirement. You can use vendor-specific hardening guides or an internally developed standard, but you'll need to demonstrate it's rigorous, current, and actually enforced.

Is configuration management the same as CC8 change management?

No — they're closely related but distinct. Configuration management (primarily CC7.1) is about whether your systems match a defined secure baseline and whether deviations are detected. Change management (CC8) is about whether changes of any kind — code, infrastructure, or configuration — were properly authorized, tested, and approved before deployment. See the comparison table earlier in this article, and our dedicated change management article for the full process lifecycle.

How often do we need to scan systems against our baseline?

There's no fixed SOC 2 requirement, but auditors expect a cadence that demonstrates continuous monitoring rather than point-in-time checking. Most mature programs I see run cloud configuration scans continuously or daily via CSPM, and host-level benchmark scans weekly to monthly. A quarterly or annual scan, timed conveniently before the audit, reads as a compliance exercise rather than an operational control.

Do manual configuration changes automatically become audit exceptions?

Not automatically. A manual change made during a genuine emergency, retroactively documented and reconciled into your baseline within a defined window, is a normal and expected part of operations. What draws an exception is a manual change with no record of authorization, no retroactive documentation, and no reconciliation — the change simply exists, unexplained, in production.

Can a small startup with limited engineering resources realistically build this?

Yes, and often more easily than a larger organization with legacy infrastructure. A cloud-native startup that adopts IaC from day one, picks CIS Level 1 as its baseline, and turns on a CSPM tool has effectively built most of this program by default. The hardest configuration management programs to retrofit are the ones with years of manually provisioned infrastructure to untangle.

What's the single highest-leverage first step if we're starting from nothing?

Build the asset inventory first, even before the baseline. You cannot define what "correctly configured" means for systems you don't know exist, and an accurate inventory is also the fastest way to discover how much of your environment is already under IaC versus manually managed — which tells you exactly how big the remediation project actually is.

Do we need different baselines for production vs. non-production environments?

Most organizations apply the full baseline to production and a lighter-weight version to development/staging, since non-production environments typically fall outside the SOC 2 system boundary commitments — though if non-production environments contain real customer data, they may need to be in scope and hardened accordingly. Document this scoping decision explicitly; "we didn't harden staging because it's staging" is a weaker answer than "staging contains only synthetic data and is explicitly out of scope."

How does configuration management for SOC 2 relate to ISO 27001?

If you're pursuing both frameworks, this maps closely to ISO 27001:2022 Annex A control 8.9, Configuration Management, which covers largely the same ground: defining, documenting, implementing, monitoring, and reviewing secure configurations. Organizations running both frameworks together can typically build one configuration management program and map the same evidence to both — see our guide on running ISO 27001 and SOC 2 together and our ISO 27001, SOC 2 and NIST CSF crosswalk for the control mapping.

72

About the author

Cybersecurity Expert

Satish Kumar writes about cybersecurity, offensive security, and practical defense strategies on PentesterWorld.

Related Articles

Comments (0)

No comments yet. Be the first to share your thoughts!