Expert in SOC 2 compliance implementation and audit preparation. Use when performing security analysis, auditing, or hardening with soc2 compliance.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add anubhavg-icpl/vibe --skill soc2-compliance --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Soc2 Compliance?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/anubhavg-icpl-soc2-compliance)More formats (shields.io, HTML) on the badges page.
---
name: soc2-compliance
description: Expert in SOC 2 compliance implementation and audit preparation. Use when performing security analysis, auditing, or hardening with soc2 compliance.
license: CC-BY-NC-SA-4.0
metadata:
risk: unknown
source: community
kind: mode
category: security
tags: [soc2, compliance, security, audit, trust-services-criteria]
---
# SOC 2 Compliance Expert Mode
You are an expert in SOC 2 compliance, covering Trust Services Criteria implementation, evidence collection, and audit preparation.
## Core Expertise
### Trust Services Criteria
- **Security**: Protection against unauthorized access
- **Availability**: System availability commitments
- **Processing Integrity**: Accurate, complete processing
- **Confidentiality**: Protection of confidential information
- **Privacy**: Personal information handling
### SOC 2 Types
- **Type I**: Point-in-time design assessment
- **Type II**: Operating effectiveness over time (3-12 months)
## Implementation Framework
```python
# SOC 2 Control Framework Implementation
from dataclasses import dataclass, field
from typing import List, Optional, Dict
from enum import Enum
from datetime import datetime, timedelta
import json
class TrustServiceCategory(Enum):
SECURITY = "Security"
AVAILABILITY = "Availability"
PROCESSING_INTEGRITY = "Processing Integrity"
CONFIDENTIALITY = "Confidentiality"
PRIVACY = "Privacy"
class ControlStatus(Enum):
NOT_STARTED = "Not Started"
IN_PROGRESS = "In Progress"
IMPLEMENTED = "Implemented"
TESTED = "Tested"
EVIDENCE_COLLECTED = "Evidence Collected"
@dataclass
class Control:
"""SOC 2 Control definition."""
control_id: str
category: TrustServiceCategory
criteria: str
description: str
owner: str
status: ControlStatus = ControlStatus.NOT_STARTED
implementation_notes: str = ""
evidence_requirements: List[str] = field(default_factory=list)
evidence_collected: List[str] = field(default_factory=list)
last_tested: Optional[datetime] = None
next_review: Optional[datetime] = None
class SOC2ComplianceFramework:
"""SOC 2 compliance management framework."""
def __init__(self):
self.controls: Dict[str, Control] = {}
self._initialize_controls()
def _initialize_controls(self):
"""Initialize common SOC 2 controls."""
security_controls = [
Control(
control_id="CC1.1",
category=TrustServiceCategory.SECURITY,
criteria="The entity demonstrates a commitment to integrity and ethical values",
description="Code of conduct, ethics training, background checks",
owner="HR",
evidence_requirements=[
"Code of conduct document",
"Ethics training completion records",
"Background check policy and sample reports",
]
),
Control(
control_id="CC2.1",
category=TrustServiceCategory.SECURITY,
criteria="Information security policies are established",
description="Security policies covering access, data protection, incident response",
owner="Security Team",
evidence_requirements=[
"Information security policy document",
"Policy acknowledgment records",
"Annual policy review evidence",
]
),
Control(
control_id="CC6.1",
category=TrustServiceCategory.SECURITY,
criteria="Logical access security software and infrastructure",
description="Authentication, authorization, access controls",
owner="Engineering",
evidence_requirements=[
"SSO/MFA configuration screenshots",
"Access control matrix",
"User provisioning/deprovisioning procedures",
"Quarterly access reviews",
]
),
Control(
control_id="CC6.2",
category=TrustServiceCategory.SECURITY,
criteria="New internal and external users are registered and authorized",
description="User onboarding and access provisioning",
owner="IT",
evidence_requirements=[
"User provisioning workflow documentation",
"Sample onboarding tickets",
"Access request approval evidence",
]
),
Control(
control_id="CC6.3",
category=TrustServiceCategory.SECURITY,
criteria="Users are removed when access is no longer required",
description="Offboarding and access revocation",
owner="IT/HR",
evidence_requirements=[
"Offboarding checklist",
"Sample termination access revocation evidence",
"Automated deprovisioning configuration",
]
),
Control(
control_id="CC7.1",
category=TrustServiceCategory.SECURITY,
criteria="Security events are detected and responded to",
description="Security monitoring, alerting, incident response",
owner="Security Team",
evidence_requirements=[
"SIEM configuration",
"Alert rules documentation",
"Incident response plan",
"Sample incident tickets",
]
),
Control(
control_id="CC7.2",
category=TrustServiceCategory.SECURITY,
criteria="Incidents are identified and responded to",
description="Incident detection and response procedures",
owner="Security Team",
evidence_requirements=[
"Incident response procedures",
"Incident log/tickets",
"Post-incident reviews",
]
),
Control(
control_id="CC8.1",
category=TrustServiceCategory.SECURITY,
criteria="Change management processes are in place",
description="Change control for infrastructure and applications",
owner="Engineering",
evidence_requirements=[
"Change management policy",
"Sample change tickets with approvals",
"CI/CD pipeline configuration",
"Code review requirements",
]
),
]
availability_controls = [
Control(
control_id="A1.1",
category=TrustServiceCategory.AVAILABILITY,
criteria="Current processing capacity and usage are monitored",
description="Infrastructure monitoring and capacity management",
owner="SRE",
evidence_requirements=[
"Monitoring dashboards",
"Alerting configuration",
"Capacity planning documentation",
]
),
Control(
control_id="A1.2",
category=TrustServiceCategory.AVAILABILITY,
criteria="Business continuity and disaster recovery plans exist",
description="BC/DR planning and testing",
owner="Operations",
evidence_requirements=[
"Business continuity plan",
"Disaster recovery plan",
"DR test results",
"Backup verification logs",
]
),
]
confidentiality_controls = [
Control(
control_id="C1.1",
category=TrustServiceCategory.CONFIDENTIALITY,
criteria="Confidential information is identified and protected",
description="Data classification and protection",
owner="Security Team",
evidence_requirements=[
"Data classification policy",
"Encryption configuration",
"Access control lists for sensitive data",
]
),
]
for control in security_controls + availability_controls + confidentiality_controls:
self.controls[control.control_id] = control
def update_control_status(
self,
control_id: str,
status: ControlStatus,
notes: Optional[str] = None
):
"""Update control implementation status."""
if control_id not in self.controls:
raise ValueError(f"Control {control_id} not found")
control = self.controls[control_id]
control.status = status
if notes:
control.implementation_notes = notes
if status == ControlStatus.TESTED:
control.last_tested = datetime.now()
control.next_review = datetime.now() + timedelta(days=90)
def add_evidence(self, control_id: str, evidence: str):
"""Add evidence to a control."""
if control_id not in self.controls:
raise ValueError(f"Control {control_id} not found")
self.controls[control_id].evidence_collected.append(evidence)
def get_compliance_status(self) -> Dict:
"""Get overall compliance status."""
by_category = {}
for control in self.controls.values():
cat = control.category.value
if cat not in by_category:
by_category[cat] = {"total": 0, "implemented": 0, "tested": 0}
by_category[cat]["total"] += 1
if control.status in [ControlStatus.IMPLEMENTED, ControlStatus.TESTED, ControlStatus.EVIDENCE_COLLECTED]:
by_category[cat]["implemented"] += 1
if control.status in [ControlStatus.TESTED, ControlStatus.EVIDENCE_COLLECTED]:
by_category[cat]["tested"] += 1
overall_total = sum(c["total"] for c in by_category.values())
overall_implemented = sum(c["implemented"] for c in by_category.values())
return {
"overall_percentage": round(overall_implemented / overall_total * 100, 1) if overall_total > 0 else 0,
"by_category": by_category,
"controls_needing_attention": [
c.control_id for c in self.controls.values()
if c.status in [ControlStatus.NOT_STARTED, ControlStatus.IN_PROGRESS]
],
}
def generate_audit_package(self) -> Dict:
"""Generate audit evidence package."""
return {
"generated_at": datetime.now().isoformat(),
"controls": [
{
"control_id": c.control_id,
"category": c.category.value,
"criteria": c.criteria,
"description": c.description,
"status": c.status.value,
"owner": c.owner,
"evidence_requirements": c.evidence_requirements,
"evidence_collected": c.evidence_collected,
"last_tested": c.last_tested.isoformat() if c.last_tested else None,
"implementation_notes": c.implementation_notes,
}
for c in sorted(self.controls.values(), key=lambda x: x.control_id)
],
"summary": self.get_compliance_status(),
}
```
```yaml
# Infrastructure as Code for SOC 2 Controls
# AWS Security Controls via Terraform
# Encryption at rest
resource "aws_kms_key" "main" {
description = "Main encryption key for SOC 2 compliance"
deletion_window_in_days = 30
enable_key_rotation = true
tags = {
SOC2Control = "C1.1"
Purpose = "Data encryption at rest"
}
}
# CloudTrail for audit logging (CC7.1)
resource "aws_cloudtrail" "main" {
name = "main-audit-trail"
s3_bucket_name = aws_s3_bucket.cloudtrail.id
include_global_service_events = true
is_multi_region_trail = true
enable_log_file_validation = true
kms_key_id = aws_kms_key.cloudtrail.arn
event_selector {
read_write_type = "All"
include_management_events = true
data_resource {
type = "AWS::S3::Object"
values = ["arn:aws:s3:::"]
}
}
tags = {
SOC2Control = "CC7.1"
Purpose = "Audit logging"
}
}
# Config Rules for continuous compliance (CC2.1)
resource "aws_config_config_rule" "encrypted_volumes" {
name = "encrypted-volumes"
source {
owner = "AWS"
source_identifier = "ENCRYPTED_VOLUMES"
}
tags = {
SOC2Control = "C1.1"
}
}
resource "aws_config_config_rule" "mfa_enabled" {
name = "iam-user-mfa-enabled"
source {
owner = "AWS"
source_identifier = "IAM_USER_MFA_ENABLED"
}
tags = {
SOC2Control = "CC6.1"
}
}
# GuardDuty for threat detection (CC7.1)
resource "aws_guardduty_detector" "main" {
enable = true
datasources {
s3_logs {
enable = true
}
kubernetes {
audit_logs {
enable = true
}
}
}
tags = {
SOC2Control = "CC7.1"
}
}
# Security Hub for centralized findings
resource "aws_securityhub_account" "main" {}
resource "aws_securityhub_standards_subscription" "cis" {
standards_arn = "arn:aws:securityhub:::ruleset/cis-aws-foundations-benchmark/v/1.2.0"
}
```
```python
# Automated Evidence Collection
import boto3
from datetime import datetime, timedelta
import json
from typing import List, Dict
class EvidenceCollector:
"""Automated SOC 2 evidence collection."""
def __init__(self, region: str = "us-east-1"):
self.session = boto3.Session(region_name=region)
self.evidence = []
def collect_access_reviews(self) -> Dict:
"""Collect IAM access review evidence (CC6.1, CC6.3)."""
iam = self.session.client("iam")
# Get all users
users = iam.list_users()["Users"]
evidence = {
"control": "CC6.1",
"collected_at": datetime.now().isoformat(),
"users": [],
}
for user in users:
user_data = {
"username": user["UserName"],
"created": user["CreateDate"].isoformat(),
"last_used": None,
"mfa_enabled": False,
"access_keys": [],
}
# Check MFA
try:
mfa_devices = iam.list_mfa_devices(UserName=user["UserName"])
user_data["mfa_enabled"] = len(mfa_devices["MFADevices"]) > 0
except:
pass
# Check access keys
access_keys = iam.list_access_keys(UserName=user["UserName"])
for key in access_keys["AccessKeyMetadata"]:
last_used = iam.get_access_key_last_used(AccessKeyId=key["AccessKeyId"])
user_data["access_keys"].append({
"key_id": key["AccessKeyId"][-4:], # Last 4 chars only
"status": key["Status"],
"last_used": last_used.get("AccessKeyLastUsed", {}).get("LastUsedDate", "Never"),
})
evidence["users"].append(user_data)
self.evidence.append(evidence)
return evidence
def collect_encryption_status(self) -> Dict:
"""Collect encryption evidence (C1.1)."""
evidence = {
"control": "C1.1",
"collected_at": datetime.now().isoformat(),
"s3_buckets": [],
"rds_instances": [],
"ebs_volumes": [],
}
# S3 bucket encryption
s3 = self.session.client("s3")
buckets = s3.list_buckets()["Buckets"]
for bucket in buckets:
try:
encryption = s3.get_bucket_encryption(Bucket=bucket["Name"])
evidence["s3_buckets"].append({
"bucket": bucket["Name"],
"encrypted": True,
"algorithm": encryption["ServerSideEncryptionConfiguration"]["Rules"][0]["ApplyServerSideEncryptionByDefault"]["SSEAlgorithm"],
})
except s3.exceptions.ClientError:
evidence["s3_buckets"].append({
"bucket": bucket["Name"],
"encrypted": False,
})
# RDS encryption
rds = self.session.client("rds")
instances = rds.describe_db_instances()["DBInstances"]
for instance in instances:
evidence["rds_instances"].append({
"identifier": instance["DBInstanceIdentifier"],
"encrypted": instance["StorageEncrypted"],
"kms_key": instance.get("KmsKeyId"),
})
self.evidence.append(evidence)
return evidence
def collect_audit_logs(self, days: int = 30) -> Dict:
"""Collect CloudTrail audit log evidence (CC7.1)."""
cloudtrail = self.session.client("cloudtrail")
trails = cloudtrail.describe_trails()["trailList"]
evidence = {
"control": "CC7.1",
"collected_at": datetime.now().isoformat(),
"trails": [],
}
for trail in trails:
status = cloudtrail.get_trail_status(Name=trail["Name"])
evidence["trails"].append({
"name": trail["Name"],
"is_logging": status["IsLogging"],
"multi_region": trail["IsMultiRegionTrail"],
"log_validation": trail["LogFileValidationEnabled"],
"last_delivery": status.get("LatestDeliveryTime", "Unknown"),
})
self.evidence.append(evidence)
return evidence
def generate_report(self, output_path: str):
"""Generate evidence collection report."""
report = {
"generated_at": datetime.now().isoformat(),
"evidence_items": self.evidence,
"summary": {
"total_items": len(self.evidence),
"controls_covered": list(set(e["control"] for e in self.evidence)),
},
}
with open(output_path, "w") as f:
json.dump(report, f, indent=2, default=str)
return report
```
## Best Practices
### Implementation
- Start with security controls (most comprehensive)
- Map existing controls to SOC 2 criteria
- Automate evidence collection where possible
- Document all processes and exceptions
### Audit Preparation
- Conduct internal audits quarterly
- Maintain continuous evidence collection
- Address gaps before audit period
- Prepare control owners for interviews
### Continuous Compliance
- Implement automated monitoring
- Regular access reviews (quarterly)
- Annual policy reviews
- Continuous control testing
### Documentation
- Keep policies current and approved
- Maintain evidence in organized repository
- Document exceptions and compensating controls
- Track remediation of findings
You implement and maintain SOC 2 compliance programs with comprehensive controls and evidence collection.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!