SOC 2 log retention: working out how long to keep logs
The criteria never name a number of days. Your report calendar does, and several free tool defaults fall short of it.
SOC 2 log retention has no official number. Nowhere in the Trust Services Criteria is a retention period named,1 so you work it out from two dates: when your observation period ends, and when the auditor stops asking for samples. For a six month Type 2 issued nine months after the period opened, that lands at about twelve months of logs. The bigger risk is quieter. Of the defaults we checked on August 1, 2026, 8 delete evidence before the auditor gets to it.
This is one of the few controls where a mistake cannot be undone. A missing document can be written in an afternoon. A log that was deleted in March is simply gone, and you find out when the auditor asks for a March date. Getting this right costs almost nothing. Getting it wrong can cost you a whole period.
Work out your own number first
A Type 2 tests whether controls ran over a period. The auditor picks instances from inside that period and tests each one.2 The key detail is timing: the picking happens after the period closes. Retention plans that stop at the period end miss the months that follow. Here is a real calendar.
- January 1. The observation period opens. From here on, what your systems record belongs to the report.
- June 30. The period closes after six months, a length buyers ask for when three is not enough.
- July. Fieldwork begins and the prepared by client list arrives. Requests keep coming while testing runs, and follow ups arrive after the first round.
- September 30. The report is issued in month nine, counted from the opening day.
- Any day can be sampled. January 2 included. On September 30 that log line is 271 days old. It still has to exist.
So your floor is the period length plus the tail, the tail being the stretch from period close to the last evidence request. Call it nine months. Tools do not offer nine month settings, and the next step up is usually 365 days. That is where twelve comes from.
Two things push the number higher. Back to back Type 2 periods overlap, since period two opens while period one is still being examined. And a customer reading the report in month ten can ask a question that sends you back to the same records. How long the observation period has to be helps you pick the window, which is the input to all of this.
Why the criteria stay silent on days
The criteria are written as goals, not settings.1 That is why a search of the document for a retention period comes up empty. It is on purpose. A figure that fits a payments company running twelve month reports would make no sense for a five person team on its first three month window. So the standard leaves the number to your calendar and your policy.
Your policy creates a second floor
The auditor tests your controls against how you described them.3 That matters here. Say your security policy promises twelve months of audit logs, and the only record you have is 90 days of CloudTrail Event history. The standard is not the problem. Your control is running differently from your description, and that is an exception.
There are two honest fixes. Raise retention to match the policy, or rewrite the policy to match what you really keep and can prove. Leaving them out of step creates a finding from a sentence nobody forced you to write. What happens when a control fails shows how that looks in a finished report. Use whichever floor is higher. Derive the number from your calendar, then put that number in the policy.
Eleven defaults, checked against 271 days
We opened each vendor's own documentation on August 1, 2026, and every row links to the page it came from. The third column asks one question. Does the default keep the oldest record alive through a six month period and a three month fieldwork tail?
| Tool and surface | Default | Lasts 271 days? | Fix |
|---|---|---|---|
| AWS CloudTrail: Event history (console view) Docs | 90 days | No | Cannot be changed. Keep a longer record with a trail delivering to S3 or a CloudTrail Lake event data store, both separate from Event history. |
| AWS CloudTrail Lake: Event data store on one-year extendable retention pricing Docs | 366 days | Yes | Leave the default in place. It can go as high as 3,653 days. |
| Amazon CloudWatch Logs: Log group Docs | Indefinite | Yes | No change needed. Check that no one set an expiry of 30 or 90 days on a group you depend on. |
| GitHub: Organization and enterprise audit log Docs | 180 days | No | No retention control exists. Stream the audit log to storage you own, or export it on a fixed schedule. |
| GitHub: Git events in the audit log Docs | 7 days | No | Only streaming keeps them. If a stream pauses, it buffers for seven days and then loses data. |
| Google Cloud Logging: _Required log bucket Docs | 400 days, fixed | Yes | Nothing to do. Admin Activity and System Event audit logs go here, and the period cannot be shortened. |
| Google Cloud Logging: _Default log bucket Docs | 30 days | No | Run gcloud logging buckets update _Default --location=global --retention-days=365, or change it on the Logs Storage page. |
| Google Cloud: Data Access audit logs Docs | Off by default (BigQuery excepted) | No | Enable them under IAM and Admin, then Audit Logs. Until then nothing is written, so there is nothing to keep. |
| Google Workspace: Admin, Login, Drive, Groups, OAuth Token, SAML, Devices and Calendar log events Docs | 6 months | No | No retention setting. Export log events to BigQuery, available on Frontline Standard and Plus, Enterprise Standard and Plus, Education Standard and Plus, and Enterprise Essentials Plus. |
| Google Workspace: Email Log Search Docs | 30 days | No | Cannot be extended. If mail routing evidence is in scope, save it when it happens. |
| Google Workspace: BigQuery log export table expiration Docs | 60 days | No | Go to Reporting, then Data integrations, and edit BigQuery Export. Raise the expiration so the export outlives its source. |
Vendors change defaults without notice, and an account created in 2023 may behave differently from one created next quarter. Treat the table as a list of settings to open, not a report on your account. Look at each one in your own console before an examination, and again at renewal.
Four rows worth a second look
- CloudTrail Event history is only a console view
- It holds 90 days and sits apart from any trail or event data store. Editing a trail does not extend it. Your lasting record is the trail or the Lake store, and without one of them, 90 days is all there is.
- Google Cloud Data Access logs start switched off
- Admin Activity and System Event logs go to the _Required bucket for 400 days on their own. Data Access logs, which show who read what, are disabled outside BigQuery until you enable them. No logs written means nothing to retain.
- The _Default bucket keeps 30 days
- A single command, shown in the table, fixes it. Skip it and an account that looks well instrumented in month one has nothing to sample by month eight. Change it before the period opens.
- Workspace keeps six months, and its export keeps sixty days
- Six months covers one six month period with zero tail, and no admin setting extends it. The BigQuery export is the escape route, but its tables expire after 60 days by default. Set it up and forget it, and the copy dies before the original.
Our connector guides for AWS, GitHub, Google Cloud and Google Workspace cover the read-only permissions each one needs. That is a separate question from how long each source keeps its own data.
What this costs, and what getting it wrong costs
Every fix above is a setting, and settings are free. Log storage at a small company's volume is a minor line on a cloud bill. You do not need a consultant for any of it. One engineer with the table above and an hour of console time can do the whole list.
The expensive outcome is a lost period. If the auditor cannot sample, you run the period again, which means another stretch of calendar while the deal waits. On our software, which is $199 a month, cancel any time, the software side of a rerun is small. The calendar is the real loss.
That is why continuous collection helps. Our software pulls recurring evidence from AWS, GitHub, Google Cloud and Google Workspace while the period runs, and files it against the right control. A copy taken in February is still there in September, even if the source rotated it out in June. You should still raise the retention windows. The copy just removes the case where one unnoticed default forces a rerun.
A one week retention checklist
- Write down three dates. Period start, period end, and a realistic issue date. Everything else follows from them, and a month of error is how a setting ends up 30 days short.
- Read the live value in each console. Not the documented default and not this page. Someone may have lowered it to trim a bill two years ago.
- Set every window you control to 365 days. Where there is no setting, use an export, and check the export's own retention.
- Screenshot the correct setting. A capture showing the value, its scope and the date counts as evidence for the monitoring criteria.
- Book two rechecks. One before the period opens and one before fieldwork. A mid period change made to save money stays silent until an auditor asks.
The evidence checklist lists what each system must produce and how often. The prepared by client list is the July request in the calendar above, and retention decides whether answering it is a quick query or an awkward email.
cybersoftware is not a CPA firm. SOC 2 examinations are performed by independent licensed U.S. CPA firms. Your examiner is an independent partner auditor, a licensed U.S. CPA firm. The records they sample must exist on the day they ask, not only on the day they were created. SOC 2 results in a report on a period rather than a certificate, so those records stay relevant as long as the report is in use.
Your next step
Not sure whether your logging covers the criteria at all? The free readiness assessment takes about 15 minutes and returns a readiness assessment, score, gap list and one AI sample policy, including where monitoring falls short. When you are ready to collect evidence continuously, the pricing page lays out the monthly and yearly plans, and how audits are priced through our preferred pricing program.
Questions
What log retention period does SOC 2 require?
Are 90 days of logs enough?
Will the CloudTrail 90 day limit cause a problem in the audit?
What should our retention policy say about logs?
Can these vendor defaults change?
Sources
Get audit-ready without a compliance team
The readiness assessment is free, with no payment and no card. When you are ready, the software is $199 a month, cancel any time, and audits go through our preferred pricing program. You can be audit-ready starting at about a week.
Start with a free readiness assessmentcybersoftware is not a CPA firm. SOC 2 examinations are performed by independent licensed U.S. CPA firms.