How-to

Who Should Approve a terraform apply?

Approve a terraform apply by risk, not by job title. IAM, network, and data-store changes need a named owner. Tag hygiene should not wait on a director. How to design the gate without approval fatigue.

terraform apply approval · reference

The person who should approve a terraform apply is the person who can own the blast radius of that exact plan — not whoever is next in Slack.

Most approval pain comes from one rule for every change. Governance is risk-based routing, not a stamp queue.

Approve the plan, not the pull request

A merged PR is necessary. It is not sufficient.

Between merge and apply, state refreshes, someone else applies first, or a workspace points at the wrong account. The artefact to approve is the saved plan (terraform plan -out, then apply that file). If your gate only looks at Git, you approved a story.

Reviewers need:

  • resource addresses and the create / update / destroy counts,
  • policy failures and warnings,
  • who requested the run and which identity will apply,
  • a one-screen blast-radius note (what is public, what is stateful).

The longer write-up is approval gates for safe rollouts.

A practical routing table

Change classWho approvesDefault
Tags, comments, documentation-onlyAutomation + authorAuto-apply after policy
Stateless compute behind existing networkTeam lead or on-call for that serviceOne reviewer
IAM, org policies, key trustsSecurity or platform identity ownersTwo-person rule in prod
Ingress, DNS, peering, firewallsNetwork / platform ownersNo self-approve
Databases, disks, backupsData or service ownerMandatory human
Break-glassIncident commander + recorded roleTime-boxed, reviewed after

Write this table down. If everything is “platform team,” you will get rubber stamps at 5 p.m. on Friday.

Who should not be the only approver

  • The CEO, by default. Escalation is fine. A standing bottleneck trains people to go around the process.
  • A shared “terraform” GitHub account. That is a credential, not a reviewer.
  • The model that drafted the HCL. AI for IaC can narrate a plan. It cannot accept residual risk.

Identity is part of the gate

Approvals are fiction if apply still uses a laptop access key.

Prefer OIDC from CI or a control plane role (GitHub Actions OIDC), SSO-backed users, and SCIM so leavers lose apply rights the same day they lose email.

If you want this table attached to the saved plan — not the pull request — use approval workflows. Fewer reviews. Better ones.

FAQ

Should the person who wrote the Terraform also approve it?

For production IAM, network, and data-store changes, no — you want a second set of eyes. For low-risk changes under policy, the author plus automated checks is often enough.

Is CODEOWNERS enough?

CODEOWNERS gates the merge, not the apply. The plan that runs may include refreshed state the PR author never saw. Approve the plan artefact, or you are approving a hope.

What about break-glass applies during an incident?

Allow a named incident role with a short TTL, logging, and a follow-up PR. A shared admin user with no expiry is not break-glass — it is a standing exception.

Platform evaluation

See OrchesTerra on your infrastructure

Request access to generate architecture from a repository, review the plan, and run governed reconciliation across AWS, Azure, GCP, and OCI.