Your SOC 2 auditor just kicked back the audit trail you submitted as evidence. Again. That’s the wall most devops teams hit the first time SOC 2 requirements meet their actual logging setup in 2026: they treat “audit trail” as a synonym for “we have logs somewhere,” and auditors don’t. A SOC 2 audit trail for devops teams has a specific bar. Who did it, what did they do, when did they do it, and can anyone prove the record wasn’t altered after the fact. Miss any one of those four and the control fails, no matter how much logging infrastructure you already run.
What does SOC 2 actually require for an audit trail?
SOC 2 doesn’t hand you a literal checklist that says “buy an audit trail product.” It’s built around Trust Services Criteria, and logging shows up as evidence for several of them at once: CC6.1 (logical access is restricted and tracked), CC7.2 (the entity monitors for security events and anomalies), and CC4.1 (management evaluates whether controls are actually operating). An auditor reviewing any of these will ask for logs, then ask four questions of those logs before they count as evidence.
- Who: is every privileged action tied to a real, individual identity, not a shared root or admin account?
- What: is the action itself specific enough to reconstruct what happened (command run, resource changed, permission granted), not just “user logged in”?
- When: is there a timestamp that’s accurate and consistent across systems, so events can be sequenced during an incident review?
- Tamper-evidence: can the same people the log is watching also edit or delete it? If yes, the log isn’t evidence of anything.
That last point is where most homegrown logging setups quietly fail. A log file sitting on the same server it’s auditing, writable by the same admin account that has SSH access to that server, isn’t an audit trail in a SOC 2 sense. It’s a text file an auditor has no reason to trust.
It also matters which report you’re being evaluated against. A Type I report checks whether the audit trail control exists and is designed correctly, at a single point in time. A Type II report is stricter: it checks whether the control actually operated, correctly, across the whole review period, which means the auditor will sample specific dates and expect real log entries to exist for them, not a screenshot of a dashboard taken the week before the audit. Teams that pass Type I and then stumble on their first Type II usually do so because the control existed on paper but wasn’t consistently capturing evidence months earlier.
Audit trail requirements vs nice-to-haves for devops teams in 2026
Startups preparing for their first SOC 2 audit tend to overcorrect in one of two directions: they either ship a bare-minimum log that fails the tamper-evidence question, or they try to buy a full SIEM stack before they’ve nailed the basics. Neither is necessary. Split what SOC 2 actually requires from what’s genuinely optional.
Must-have for a passing SOC 2 audit
- Append-only storage. Log entries can be added, never edited or deleted, by anyone including admins. Write-once storage, a separate logging account with no delete permission, or a managed log service that enforces immutability all satisfy this.
- Privileged-action coverage. Every action that changes state on production infrastructure, SSH sessions, IAM changes, deploys, config edits, needs to land in the trail. Read-only activity matters less than anything that mutates a system.
- Retained, accurate timestamps. Clocks need to be synced (NTP, not “close enough”), and the retention window needs to cover your full audit period, not just the last 30 days.
Nice-to-have, not required
- Real-time SIEM correlation. Useful for incident response, not something a SOC 2 auditor asks for on its own.
- Automated anomaly detection. Flagging unusual access patterns is good security practice, but it’s a bonus control, not a required one for most Type I or Type II reports.
- Auto-generated compliance reports. Nice for saving prep time next cycle. The underlying log data is what gets audited, the report is a convenience layer on top.
If you’re staring at a budget line for a $30k+/year GRC platform because you assumed the nice-to-haves were mandatory, they’re not. Spend the effort on the three must-haves first, and revisit the nice-to-haves once you’ve been through an audit cycle and know where your actual gaps are, rather than guessing at them up front. Most first-time SOC 2 teams over-invest in dashboards and under-invest in making sure the raw log data can’t be quietly edited, which is backwards from what an auditor actually tests.
Which systems need an audit trail first?
Not every system is equally exposed, and most teams don’t have the bandwidth to instrument everything in one sprint. Prioritize by blast radius.
- SSH and server access. Direct shell access to production is the single highest-risk path in most infra, and it’s also the one most teams have the weakest logging on. See the complete guide to SSH security for the broader hardening context this sits inside.
- CI/CD pipelines. Anyone who can edit a pipeline config or trigger a deploy can push arbitrary code to production. Pipeline runs, config changes, and secret access all belong in the trail. GitHub Actions, GitLab CI, and CircleCI all keep run history natively, the common gap is that no one exports it anywhere durable before the platform’s own retention window rolls it off.
- Cloud console and IAM changes. Permission grants, role changes, and console logins are exactly the kind of privileged action CC6.1 is watching for. AWS CloudTrail, GCP Cloud Audit Logs, and Azure Activity Log all capture this natively, the gap is usually retention and centralization, not capture.
Start with SSH access if you haven’t instrumented anything yet. It’s the most common gap in a first-time SOC 2 audit, and the easiest to fix without new infrastructure: cloud providers already log IAM and console activity for you by default, but almost nothing logs an individual SSH session’s commands unless you deliberately configure it to.
How long do you need to retain audit logs for SOC 2?
There’s no single number written into the Trust Services Criteria, retention is a policy you set and then have to defend as reasonable. In practice, two things drive the floor. A Type II report covers an observation period, commonly 6 to 12 months, and your logs need to span that entire window with no gaps for the auditor to sample from. Most teams then keep a rolling 12 months as the baseline and extend to 2 years if a customer contract, cyber insurance policy, or a stricter framework like PCI DSS layered on top demands it.
Whatever number you land on, write it down as an actual retention policy document, and make sure your storage doesn’t silently roll off logs sooner (a log aggregator’s default 30- or 90-day retention tier is a common surprise here, and it’s one of the most common reasons teams fail their second audit cycle rather than their first). Auditors will ask for the policy, then ask you to pull a sample from near the start of the audit period to confirm the policy is real, not aspirational.
Retention and tamper-evidence are related but not the same requirement, and it’s worth keeping them separate in your head. Retention is about how long the record survives. Tamper-evidence is about whether anyone can quietly rewrite it while it’s still around. A log that’s kept for three years but editable by an admin the whole time satisfies retention and fails tamper-evidence. Both have to hold at once.
How do you build a SOC 2-ready audit trail without an enterprise GRC or PAM tool?
You don’t need a six-figure privileged access management suite to pass this control. Most of the gap between “we have some logs” and “this satisfies SOC 2” is centralization and consistency, not missing tooling.
Start by listing every system where privileged, state-changing actions happen: SSH, your cloud console, CI/CD, your database admin panel. For each, confirm three things: actions are tied to individual identity (no shared logins), the log ships somewhere the acting user can’t delete from, and it’s retained long enough per the policy above. Where a tool already centralizes logs (a cloud provider’s audit log service, a log aggregator you already pay for), point every source at it instead of running parallel, disconnected log stores per tool. A scattered trail across five systems with five different retention settings is harder to defend to an auditor than one centralized, consistently-configured trail across the same five systems.
In practice this is a short, mechanical project once you’ve inventoried the systems: turn on native audit logging everywhere it’s already available (cloud IAM, CI/CD run history), route each source to one durable destination instead of leaving it in the provider’s default short-lived view, remove standing shared credentials so every action ties back to a person, and write down the retention window you’re committing to. None of that requires evaluating a new vendor. It requires making sure logging you can already turn on is actually turned on, consistently, everywhere it needs to be.
SSH access deserves special attention here because it’s usually the least instrumented and the highest-risk. A per-command SSH log, timestamped, tied to the individual credential that ran it, and shipped somewhere the session owner can’t edit, is a concrete, auditable control an auditor can point to directly. It’s also one of the cheaper gaps to close: it doesn’t require replacing your terminal workflow, just making sure the tool you already SSH through keeps that record for you. For the policy side of this (who gets SSH access to what, and how that’s reviewed), building a compliance-ready SSH access policy without an enterprise PAM tool walks through the access-control half; the credential handling underneath it is covered in how end-to-end encrypted SSH credentials work.
Common audit trail mistakes that fail a SOC 2 review
- The people being audited can edit their own logs. If an admin’s SSH session log lives on a box that same admin has root on, it’s not append-only in any way an auditor will accept.
- Clock drift across systems. Timestamps that don’t line up between your app servers, your log aggregator, and your cloud provider make incident timelines impossible to reconstruct and raise flags on their own.
- Silent gaps from unmonitored tools. A new CI/CD provider or a database admin tool added after the logging setup was built often gets missed, and the gap only surfaces when the auditor samples that exact window.
- Shared credentials with no individual attribution. A shared “deploy-bot” SSH key used by four engineers means every action in the log resolves to “deploy-bot,” not a person, which fails the “who” question outright.
- Retention shorter than the audit period. Discovering your log aggregator’s default retention rolled off three months of the review window, right when the auditor asks for a sample from that window.
- Mixing audit logs with debug logs. Burying “user X changed IAM policy Y” inside a firehose of application debug output makes the specific evidence an auditor needs hard to extract and easy to argue isn’t really being tracked.
- Treating the trail as a one-time setup task. A control that was correct the week it was built and untouched since is exactly what a Type II review is designed to catch. New tools, new hires, and new infra get added continuously; the audit trail has to keep up with all of them, not just the systems that existed when the policy was written.
None of these are exotic failures. They’re the same handful of gaps showing up across most first-time SOC 2 audits, which is also why they’re straightforward to fix once you know to look for them specifically, rather than treating the whole audit trail requirement as one big undifferentiated lift.
Where termique fits: lightweight audit evidence for infrastructure access
termique won’t replace a GRC platform and it isn’t trying to. What it does is close the specific SSH-access gap most teams hit first: every command run through a host on a Pro plan is logged with a timestamp and tied to the individual credential that ran it, giving you the who/what/when a SOC 2 reviewer asks for on the access path that’s usually the least instrumented. That’s the same subsystem termique’s own v0.2.5 core subsystems audit covers in detail, it was the most audited release the project has shipped.
It’s a narrow piece of a SOC 2 program, not the whole program. Cloud IAM logging, CI/CD run history, and database admin logs still need their own coverage, and no single tool closes all of it at once. But if SSH access is the gap in your current audit trail, and for most devops teams it is, it’s the concrete, auditable control worth closing first, before you evaluate anything heavier.