Completing your first SOC 2 Type II audit can seem daunting. After successfully leading my organization through the process with zero findings, I’m sharing the complete playbook.
What is SOC 2?
SOC 2 (Service Organization Control 2) is a compliance framework developed by AICPA that evaluates the security, availability, processing integrity, confidentiality, and privacy of customer data.
Trust Service Criteria
- Security (required for all)
- Availability (optional)
- Processing Integrity (optional)
- Confidentiality (optional)
- Privacy (optional)
Most SaaS companies pursue Security + Availability.
Timeline & Planning
6-Month Preparation Timeline
| Month | Focus Area |
|---|---|
| 1-2 | Gap assessment, scope definition, auditor selection |
| 3-4 | Policy implementation, technical controls deployment |
| 5 | Evidence collection, documentation |
| 6 | Pre-audit readiness review, audit execution |
Phase 1: Scoping (Months 1-2)
Define Your Scope
Key Questions:
- Which systems handle customer data?
- What infrastructure supports these systems?
- Who has access to customer data?
- What third parties process customer data?
My Scope Example:
- Production AWS environment
- Customer-facing web application
- Database servers
- 25 employees with production access
- 3 critical vendors (cloud provider, payment processor, logging service)
Select Your Auditor
Criteria for selection:
- Experience with your industry
- Reasonable pricing ($15k-$50k for Type II)
- Good communication and responsiveness
- Timeline flexibility
Pro tip: Get quotes from 3 auditors, ask for references.
Phase 2: Gap Assessment (Month 2)
Common Gaps I Found
Access Control Issues
- No formal access review process
- Lack of MFA on critical systems
- Former employee accounts still active
Change Management
- No formal change approval process
- Missing rollback procedures
- Inadequate testing requirements
Vendor Management
- No vendor security assessments
- Missing SLAs
- No SOC 2 reports from sub-processors
Incident Response
- No documented IR plan
- No incident response testing
- Missing communication procedures
Phase 3: Policy Development (Month 3)
Required Policies
I created 12 core policies:
- Information Security Policy (master policy)
- Access Control Policy
- Change Management Policy
- Incident Response Plan
- Business Continuity Plan
- Disaster Recovery Plan
- Vendor Management Policy
- Risk Assessment Policy
- Security Awareness Training Policy
- Data Classification Policy
- Encryption Policy
- Logging and Monitoring Policy
Policy Template Structure
1. Purpose
2. Scope
3. Roles and Responsibilities
4. Policy Statements
5. Exceptions Process
6. Compliance & Enforcement
7. Review Schedule
8. Approval & Version History
Resource: I used the SANS Security Policy Templates as a starting point.
Phase 4: Technical Controls (Months 3-4)
Infrastructure Security
Cloud Security (AWS):
# Enable CloudTrail logging
aws cloudtrail create-trail --name security-audit-trail \
--s3-bucket-name my-audit-logs
# Enable GuardDuty
aws guardduty create-detector --enable
# Enable Security Hub
aws securityhub enable-security-hub
Key Implementations:
- ✅ Multi-factor authentication on all accounts
- ✅ Centralized logging (sent to SIEM)
- ✅ Encryption at rest (EBS, S3, RDS)
- ✅ Encryption in transit (TLS 1.2+)
- ✅ Network segmentation (separate prod/dev)
- ✅ Vulnerability scanning (weekly automated scans)
- ✅ Intrusion detection (IDS/IPS deployment)
Access Controls
Implemented:
- SSO with Okta (MFA enforced)
- Role-based access control (RBAC)
- Quarterly access reviews
- Automated off-boarding process
- Privileged access management (PAM)
Automation Script for Access Reviews:
import boto3
import pandas as pd
from datetime import datetime
def generate_access_report():
iam = boto3.client('iam')
users = iam.list_users()
report_data = []
for user in users['Users']:
username = user['UserName']
groups = iam.list_groups_for_user(UserName=username)
mfa_devices = iam.list_mfa_devices(UserName=username)
report_data.append({
'Username': username,
'Groups': [g['GroupName'] for g in groups['Groups']],
'MFA_Enabled': len(mfa_devices['MFADevices']) > 0,
'Last_Activity': get_last_activity(username)
})
df = pd.DataFrame(report_data)
df.to_excel(f'access_review_{datetime.now().strftime("%Y%m%d")}.xlsx')
generate_access_report()
Phase 5: Evidence Collection (Month 5)
Evidence Organization
I created a structured folder system:
SOC2_Evidence/
├── 01_Policies/
├── 02_Access_Reviews/
│ ├── Q1_2024/
│ ├── Q2_2024/
│ └── Q3_2024/
├── 03_Change_Tickets/
├── 04_Incident_Reports/
├── 05_Vulnerability_Scans/
├── 06_Penetration_Tests/
├── 07_Training_Records/
├── 08_Vendor_Assessments/
├── 09_Background_Checks/
├── 10_Risk_Assessments/
├── 11_Business_Continuity_Tests/
└── 12_Monitoring_Logs/
Critical Evidence Items
Must-haves:
- ✅ Quarterly access reviews (all 4 quarters in audit period)
- ✅ Change management tickets (sample of 25+)
- ✅ Security awareness training completion records
- ✅ Vulnerability scan reports (weekly throughout period)
- ✅ Penetration test report (annual)
- ✅ Incident response records (including “no incidents” documentation)
- ✅ Background check records for all employees
- ✅ Vendor SOC 2 reports for critical vendors
- ✅ Business continuity/disaster recovery test results
Phase 6: The Audit (Month 6)
Audit Process
Week 1: Kick-off meeting
- Scope confirmation
- Evidence request list
- Interview schedule
Weeks 2-3: Evidence review
- Upload evidence to auditor portal
- Respond to clarification questions
- Schedule interviews
Week 4: Testing & interviews
- Control testing by auditor
- Employee interviews (5-10 people)
- Management review
Week 5-6: Report drafting
- Initial findings review
- Remediation of any issues
- Final report delivery
Interview Preparation
Common interview questions:
- “Walk me through your access provisioning process”
- “How do you handle security incidents?”
- “Describe your change management workflow”
- “How do you ensure vendors are secure?”
- “What happens when someone leaves the company?”
Pro tip: Conduct mock interviews with your team beforehand.
Common Pitfalls & How to Avoid Them
Pitfall #1: Incomplete Evidence
Solution: Create an evidence checklist and track collection weekly
Pitfall #2: Undocumented Processes
Solution: “If it’s not documented, it doesn’t exist” - write everything down
Pitfall #3: Control Gaps During Audit Period
Solution: Start controls early, maintain consistency throughout observation period
Pitfall #4: Vendor Non-compliance
Solution: Request vendor SOC 2 reports 3 months before your audit
Pitfall #5: Poor Change Management
Solution: Implement ticketing system (Jira, ServiceNow) for all changes
Cost Breakdown
My actual costs:
- Auditor fees: $35,000
- Security tooling: $15,000/year
- SIEM: $5,000
- Vulnerability scanning: $3,000
- SSO/MFA: $4,000
- Other tools: $3,000
- Consultant/advisor: $10,000
- Employee time: ~500 hours (internal cost)
Total: ~$60,000 for first audit
Post-Audit: Maintaining Compliance
Ongoing requirements:
- Quarterly access reviews
- Annual policy reviews
- Continuous evidence collection
- Quarterly vendor reviews
- Annual penetration testing
- Security awareness training (at least annually)
- Incident response plan testing
Automation is key: I built Python scripts to:
- Generate access review reports
- Collect CloudTrail logs
- Track policy review dates
- Monitor certificate expirations
- Validate MFA compliance
Results & Lessons Learned
Our Results
- Type II audit: Passed with ZERO findings
- Audit period: 6 months
- Timeline: Completed in 6 months from start to report
- Customer impact: Increased enterprise sales by 200%
Key Lessons
- Start early: 6 months minimum preparation time
- Document everything: Create audit trail as you go
- Automate evidence collection: Saves massive time during audit
- Get buy-in: Make security everyone’s responsibility
- Choose the right auditor: Communication is critical
Resources & Tools
Compliance Management:
- Drata (automated compliance)
- Vanta (automated compliance)
- Secureframe (automated compliance)
Free Resources:
- AICPA Trust Services Criteria
- SANS Security Policy Templates
- CIS Controls
Community:
- r/netsec
- Security compliance Slack communities
- Local ISACA chapter
Conclusion
SOC 2 compliance is achievable with proper planning and execution. The key is treating it not as a one-time checkbox, but as a framework for building a mature security program.
The investment in SOC 2 paid dividends:
- Closed 3 major enterprise deals requiring SOC 2
- Improved internal security posture significantly
- Streamlined security operations
- Increased team security awareness
Ready to start your SOC 2 journey? Feel free to reach out with questions!
Want the complete SOC 2 preparation toolkit? Including policies, checklists, and automation scripts? Contact me
