SOC2

SOC 2 Access Controls: User Management and Privilege Administration

Derek Osei found the email at 6:52 a.m., before his coffee had finished brewing.

SOC 2 Access Controls: User Management and Privilege Administration
Loading advertisement...
16

Derek Osei found the email at 6:52 a.m., before his coffee had finished brewing. Subject line: "Northbeam Payroll — Type II Exceptions Requiring Management Response." Derek was VP of Engineering at Northbeam Payroll, a payroll and benefits platform processing roughly $1.1 billion a year in disbursements for 400-odd mid-market employers. Northbeam was eleven weeks from closing a $3.4 million enterprise contract with a national retail chain — a deal that hinged, in no small part, on a clean SOC 2 Type II report the retailer's vendor security team had explicitly requested.

The exceptions were not exotic. Northbeam's auditor, sampling 25 terminated employees across the six-month observation window, found that 6 of them — including two former engineers with production database credentials and one former customer success rep with access to a payroll processing tool — still had active accounts between 14 and 61 days after their last day of employment. A seventh case involved a marketing contractor whose AWS console access had never been reviewed in fourteen months, despite three role changes. None of it was malicious. All of it was avoidable. And all of it now sat in a qualified-opinion-risk conversation with a prospect's procurement team.

I got looped in that week as the outside advisor helping Northbeam's leadership triage the response. What struck me — and what strikes me on almost every engagement like this one — is that access control failures are rarely about bad technology. Northbeam had Okta. They had a ticketing system. They had an offboarding checklist in Confluence that nobody updated. The gap wasn't tooling; it was that provisioning, deprovisioning, and review had never been designed as a system with owners, SLAs, and evidence. That's what this article gives you.

Who This Is For and What You'll Walk Away With

This is written for the person who owns — or is about to own — access governance ahead of a SOC 2 examination: a VP of Engineering, an IT director, a first compliance hire, or a founder wearing all three hats. You'll get the real mechanics of CC6.2 and CC6.3 — the two Common Criteria that govern user provisioning, deprovisioning, and periodic review — translated into a program you can actually run: a joiner/mover/leaver workflow with named owners, a privileged access model, an access-review cadence with evidence templates, and the exception list your auditor is most likely to write up. This article is scoped to who gets access to what, and for how long — the identity lifecycle and privilege governance side of CC6. It is deliberately distinct from the authentication mechanisms (MFA, password policy, session timeout) covered in SOC 2 Logical Security: System Access and Authorization — read that one alongside this article for the full CC6 picture.

Why Auditors Circle Access Controls First

If you ask a Type II auditor which control area produces the most exceptions across a portfolio of clients, access control administration wins almost every time — not because it's technically hard, but because it's operationally relentless. A firewall rule, once configured correctly, tends to stay correct. A user's access, by contrast, needs to change every time someone joins, changes roles, goes on leave, gets promoted, or leaves — and every one of those events is a chance for the process to be skipped, delayed, or done inconsistently.

CC6 sits inside the Common Criteria — the Trust Services Criteria category required in every SOC 2 report regardless of which optional categories a company adds — and it maps to the COSO framework's control-activities principles around restricting access to protected information assets. In my own portfolio of clients, the pattern is consistent: companies under 100 employees usually pass their first Type II with access findings; companies that have scaled past 150–200 employees without formalizing the JML process almost never do. Growth is what breaks informal access management, not malice.

"I don't fail companies for having imperfect access controls. I fail them for not being able to tell me, with evidence, who approved access and when it was removed. The control can be simple. It just has to be provable." — Marcus Webb, Director of IT Audit, Continuum CPAs

CC6.2 and CC6.3: What This Article Covers (and What It Doesn't)

It's worth being precise about scope, because "access controls" is a phrase that gets used loosely and it causes confusion between this article and its sibling. Under the Common Criteria, the points of focus most directly relevant to user and privilege administration are:

  • CC6.2 — prior to issuing system credentials and granting access, the entity registers and authorizes new internal and external users, and access is removed when no longer required.

  • CC6.3 — the entity authorizes, modifies, or removes access based on roles, responsibilities, or the system design and changes; it considers the concepts of least privilege and segregation of duties; and access is reviewed periodically.

That's this article: the identity lifecycle, role assignment, privileged access, and recertification. What it is not is the mechanism by which access is technically enforced once granted — password composition, multi-factor authentication, single sign-on, session timeout, network-level authentication architecture. Those points of focus (principally CC6.1 and CC6.6) belong to SOC 2 Logical Security: System Access and Authorization. Auditors test both, but they test them differently: this article's controls get tested through HR records, ticket trails, and review sign-offs; the sibling article's controls get tested through system configuration screenshots and authentication logs. Keep the two workstreams organizationally separate even if the same person owns both — it makes audit fieldwork faster and your evidence cleaner.

The Joiner-Mover-Leaver Lifecycle, End to End

Every access-control program worth having is built around one idea: access should track a person's current, authorized business need, continuously, from their first day to well after their last. Practitioners shorthand this as JML — joiner, mover, leaver — and it's the backbone CC6.2 and CC6.3 are built to test.

The diagram looks simple. The discipline is in making every arrow produce a timestamped, attributable record — because an auditor doesn't test whether your process is well-designed on paper; they test whether it operated for every sampled individual across the observation window.

Lifecycle Stage

Trigger Event

Primary Owner

Required Action

Evidence Generated

Joiner

Signed offer / HR new-hire record

Hiring manager + IT/IAM

Access provisioned to role-based baseline only

Access request ticket, approval, provisioning log

Joiner (privileged)

Role requires elevated/admin access

System owner + security

Separate approval beyond baseline; time-bound if possible

Privileged access request, second approval, expiry date

Mover (role change)

HR role/department update

New manager + old manager

New access added; old access flagged for removal

Change ticket, dual sign-off, before/after access snapshot

Mover (leave of absence)

HR leave record

IT/IAM

Account suspended, not deleted, for duration of leave

Suspension log, reactivation approval

Leaver (voluntary)

Resignation notice in HR system

HR + IT/IAM

All access disabled by/at last day per SLA

Termination ticket, disable timestamp, system-by-system checklist

Leaver (involuntary)

Termination decision

HR + Legal + IT/IAM

Access disabled at or before notification, same-day

Same-day disable log, security incident note if risk flagged

Periodic recertification

Calendar / risk-tier cadence

Access/system owner

Confirm each user's access is still required

Signed review record, exceptions log, remediation tickets

Provisioning: Turning a Job Offer Into Access, Deliberately

Provisioning is the joiner half of JML, and it's where most companies' instincts are actually decent — nobody wants a new hire sitting idle on day one, so there's usually urgency to get access sorted. The risk isn't that provisioning happens too slowly; it's that it happens too loosely. A common anti-pattern I see: a new engineer joins, and rather than being provisioned against a defined role template, someone on the team "clones" the access of whoever sits next to them, because it's fast. Six months later nobody remembers why that engineer has access to the billing database, because the person they were cloned from left that team two roles ago.

The fix is a role-based baseline: every job function in the company maps to a documented, minimum-necessary set of system access, built once and reused for every joiner in that role. New hires get exactly the baseline, no more, at day one. Anything beyond the baseline — admin rights, access to a sensitive customer database, production infrastructure — requires a distinct, logged approval from the system or data owner, not the hiring manager alone. This is the practical expression of least privilege: granting the minimum access necessary to do the job, by design, rather than by exception review months later.

"We stopped asking 'what access does this person need' and started asking 'what access does this role need.' The moment we made that switch, provisioning tickets got faster and our access review got shorter, because there was nothing weird to explain." — Priya Nataraj, CISO, Northbeam Payroll

Role Family

Baseline Systems

Baseline Access Level

Requires Additional Approval For

Customer Success

CRM, support ticketing, read-only billing view

Standard user

Refund issuance, account deletion tools

Software Engineering

Source control, staging environment, CI/CD

Standard developer

Production database, cloud console admin

Finance/Accounting

ERP, expense system, read-only payroll reports

Standard user

Bank transfer initiation, payroll run approval

Site Reliability/Ops

Monitoring, staging + production infra (scoped)

Elevated (role-justified)

Root/admin cloud account access

People/HR

HRIS, benefits admin portal

Standard user

Compensation data export, org-wide HRIS admin

Sales

CRM, quoting tool

Standard user

Contract system admin, discount override rights

Approval Workflows: Who Actually Signs Off

A role-based baseline only works if the approval chain behind it is unambiguous. The recurring failure mode I see in mid-size companies is a request that gets "approved" by whoever happened to be online in the ticketing tool that day — often someone with no real authority over the system being granted. Auditors test for authorized approval, which means the approver has to be someone the company has formally designated as the owner of that access decision, and that designation itself needs to exist in writing.

A clean model separates three roles for every access decision: the requester (usually the hiring or people manager, who knows the business need), the approver (the system or data owner, who knows whether the access is appropriate), and the provisioner (IT/IAM, who executes the technical change and logs it). Collapsing requester and approver into the same person is the single most common design flaw I flag in readiness assessments — it means access requests are effectively self-approved.

Activity

Requester

Approver

Provisioner

Reviewer (Periodic)

Standard joiner access

Hiring manager

System/data owner (or delegate)

IT/IAM team

System owner, quarterly/annual

Privileged access grant

Manager or self (with justification)

Security lead + system owner (dual)

IT/IAM team

Security lead, quarterly

Mover access change

New manager

System/data owner

IT/IAM team

System owner, next review cycle

Leaver access removal

HR (termination trigger)

IT/IAM confirms completion

IT/IAM team

Compliance, sampled in every audit period

Service account creation

Engineering lead

Security lead

IT/IAM or platform team

Security lead, quarterly

Emergency/break-glass access

Requesting engineer

On-call security approver (post-hoc allowed)

Automated or on-call IT

Security lead, within 5 business days

Privileged Access: Why It Gets Extra Scrutiny

Standard user access, if compromised, usually causes contained damage. Privileged access — production database admin, cloud root accounts, domain admin, source-code deployment rights, payroll run approval — is where a single compromised credential or a single careless grant can cause company-defining damage. That asymmetry is exactly why privileged access management gets its own line of testing in most SOC 2 fieldwork, even though it's technically a subset of the same CC6.2/CC6.3 points of focus.

The practical program has four pillars: an accurate inventory of every privileged account and the system it touches; restriction of privileged accounts to only the people whose job genuinely requires standing elevated access; separation of privileged accounts from everyday accounts (an engineer's admin login should not be the same credential they use to read email); and monitoring of what privileged accounts actually do, because provisioning controls alone don't tell you whether elevated access was misused. Where budget allows, time-bound or just-in-time elevation — where standing admin rights are replaced by short-lived, approved elevation requests — meaningfully shrinks the attack surface and gives auditors a cleaner story than "these twelve people have permanent root."

Privileged Access Control

What It Prevents

Implementation Baseline

Maturity Upgrade

Privileged account inventory

Unknown/orphaned admin accounts

Spreadsheet or IAM report, reviewed quarterly

Automated discovery via IAM/PAM tool

Separate privileged credentials

Lateral movement from routine account compromise

Distinct admin login, not used for daily work

Hardware-token-gated privileged login

Least-privilege scoping

Blast radius of a compromised account

Role-scoped admin rights, not blanket root

Just-in-time elevation with automatic expiry

Dual approval for grants

Unilateral self-escalation

Manager + security sign-off for any elevation

Automated approval workflow with audit trail

Session recording/monitoring

Undetected misuse of elevated access

Centralized logging of privileged actions

Session recording + anomaly alerting

Periodic privileged recertification

Privilege creep over time

Quarterly review of every privileged grant

Continuous entitlement monitoring

Break-Glass: Emergency Access Without Losing Control

Every environment eventually has a 2 a.m. incident where someone needs access they don't normally have, right now, and there's no time for the standard dual-approval workflow. The mistake companies make isn't having an emergency path — auditors expect one — it's leaving it undocumented, so "emergency access" quietly becomes the backdoor people use whenever the normal process feels slow. A defensible break-glass procedure grants emergency access fast, but requires it to be logged and justified within a fixed window afterward, reviewed by someone independent of the requester.

Break-Glass Element

Requirement

Owner

Timing

Emergency access request

Logged with reason, system, requester identity

Requesting engineer/on-call

At time of use

Real-time notification

Alert sent to security on-call automatically

Automated tooling

Immediate

Post-hoc approval

Security lead reviews justification

Security lead

Within 24 hours

Access expiry

Credential automatically revoked

IAM/PAM tooling

End of incident or max 24–48 hrs

Documentation

Incident ticket links access grant to remediation

Requesting engineer

Within 5 business days

Audit review

Sampled specifically in every review cycle

Compliance/security

Quarterly

Service Accounts and Non-Human Identities

Somewhere around the third or fourth integration a company builds — a CI/CD pipeline that deploys to production, a monitoring tool that reads logs across every service, a data pipeline that pulls from three SaaS APIs — human-centric access thinking starts to break down, because the majority of new "identities" being created aren't people. Service accounts, API keys, and machine identities routinely outnumber human accounts in a mature SaaS environment, and they're disproportionately likely to be over-privileged, because nobody wants a pipeline to fail at 3 a.m. for a permissions reason, so the instinct is to grant broad access "just in case."

Auditors increasingly test service accounts with the same rigor as human accounts, and for good reason: a service account with standing admin rights and no owner is a more attractive target than most human accounts, because it's less likely to be monitored and less likely to trigger anomaly alerts tuned for human behavior patterns. The fix is to treat every service account as a first-class identity with an owner, a documented purpose, a defined scope, and a rotation/expiry schedule for its credentials — not as invisible infrastructure plumbing.

"We found forty-one service accounts during our first inventory exercise. We knew what eleven of them did. That gap, more than anything else, is what convinced our board to fund a real IAM program." — Jamal Ibrahim, VP Engineering, Corvid Health

Service Account Control

Requirement

Owner

Review Cadence

Inventory and ownership

Every service account has a named human owner

Engineering/platform lead

Quarterly

Purpose documentation

Documented reason for the account and its scope

Account owner

At creation, reviewed quarterly

Least-privilege scoping

Access limited to what the integration requires

Security + account owner

At creation and on change

Credential rotation

API keys/secrets rotated on a fixed schedule

Platform/security team

Per policy (e.g., 90 days)

No shared human use

Service accounts never used for interactive human login

Security

Continuous (monitored)

Decommission trigger

Account disabled when integration is retired

Account owner

At retirement, verified quarterly

Deprovisioning: The Leaver Process and Why Timing Is Everything

If provisioning is where companies are fast but loose, deprovisioning is where they're slow and inconsistent — and it's the single most commonly cited exception in SOC 2 access-control testing, Northbeam's situation included. The reason is structural: provisioning has an obvious, motivated requester (the new hire needs to work). Deprovisioning has no equivalent pull — the departing employee isn't asking for their access to be removed, and the people who know it should happen (HR, the departing manager) aren't always the people with the technical ability to do it (IT/IAM).

The fix is to make termination an automatic trigger rather than a manual reminder. The moment HR records a termination date — whether that's initiated at resignation or at the termination decision itself — it should fire a workflow that IT/IAM is obligated to close within a defined SLA, with a system-by-system checklist so nothing gets missed (email, SSO/identity and access management platform, VPN, source control, cloud consoles, physical badge, SaaS tools provisioned outside the SSO umbrella). That last category — the SaaS tool someone signed up for with a personal or shared login outside single sign-on — is where I find the most overlooked residual access, because it never shows up in an SSO-based audit.

Timing matters more than most companies initially budget for. A voluntary resignation with two weeks' notice can usually tolerate access removal timed to the actual last day. An involuntary termination — particularly one involving any conflict — should trigger access removal at or before the individual is notified, because the risk of retaliatory action rises sharply between notification and the traditional "end of day" removal window.

Risk Tier

Example Roles

Access Removal SLA

Trigger Point

Standard voluntary departure

Individual contributor, no privileged access

Same business day as last day

HR last-day record

Standard involuntary departure

Individual contributor, performance-based

At time of notification

HR termination decision

Privileged access holder (voluntary)

Engineer, sysadmin, finance approver

Same business day as last day, privileged access first

HR last-day record + privileged access flag

Privileged access holder (involuntary)

Any role with admin/financial access

Immediately at notification, before the meeting ends

Security/HR joint trigger

High-risk termination (any role)

Conflict, security concern, legal hold

Immediately, all access, badge revoked in parallel

Security-initiated

Contractor/vendor personnel

Any contracted role

End of contract date or earlier per contract terms

Vendor management + HR

Movers: The Access Risk Almost Nobody Budgets For

Joiners get attention because they're visible — someone's onboarding checklist has a line item for it. Leavers get attention (eventually) because HR has a termination process that inherently touches IT. Movers — people who change roles, teams, or responsibilities while staying employed — get almost none, and it's the quietest source of privilege creep I see across engagements. An engineer promoted from the payments team to the platform team keeps their payments database access "just in case they need to help out." A support rep who moves into sales retains their support ticketing admin rights. Multiply that by three or four years of internal mobility and you get a workforce where access no longer maps to job function at all — which is precisely the drift CC6.3's least-privilege and periodic-review language exists to catch.

The structural fix is to treat every role change as a two-sided event: new access is added against the new role's baseline, and existing access is explicitly reviewed for removal — not left for "the next access review" to catch, because the next access review is often six or twelve months away, and by then nobody remembers why the access was ever granted, so it gets rubber-stamped as still-needed.

Mover Scenario

New Access Required

Old Access Action

Common Failure Mode

Lateral move (same level, new team)

New team's baseline access

Full removal of old team's systems

Old access left "in case it's needed"

Promotion into management

People-management tools, broader reporting access

Individual-contributor tool access reviewed, not automatically kept

Manager access added, IC access never revisited

Promotion into privileged role

Elevated/admin access per new role

Standard access retained only if still relevant

Privileged access granted without removing prior standing access

Temporary role/project assignment

Time-bound project access

Access set to auto-expire at project end

Temporary access becomes permanent by default

Return from leave of absence

Reactivation of prior baseline access

Confirm role/access still matches current position

Account reactivated with stale, unreviewed permissions

Department transfer

New department's systems

Prior department's systems, especially sensitive data, removed

Cross-department sensitive access lingers for years

Periodic Access Reviews: The Control That Catches Everything Else

Provisioning and deprovisioning controls, however well designed, will still drift — people's actual access diverges from their actual need over time, quietly, through a hundred small decisions nobody meant as a policy violation. Periodic access review (sometimes called recertification) is the control that catches that drift, and it's the single piece of evidence a Type II auditor is most likely to sample directly, because it's the clearest proof that CC6.3's "reviewed periodically" language is actually operating, not just written down.

A good access review isn't a mass email asking managers to reply "looks fine" — that's the version that produces a rubber stamp, not a control. It's a structured exercise where the access owner for each in-scope system receives the actual list of who has access and at what level, is asked to affirmatively confirm or flag each entry, and where flagged entries generate a tracked remediation ticket with a close date. The review needs a defined population (which systems and which accounts are in scope), a defined cadence, a named reviewer for each system, and a retained record of the outcome — because "we did the review" without evidence is functionally the same, to an auditor, as not doing it.

"The review itself takes an afternoon if you've done the provisioning work right all year. It takes three weeks of archaeology if you haven't. I can always tell which company I'm dealing with within the first ten minutes." — Sarah Kowalski, Compliance Manager, Trellis Analytics

System/Data Tier

Review Cadence

Reviewer

Evidence Retained

Production infrastructure / cloud root

Quarterly

Security lead + infrastructure owner

Signed review record, exceptions log

Customer/payment data systems

Quarterly

Data owner + security lead

Signed review record, sampled screenshots

Core business applications (CRM, ERP, HRIS)

Semi-annual

Application/system owner

Signed review record

Standard SaaS tools (non-sensitive)

Annual

Department/application owner

Signed review record

Privileged/admin accounts (all systems)

Quarterly

Security lead

Signed review record, dual sign-off

Service accounts and API keys

Quarterly

Engineering/platform lead

Ownership confirmation, rotation log

Physical access (badges, server room)

Semi-annual

Facilities/security lead

Signed review record

Running the Review: Sampling, Evidence, and Sign-Off

Mechanically, a clean access review follows five steps: pull the current access list directly from the system (never from memory or a stale spreadsheet); route it to the accountable owner; require an explicit decision — keep, modify, or remove — on every line, not just the exceptions; execute removals within a defined turnaround (I recommend five business days); and retain the completed, signed review artifact somewhere the auditor can find it without a scavenger hunt. Skipping the "explicit decision on every line" step is the most common shortcut I see, and it's the one that undermines the whole exercise, because an unreviewed line looks identical to an approved line until someone actually checks.

For smaller companies, a well-run manual review — a spreadsheet export, a review meeting, signed sign-off — is entirely acceptable to auditors and is often the right level of investment below roughly 100–150 employees. Past that point, the manual version starts to consume disproportionate staff time and becomes more error-prone, which is where identity governance tooling earns its cost.

Approach

Time Cost (est., mid-size company)

Strength

Weakness

Manual spreadsheet review

15–30 staff hours per cycle

Low cost, works for small scope

Error-prone, slow to scale, evidence trail relies on discipline

Ticketing-system-driven review

8–15 staff hours per cycle

Built-in evidence trail, integrates with existing workflow

Still requires manual data pulls from each system

Identity governance (IGA) platform

2–5 staff hours per cycle (after setup)

Automated evidence, continuous entitlement visibility

Upfront implementation cost and configuration time

Hybrid (IGA for privileged/critical, manual for low-risk)

4–8 staff hours per cycle

Focuses automation spend where risk is highest

Requires clear tiering to avoid gaps

Automating Access Reviews With IGA and IAM Tooling

The tooling category that matters most here is identity and access management platforms with identity-governance capability — commercial names in this space include Okta, SailPoint, Saviynt, and Microsoft Entra ID Governance, among others — which centralize the "who has access to what" question that otherwise requires manually querying a dozen disconnected systems. The value isn't just time saved; it's that automated tooling produces a continuous, timestamped evidence trail rather than a point-in-time snapshot assembled under audit-prep pressure, which is exactly the kind of evidence a Type II examination — testing operating effectiveness across months, not a single day — rewards.

Automation doesn't remove the need for human judgment, though. A tool can tell you that Priya has access to the payments database; it can't tell you whether Priya's current role still justifies that access without a human owner making the call. The realistic target for most growing companies is automating the data collection and workflow (who has what, routing it to the right reviewer, tracking remediation to closure) while keeping the decision firmly with an accountable human owner.

"Automation didn't replace our reviewers. It replaced the two weeks we used to spend just figuring out who to ask." — Elena Vasquez, Head of IAM, Fenwick Cloud

Common Access-Control Exceptions Auditors Write Up

Across the readiness assessments and Type II examinations I've been part of, the exception list is remarkably repetitive. It's worth naming the recurring ones explicitly, because seeing them in advance is the cheapest way to avoid them.

Common Exception

Root Cause

Typical Remediation

Prevention

Terminated employee retains active access past SLA

No automated trigger from HR system to IT

Manual audit of terminations vs. active accounts; immediate removal

Automate termination-to-deprovisioning trigger

Access review performed but not documented/signed

Review treated as informal conversation

Reconstruct evidence retroactively (painful, often incomplete)

Standardize review template with mandatory sign-off

Mover retains prior role's access indefinitely

Role-change process doesn't require old-access removal

Manual cleanup during next review cycle

Two-sided mover workflow (add new, remove old)

Service account with no identified owner

Accounts created ad hoc during integration work

Assign interim owner, decommission if unused

Mandatory owner field at account creation

Privileged access granted without documented approval

Urgency bypassed the approval workflow

Retroactive approval + policy reminder

Break-glass process with post-hoc review requirement

Contractor access outlives the contract

No link between contract end date and IT offboarding

Immediate removal, contract terms updated

Vendor/contractor access tied to contract management system

Access review population incomplete (system missed)

No master inventory of in-scope systems

Expand review scope, note as prior-period gap

Maintain and periodically validate a system-of-record inventory

Same person requests and approves their own access

Roles not segregated in the workflow tool

Redesign approval routing

Enforce requester/approver separation in the ticketing tool

The Evidence File: What to Keep Before the Auditor Asks

Every control in this article eventually reduces to one question during fieldwork: can you produce evidence, for the sample the auditor selects, that the control operated as designed? Building the evidence habit into daily operations — rather than reconstructing it retroactively during audit prep — is the difference between a two-week evidence-gathering scramble and a same-day request fulfillment. I tell every client the same thing: if you can't produce the artifact within an hour of being asked, it isn't really operating as a control, it's an intention.

"The clients who breeze through fieldwork aren't the ones with the fanciest tools. They're the ones whose Slack channel or ticketing system already has the approval sitting there, timestamped, months before I ever asked for it." — Marcus Webb, Director of IT Audit, Continuum CPAs

Evidence Artifact

Demonstrates

Where It Should Live

Retention

New-hire access request + approval

Provisioning followed role baseline and approval chain

Ticketing system (e.g., Jira, ServiceNow)

Full audit period + 1 year

Role/access baseline documentation

Least privilege was designed intentionally

Policy repository / wiki

Current version + revision history

Termination workflow log

Access removed within SLA of departure

HRIS + IT ticketing system, cross-referenced

Full audit period + 1 year

Signed periodic access review records

Recertification occurred on schedule, per system

Access review tool or shared drive with sign-off

Full audit period + 1 year

Privileged access grant approvals

Dual approval and justification for elevated access

Ticketing system or PAM tool

Full audit period + 1 year

Service account inventory with owners

Non-human identities are governed, not invisible

IAM/asset inventory system

Continuously maintained, versioned

Exception/remediation tracker

Deficiencies were identified and closed

GRC tool or tracked spreadsheet

Full audit period + 1 year

System-of-record inventory (in-scope systems)

Review population was complete

Policy repository, reviewed periodically

Current version + revision history

Contractors, Consultants, and Third-Party Privileged Access

Contractors and consultants are where JML discipline most often quietly collapses, because they frequently sit outside the standard HRIS-triggered workflow entirely — nobody's tracking their "last day" the way HR tracks an employee's, so the trigger for deprovisioning simply doesn't exist unless someone builds it deliberately. I've seen contractor access outlive the underlying contract by six months or more, purely because nobody owned the "contract ended, now remove access" step. This overlaps meaningfully with broader vendor risk management, but the access-control piece specifically needs its own trigger independent of the vendor's overall risk rating.

The fix is to route every contractor and consultant engagement through the same access-request and access-removal machinery as employees, with the contract end date (or a defined renewal checkpoint) serving as the deprovisioning trigger instead of an HR termination record. Any contractor granted privileged access — which happens often with implementation partners, MSPs, and outsourced DevOps — should be held to the same dual-approval and time-bound access standard as an internal privileged user, arguably a tighter one, since the company has less day-to-day visibility into that individual's activity.

Contractor/Third-Party Access Control

Requirement

Owner

Trigger for Removal

Standard contractor account

Role-based baseline, same as equivalent employee role

Engaging manager + IT/IAM

Contract end date or 90-day renewal checkpoint

Privileged contractor/MSP access

Dual approval, time-bound, documented scope

Security lead + engaging manager

Contract end date, reviewed monthly if standing

Access via shared/vendor login

Prohibited where avoidable; individual accounts required

Security

N/A — replace with named accounts

Contractor access review

Included explicitly in periodic access review population

Compliance/security

Same cadence as employee review

Contract management linkage

Contract system flags access-review team at contract end

Procurement/legal + IT

Automated where contract management tooling allows

Segregation of Duties: Where Access Design Meets Fraud Risk

Segregation of duties is technically a control-activities concept that spans finance and IT, but it shows up squarely inside access administration because it's enforced primarily through who is granted which combination of access rights. The classic conflict: the same person who can create a vendor in the accounting system can also approve payments to that vendor — which means a single compromised or dishonest account can originate and approve a fraudulent payment with no independent check. Access reviews that only ask "does this person still need this access" miss SoD conflicts entirely, because both individual grants might be perfectly legitimate; it's the combination that's the risk.

Building a segregation-of-duties matrix — a short list of access combinations that should never coexist on a single account — and checking new grants against it during the approval step is far cheaper than discovering the conflict during an access review or, worse, during a fraud investigation.

Conflicting Combination

Risk

Typical Mitigation

Create vendor + approve vendor payment

Fraudulent payment to a fictitious or unauthorized vendor

Split across two roles; system-enforced dual approval

Initiate payroll change + approve payroll run

Unauthorized salary changes processed without oversight

Separate HRIS edit rights from payroll approval rights

Deploy code to production + approve own change

Unreviewed or malicious code reaching production

Mandatory independent code review/approval before deploy

Grant system access + approve own access request

Self-escalation of privileges

Requester/approver separation enforced in workflow tooling

Modify audit logs + system administrator access

Evidence tampering, undetected misuse

Immutable/centralized logging outside admin's control

Issue customer refund + reconcile revenue accounts

Concealed revenue leakage

Refund approval routed to a second, independent approver

Mapping the Program Back to CC6.2 and CC6.3

It helps to close the loop between the operational program described above and the specific criteria an auditor is testing against, so nothing in your program is built without a clear line back to what's actually being examined.

Program Element

Primary Criterion

What the Auditor Samples

Role-based provisioning baseline

CC6.2, CC6.3

New-hire access requests vs. documented role baseline

Approval workflow (requester/approver/provisioner)

CC6.2

Access request tickets with named, authorized approver

Privileged access controls

CC6.3

Privileged grant approvals, dual sign-off, scope documentation

Termination/deprovisioning SLA

CC6.2

Termination dates vs. account disable timestamps

Mover (role-change) access updates

CC6.3

Role-change tickets showing old access removed

Periodic access review/recertification

CC6.3

Signed review records, exceptions log, remediation evidence

Service account governance

CC6.2, CC6.3

Service account inventory, ownership, rotation logs

Segregation-of-duties matrix

CC6.3

Access combinations checked against conflict matrix

Case Study: Northbeam Payroll Closes the Gap Before the Retail Deal

Back to Derek and the $3.4 million contract. Northbeam had 90 days between the exception letter and the retailer's final security sign-off — realistically closer to 60 once legal and procurement calendars were accounted for. We didn't rebuild their access program from scratch; we fixed the specific structural gaps the exceptions had exposed. First, HR's termination workflow was rewired to fire an automated IT ticket the same day a termination date was recorded, with a five-business-day disable SLA for standard roles and same-day for privileged roles — closing the gap that had produced six of the seven original exceptions. Second, every one of Northbeam's 41 service accounts was inventoried and assigned a named owner, with three unowned accounts decommissioned outright. Third, the informal Confluence offboarding checklist was replaced with a system-by-system ticket template that couldn't be closed until every listed system showed a confirmed disable action.

By the time the follow-up sample was pulled 60 days later, all 25 tested terminations showed access removal within SLA, and the auditor's management letter reflected the remediation as closed with no repeat finding in the current period. The retail contract closed on schedule. Derek's summary to his board, which I've borrowed for other clients since: "We didn't buy new software. We wrote down who was supposed to do what, and then made the system remind them."

Case Study: Corvid Health Tames Its Service Account Sprawl

Corvid Health, a healthtech SaaS company Jamal Ibrahim's team supports, hit its access-control wall differently — not through a termination miss, but through the discovery, during pre-audit readiness work, that nobody could produce a complete list of what had access to their patient-adjacent data systems. The forty-one service accounts mentioned earlier were Corvid's; eleven had known owners and documented purposes, the rest were integration artifacts from three years of rapid product development, several with standing admin rights nobody could justify.

Over a ten-week sprint, Corvid's platform team paired every remaining service account with a named owner or decommissioned it, moved credential storage into a secrets manager with 90-day rotation, and — critically — added a mandatory "owner" field to the internal tooling used to spin up any new integration, closing off the ability to create an unowned account going forward. Their subsequent Type II examination sampled twelve service accounts; all twelve had documented owners, scoped access, and rotation evidence within policy. Jamal's framing to his engineering org was pragmatic rather than compliance-driven, which I think is why it stuck: "unowned access is a production risk before it's ever a compliance risk — we'd have wanted this inventory even without an audit."

Case Study: Fenwick Cloud Builds Review Cadence From Zero Pre-Series C

Fenwick Cloud, where Elena Vasquez leads IAM, is the earlier-stage story: a 70-person company preparing for its first-ever SOC 2 Type II ahead of a Series C round where investors were explicitly asking about it. Fenwick had never run a formal access review — access decisions lived in the collective memory of a small engineering team, which had worked fine at 20 people and had become untenable at 70. Rather than jumping straight to an enterprise IGA platform, Elena's team built a tiered manual process first: quarterly reviews for privileged and production access, annual for standard SaaS tools, using a spreadsheet export and a structured sign-off template modeled closely on the cadence table earlier in this article.

That lower-cost approach ran clean for two full quarters before Fenwick invested in identity-governance tooling, and — notably — the readiness assessment ahead of their Type II found zero access-related findings, because the manual process, while unglamorous, had been run with real rigor from day one. The lesson Elena took from it, and one I repeat to every early-stage client: the tooling tier matters far less than whether someone is actually accountable for running the review on schedule.

Building the Program: A 90-Day Roadmap

For a company starting close to zero — no formal JML process, no documented access reviews — the following sequencing gets a defensible program in place inside a single quarter, which is realistically the minimum runway needed before a Type II observation period should begin.

Phase

Weeks

Key Activities

Output

Foundation

1–3

Inventory in-scope systems; document role-based access baselines; define JML process owners

System inventory, role baseline doc, RACI

Provisioning/Deprovisioning

4–6

Build/automate HR-to-IT termination trigger; standardize approval workflow in ticketing tool

Automated termination workflow, approval templates

Privileged Access

5–8

Inventory privileged accounts and service accounts; assign owners; implement dual approval

Privileged/service account inventory, approval workflow

Review Cadence

7–10

Design review templates by system tier; run first full access review cycle

Signed review records, exceptions log

Remediation

9–11

Close identified exceptions; update policies to close root causes

Closed remediation tickets, updated policy docs

Evidence Readiness

10–13

Assemble evidence repository; conduct internal mock walkthrough

Audit-ready evidence file, readiness assessment findings closed

The Cost of Waiting vs. the Cost of Building It Right

Every client asks some version of "how much does this actually cost us," and the honest, illustrative answer from my own engagements is that the cost curve is asymmetric: the program described above is cheap to build proactively and expensive to reconstruct under audit pressure. Northbeam's 90-day remediation consumed roughly 120 combined staff hours across IT, HR, and engineering, plus advisory time — a fraction of what a delayed or lost $3.4 million contract would have cost, and a fraction of what a repeat qualified opinion the following year would have cost in sales-cycle friction.

Investment Path

Illustrative Time Cost

Illustrative Risk Reduction

Best Fit

Reactive remediation post-exception

100–150 staff hours in a compressed window, plus advisory fees

Fixes the specific finding, doesn't prevent recurrence without process change

Companies already mid-audit-cycle with findings

Proactive manual program (spreadsheet-based)

20–40 staff hours to build, 10–20 hours per quarter to run

High, if run with discipline; depends entirely on consistent execution

Companies under ~150 employees

Proactive automated program (IGA/IAM tooling)

60–100 hours to implement, 5–10 hours per quarter to run

High and self-sustaining; less dependent on individual discipline

Companies over ~150 employees or high system complexity

No formal program

Minimal upfront, unbounded downstream

Near-zero; findings are a matter of when, not if

Nobody, if a SOC 2 report is the goal

Where This Fits in Your Broader SOC 2 Program

Access administration doesn't operate in isolation from the rest of your control environment, and it's worth naming the connective tissue so you don't build it as a silo. It's one of the core IT general controls auditors test across virtually every engagement, and the discipline you build here — a readiness assessment upfront to find the gaps, then day-to-day control activities that keep provisioning and review running — is the same discipline that shows up elsewhere in your Common Criteria: Universal Requirements for All SOC 2 Reports. Granting deploy access to production, for instance, is an access-control decision, but the change itself needs to move through the change management process your engineering org already runs — the two controls are adjacent, not identical, and auditors will test them separately even when the same ticket touches both.

The access findings you generate (or avoid) also flow directly into how your report reads: exceptions surface in the auditor's report structure as either clean testing results or documented deviations, and your ongoing monitoring activities are what give you visibility into access drift between formal review cycles rather than only at audit time. If you're running ISO 27001 alongside SOC 2 — increasingly common for companies selling into both US and European enterprise buyers — the good news is that access governance work isn't duplicated effort. The underlying discipline (role-based provisioning, timely deprovisioning, periodic review) satisfies both frameworks' access-control expectations, which is exactly the argument I make in running ISO 27001 and SOC 2 together. If you're still deciding which framework — or both — makes sense for your business, ISO 27001 vs SOC 2: which one do you need and the ISO 27001, SOC 2 & NIST CSF crosswalk are useful companion reads for mapping this program's output across all three.

Access Governance as a Business Advantage, Not Just an Audit Line Item

It's tempting to treat everything in this article as compliance overhead — a tax paid to keep an auditor satisfied. I'd push back on that framing, because in every engagement I've run, the companies that build a real access-management program get something more valuable than a clean report: they get an organization that actually knows who can touch what, which shortens security questionnaires, speeds up enterprise sales cycles, and meaningfully reduces the odds of the kind of insider-access incident that turns into a very different, much more expensive conversation than an audit exception.

The discipline compounds, too. A control deficiency caught during a quarterly access review and closed with a documented corrective action plan costs a few hours. The same gap discovered by an attacker who used a departed employee's still-active VPN credential costs immeasurably more, and no GRC tool retroactively fixes that math. Every client I've watched invest seriously in continuous monitoring of access — rather than treating it as a once-a-year fire drill — tells me the same thing a year later: the audit got easier, but that was the smaller win. The bigger one was sleeping better.

"Our SOC 2 report is what gets us in the door with enterprise procurement. Our access-review discipline is what actually keeps us safe. I stopped separating the two in my head a long time ago." — Tom Reyes, Founder, Ridgeline Security Advisors

If you're building or tightening this program now, PentesterWorld has practical starting points rather than blank pages. The SOC 2 Control Matrix / RACI Template mirrors the provisioning RACI structure used throughout this article and adapts directly to your own systems. Pair it with the SOC 2 Readiness Checklist to find your access-control gaps before an auditor does, and the SOC 2 Gap Analysis Tool to prioritize what to fix first. If policy language is what's missing, the SOC 2 Policy Pack includes access-control and privileged-access policy templates ready to adapt, and the SOC 2 Glossary is worth bookmarking as you bring the rest of your team up to speed on the terminology this article uses. None of it replaces the accountable ownership a real program needs — but it removes the excuse of starting from nothing.

Frequently asked questions

Is access control the same thing as authentication and MFA for SOC 2 purposes?

No, and this is the distinction the whole article is built around. Access control (this article, CC6.2/CC6.3) governs who is granted what access, and for how long — provisioning, deprovisioning, privilege administration, periodic review. Authentication mechanisms — MFA, password policy, session timeout, single sign-on — govern how a granted identity proves who it is when logging in, which is CC6.1/CC6.6 territory covered in SOC 2 Logical Security: System Access and Authorization. Auditors test both, separately, with different evidence.

How fast do we need to remove access after someone leaves to satisfy CC6?

There's no single universal deadline written into the criteria — auditors evaluate whether your documented SLA is reasonable and whether you actually met it. Same-business-day removal for standard roles and immediate removal at notification for privileged or high-risk terminations is the baseline most of my clients land on and defend successfully; anything beyond a few business days for a standard departure starts inviting questions.

Do access reviews have to happen every quarter?

Only for your highest-risk systems — production infrastructure, privileged accounts, customer or payment data. Lower-risk, non-sensitive SaaS tools are commonly reviewed semi-annually or annually. What matters to an auditor is that the cadence is risk-based, documented, and actually followed — not that everything runs on the same clock.

Do service accounts and API keys need to go through the same review as human accounts?

Yes. Auditors increasingly sample non-human identities specifically because they're historically under-governed. Every service account needs a named owner, a documented purpose, and a place in your periodic review population, just like a person.

What's the difference between least privilege and role-based access control?

Role-based access control (RBAC) is the mechanism — assigning access according to a defined role rather than to each individual separately. Least privilege is the principle it should be designed around — that each role's baseline should contain only what's minimally necessary. You can implement RBAC badly (roles that are too broad) and still fail least privilege even though the mechanism is technically in place.

Can a spreadsheet satisfy the SOC 2 access review requirement, or do we need a dedicated tool?

A well-run, consistently executed spreadsheet-based review is entirely acceptable to auditors, particularly below roughly 100–150 employees. What matters is evidence of an explicit, per-user decision and a signed record — not the tool. Dedicated IGA/IAM tooling becomes worth the investment when manual review starts consuming disproportionate staff time or when consistency, not cost, becomes the limiting factor.

Do contractors and interns need to go through the same joiner/mover/leaver process as employees?

Yes, and it's one of the most commonly missed pieces of the program precisely because contractors often sit outside the standard HRIS-triggered workflow. Route them through the same request, approval, and removal machinery, with the contract end date serving as the deprovisioning trigger.

What's the single biggest access-control mistake you see going into a first Type II audit?

The mover gap, without question. Companies build reasonable joiner and leaver processes because both have an obvious trigger event. Role changes have no equivalent forcing function, so access silently accumulates for years unless the mover workflow is deliberately designed to remove old access, not just add new access.

16

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!