How do you manage SOX change control for feature flags?

Alex Casalboni

Alex Casalboni

Developer Advocate

September 29, 2026

  • A production feature flag toggle is a change with no new build or deployment, so a pipeline-only control gate does not see it.
  • Classify production feature flags as production changes, require approval before they take effect, restrict who can approve and apply, and log every step automatically.
  • SOX section 404 describes management’s assessment of internal control over financial reporting but does not prescribe a flag control, so you decide the scoping rule for feature flags and confirm it with compliance and internal audit.
  • Build approval into the release workflow and scope it to production, so the audit record is a byproduct of the work.
  • Test the control’s failure points: the skip permission, admin self-approval, and over-scoped approval that slows releases.

A feature flag flip changes production behavior with no new build and no new deployment, so if your change control lives only in the CI/CD pipeline, that flip never passes through it. For a company with systems inside the scope of internal control over financial reporting, you therefore need to cover that change on purpose.

The answer has four parts: classify production flags as production changes, require approval before they take effect, restrict approvers and appliers, and log every step automatically, so the audit record comes out of the work itself. The sections below first explain why a toggle counts as a controlled change, then describe the three controls to show, then cover how to build approval into the workflow, and finally examine the failure points and a rollout order.

Read our FeatureOps Whitepaper
Get your free copy and learn how to connect engineering performance to business outcomes for fun and profit.Download now

Why a flag toggle counts as a controlled change

This section answers whether a flag toggle belongs in your change control at all. Your pipeline proves the review, approval, and deployment of a commit, but it does not record a toggle made in production a week later. Even so, toggling a flag in production is a change that, on a system inside ICFR scope, needs audit trails, approval workflows, and documentation. In the same spirit, every production toggle is a change event that, on an in-scope system, needs an approval trail, whether or not an engineer thinks of it as a release.

> “Flipping a flag in production is considered a change that requires auditing.” [Peter Ho, VP, DevOps Tech Lead]

Technically, deployment puts code in production, while release exposes that code to users. Your control environment has to cover both moments.

Section 404(a) calls for SEC rules that require public company annual reports to include management’s assessment of the effectiveness of internal control over financial reporting (ICFR). Under section 404(b), the independent auditor attests to and reports on that assessment for accelerated and large accelerated filers, except emerging growth companies, which the JOBS Act exempts separately. Issuers that are neither accelerated nor large accelerated filers are exempt from 404(b) under section 404(c) but still owe the management assessment. The SEC’s rule implementing section 404 follows the same structure, and the auditor’s attestation follows PCAOB standards.

Under AS 2201, the auditor must obtain sufficient appropriate evidence, and that evidence supports reasonable assurance about the existence of material weaknesses as of the date in management’s assessment.

These sources describe the assessment duty but do not prescribe a specific flag control, so control design is your call. A feature flag enters scope when it can affect a system relevant to financial reporting; that is a scoping judgment. Because SOX does not name feature flags, document the scoping decision and confirm it with your compliance and internal audit partners. Once scope is settled, the next decision is which controls to show.

The three controls to show for feature flag changes

Now, what evidence are your auditors likely to ask for? They set their own procedures, so confirm them with your audit partners. Ask for the IT general control for change management they expect to cover flags, and how they will define the population of production changes and select their sample. Expect to show three things: an authorized change, controlled access with separated duties, and evidence you can produce on request. Each maps to a feature you can configure.

In Unleash, change requests, custom project roles, and environment-level change request enforcement are Enterprise features, so confirm your edition before you design around them.

Authorized change: change requests and four-eyes approval

Change requests add an approval step before any change takes effect in an environment, and you can require multiple approvals. A request moves through these states: draft, in review, approved, scheduled, applied, canceled, and rejected. If the author edits a request that is in review, the existing approvals are revoked, so an approver never signs off on a version that has since changed. Project segment changes (not global segments) and flag archiving also go through change requests in projects where they are enabled, so the control covers more than flag toggles. Global segment edits sit outside that flow, so restrict them separately through root segment permissions.

Requiring a second approver is a common design, and enterprise teams often implement it with four-eyes change requests. Although SOX does not mandate four-eyes approval for flags, the approach is a common, defensible way to show an authorized change and separated duties.

Access and segregation of duties: RBAC by project and environment

None of the predefined project roles in Unleash carry change request permissions, and the root Admin role can approve and apply its own changes, so you need to create custom project roles that do. Approve, apply, and skip are separate environment-level permissions, so you can give one group the right to approve production changes and a different group the right to apply them. The person who proposes a change should not be the only person who can approve it.

Include non-human access in the review. A personal access token carries the permissions of the user who created it, so a token created by an admin carries admin power, and its events record the creator’s name. For that reason, check who holds tokens as well as who holds roles. For automation, use service accounts instead: they act under their own identity, so their events name the service account.

Permission boundaries double as audit boundaries: when roles map to projects and environments, an auditor can read the boundary from your configuration as well as from a policy document.

Evidence: event logs and change request records

A log line that shows the actor and the changed object is not enough, so your evidence should show the actor, the environment, the state before and after the change, the approval requirement and approver, and the actor’s permission scope. The event log records the author of a change, the time, the event type, and the data before and after, and it uses a group ID to link events from one change request. Approvals also appear in the event log as change request events under the same group ID (added in Unleash 7.1), while the actor’s role and permission scope come from your RBAC configuration, so plan to assemble evidence from both. Confirm against a real event log export the evidence your auditors can see from the log alone. Look for tamper-evident logs, because a record that someone can edit without detection does not support a control claim. Exporting the log to your SIEM or to write-once storage keeps a copy outside the reach of the people it records.

Set retention to cover the full audit period. The event log can be exported as CSV or JSON, so check retention on your plan and set up export to match. With the three controls defined, the next decision is where approval should live in the workflow.

Build approval into the workflow on a foundation of identity and environments

Where should approval sit and what should it rest on? A control in a separate queue gets skipped when a release is urgent, whereas a control inside the release workflow runs on every change that goes through it. The bypass paths are covered below.

Prudential integrated Unleash into its internal DevOps platform so its developers work only in the flag platform, and flag changes and approvals sync to ServiceNow automatically, which gives them automated audit trails. The developers do not need to work in the ticketing system, yet the ServiceNow record still exists. The ServiceNow integration tracks change request state in ServiceNow, so the ServiceNow record follows the request from review through application, while approval still happens in the flag platform.

Design your approvals the same way, and put approvals built into the release workflow so you do not have to remember to file anything. By contrast, an unlinked chat approval is weak audit evidence, because a “looks good” in a channel is not tied to a specific version of a change, can be edited or deleted, and cannot be pulled by environment.

Gate production, and leave experimentation environments without approval. If you require approval in dev and test, you add friction for little compliance benefit and turn a necessary control into a delay.

For a model of the evidence chain itself, look at a SOC 2 change-management model of intent, proposal, verification, and execution, linked so an evidence chain that generates itself falls out of normal work. That guidance is written for SOC 2, so use it as a design pattern for your flag evidence.

Underneath that workflow, wire SSO, SCIM, and RBAC before the first flag exists. Retrofitting identity after hundreds of feature flags exist can mean untangling flag ownership, and it can leave a period in which your access records are weak.

Next, make your environments mirror your real release topology. You can set change request requirements at the environment level across all projects, either as defaults or as enforced. Enforcement holds only where no project Owner or user with project update permission can change the setting, so check that as well. With that in place, production approval does not depend on each team configuring it. Environment progression from development to production fits this model, although this SOC 2 framing gives you a pattern only, so draw no SOX conclusions from it.

Finally, treat lifecycle as part of the control. A stale feature flag with no owner is a latent incident, because no one can answer for a change to it. Assign an owner at creation and use tags so compliance can pull every flag that touches in-scope code. With the workflow in place, the remaining work is to find where the control can fail.

Where the control can fail and how to sequence the rollout

This section answers where the control can fail and in what order to put it in place. First, the skip change requests permission lets a user bypass the flow for environment-specific actions, such as an emergency kill switch, so restrict that permission to a small group and review each use after the fact.

Second, admin users can approve and apply their own changes, so limit admin assignment, or your segregation of duties exists only on paper.

Third, approving every toggle in every environment slows releases, and delays can push teams toward workarounds that weaken the control you were trying to strengthen. For that reason, scope approval to the environments and projects that matter.

Teams with low release volume may prefer lighter approvals, and that can be reasonable. Add automation when volume justifies the setup effort. When approval, routing, and logging are automatic, the control adds a review step and removes manual evidence gathering at audit time.

With those failure points in mind, put the pieces in place in this order:

  1. Scope the projects and feature flags that touch financial systems.
  2. Enable change requests for production environments.
  3. Create custom approver roles and separate approve from apply.
  4. If you use ServiceNow, connect it so that request state syncs automatically.
  5. Test the evidence by pulling a sample of changes and checking each sample for approver, environment, and before and after state across the event log and the change request record. Draw the sample from the full event log export, reconciled to change request records, because changes made with the skip permission or by admins never appear as change requests.
  6. Set up event log export or retention so the history covers your audit period, and use it to confirm that change request settings and role assignments stayed in place throughout.

Conclusion

A production flag change is a change to a system that may sit inside your ICFR scope, and you can manage it with the controls you already apply to code: authorization, restricted access, separated duties, and automatic evidence. To make that work, build them into the release path, scope them to production, and test their failure points.

Unleash is an enterprise FeatureOps platform for autonomous feature management, with runtime control over software behavior in production. Change requests, RBAC, and audit logs are the capabilities this design relies on, although your compliance team still decides their place in your control framework.

Test your flag change control

If you are reviewing the approval, access, and evidence controls on your production flag changes against your code controls, we can walk through change requests, RBAC, and audit logs working together in your environment. Book a demo or start a free trial to see Unleash in action, configure an approval flow for production and pull a sample of the evidence it produces.

FAQs

Do feature flags fall under SOX change management?

They can. SOX section 404 describes management’s assessment of internal control over financial reporting and does not prescribe a flag control. A feature flag enters scope when it can affect a system relevant to financial reporting, and every production toggle is a change event worth classifying. Confirm your scoping with your compliance and internal audit partners.

What evidence should you be ready to show for a production flag change?

Plan to show the actor’s role, the environment, the approval requirement and approver, the state before and after the change, and the actor’s permission scope. Pull a sample of changes and check each one for these fields across the event log and the change request record, because an unlinked chat thread cannot supply them.

Does four-eyes approval apply to every flag in every environment?

No. Although SOX does not mandate four-eyes approval for flags, it is a common, defensible way to show an authorized change and separated duties. Gate production and the projects that touch financial systems, and leave dev and test free of approval friction.

How do you handle an emergency flag change without weakening the control?

Use the skip change requests permission for environment-specific actions such as an emergency kill switch. Restrict that permission to a small group and review each use after the fact, so the exception leaves a record and does not become the default path.

Who should be allowed to approve and apply flag changes?

Create custom project roles, because none of the predefined project roles carry change request permissions. Approve, apply, and skip are separate environment-level permissions, so give one group the right to approve production changes and a different group the right to apply them. Limit admin assignment, since admin users can approve and apply their own changes.

Do SOC 2 controls for feature flags also cover SOX?

No. Treat SOC 2 material as a design pattern, because a SOC 2 report or mapping does not stand in for a SOX control assessment. A SOC 2 change-management model links intent, proposal, verification, and execution so an evidence chain that generates itself falls out of normal work. You can borrow that structure for your flag evidence while your compliance team decides its place in your SOX control framework.