Home > Docs > Best Practices > Security > SOC 2 Type II Readiness
🔐 SOC 2 Type II Readiness on Microsoft Fabric¶
AICPA Trust Services Criteria → Fabric Controls Mapping — Anchor Doc for Wave 5
Last Updated: 2026-04-27 | Version: 1.0.0 | Anchor for: Wave 5 Security & Compliance doc set
Disclaimer: This document provides architectural and technical guidance for SOC 2 Type II readiness on Microsoft Fabric. It is not legal or auditing advice. Engage a qualified CPA firm to perform the actual SOC 2 examination. Verify control mappings with your audit firm before relying on them in an examination.
📑 Table of Contents¶
- 🎯 Overview
- 📋 SOC 2 Fundamentals
- 🔍 Trust Services Criteria → Fabric Controls
- 🏗️ Reference Architecture
- ⚙️ Common Criteria (CC) Implementation
- 🔒 Security TSC Implementation
- ⚡ Availability TSC Implementation
- 🧩 Processing Integrity TSC Implementation
- 🤐 Confidentiality TSC Implementation
- 👤 Privacy TSC Implementation
- 📊 Evidence Collection
- 🗂️ Control Matrix Template
- 📅 Examination Period Preparation
- 🚫 Anti-Patterns
- 📋 Production Readiness Checklist
- 📚 References
🎯 Overview¶
SOC 2 Type II is the gold-standard SaaS security report. It's not a certification — it's an attestation by a CPA firm that, over a defined examination period (typically 6-12 months), the service organization's controls operated effectively per the AICPA Trust Services Criteria. Microsoft Fabric customers building SaaS or providing services to enterprise customers face SOC 2 as a routine sales requirement.
Why SOC 2 Type II Matters for Fabric Workloads¶
| Pressure | Detail |
|---|---|
| Sales gating | Most enterprise procurement teams require a SOC 2 Type II report before onboarding |
| Audit propagation | If you're a sub-processor in your customers' SOC 2 scope, your controls inherit |
| Insurance | Cyber insurance underwriting routinely asks "do you have SOC 2?" |
| Investor due diligence | Series A+ rounds increasingly require it |
| Government contracts | StateRAMP and FedRAMP build on SOC 2 + additional controls |
What This Document Covers¶
- Mapping each Trust Services Criterion to a concrete Fabric control or configuration
- Evidence-collection patterns: where audit logs live, what to extract, retention requirements
- Examination-period preparation: 12 months of trailing evidence
- Common gotchas Fabric customers hit during examination
- A control matrix template you can hand to your auditor
📝 Scope: This is the anchor doc for Phase 14 Wave 5. Sub-topics get their own deep-dive docs: ISO 27001 mapping, GDPR right to deletion, CCPA privacy rights, STRIDE threat model, zero-trust blueprint, data exfiltration prevention, supply chain security, audit trail immutability.
📋 SOC 2 Fundamentals¶
Type I vs Type II¶
| Type I | Type II | |
|---|---|---|
| Question answered | Are controls designed effectively? | Are controls operating effectively over time? |
| Examination period | Point in time | 6-12 months minimum |
| Effort | Lower | Significantly higher (continuous evidence) |
| Customer value | Limited (point-in-time) | High (proven sustained operation) |
| Cadence | Often a stepping stone | Annual renewal |
Most enterprise customers reject Type I and will only accept Type II. Plan for Type II from the start.
The Five Trust Services Criteria (TSC)¶
| TSC | Focus | Always Required? |
|---|---|---|
| Security (Common Criteria) | Protection against unauthorized access | ✅ Mandatory in every SOC 2 |
| Availability | System uptime per agreement | Optional — choose if you have uptime SLAs |
| Processing Integrity | Data is complete, valid, accurate, timely | Optional — choose if you process customer data |
| Confidentiality | Information designated confidential is protected | Optional — choose if you handle customer-confidential data |
| Privacy | Personal information collected/used per privacy notice | Optional — choose if you handle PII directly |
For most Fabric-based SaaS: - Security + Availability + Confidentiality is the typical baseline - Add Processing Integrity if you do data transformations on behalf of customers - Add Privacy if you collect end-user PII (and align with GDPR / CCPA)
🔍 Trust Services Criteria → Fabric Controls¶
This is the canonical mapping auditors will ask for. Every Common Criterion (CC1-CC9) and category criterion below maps to specific Fabric configurations.
Control Mapping Table¶
| TSC | Criterion | Description | Fabric Control |
|---|---|---|---|
| CC1.1 | Demonstrates commitment to integrity | Code of conduct, board oversight | (Organizational — not Fabric-specific) |
| CC1.2 | Independent oversight | Board, audit committee | (Organizational) |
| CC2.1 | Information & communication | Internal policies | Documented in docs/best-practices/security/ |
| CC3.1 | Risk assessment | Threat modeling | STRIDE threat model |
| CC4.1 | Monitoring | SOC monitoring, incident response | Observability stack + Incident runbooks |
| CC5.1 | Logical & physical access | Authentication, authorization | Workspace Identity + Entra ID + RBAC |
| CC5.2 | Environment hardening | Network controls, encryption | Private Endpoints + CMK + OAP |
| CC5.3 | Acquired components | SBOM, dependency scanning | Supply chain security |
| CC6.1 | Logical access — provision/deprovision | User lifecycle | Entra ID + Workspace IAM + automation |
| CC6.2 | Authentication | MFA, conditional access | Entra ID Conditional Access |
| CC6.3 | Authorization | Least privilege, role-based | Fabric workspace roles + OneLake security |
| CC6.4 | Data classification | PII, sensitivity labels | Microsoft Purview sensitivity labels |
| CC6.5 | Encryption — at rest | Customer-managed keys | CMK Bicep module |
| CC6.6 | Encryption — in transit | TLS 1.2+ everywhere | Native to Fabric; verify Network Security |
| CC6.7 | Logging & monitoring | Audit logs retained | Log Analytics + Workspace Monitoring |
| CC6.8 | Vulnerability management | Patching, CVE response | Microsoft-managed (Fabric runtime) |
| CC7.1 | System operations | Change management, deployments | Change management doc + fabric-cicd |
| CC7.2 | Backups & recovery | RPO/RTO testing | Multi-region failover runbook |
| CC7.3 | Capacity planning | Resource forecasting | Capacity planning doc |
| CC7.4 | Disaster recovery | DR plan + testing | BCDR doc + failover runbook |
| CC7.5 | Incident response | IR plan + on-call | Incident response template + On-call handbook |
| CC8.1 | Change management | Code review, deployment gates | Change management + Branch protection |
| CC9.1 | Risk mitigation | Identified risks have controls | Risk register + this control matrix |
| CC9.2 | Vendor management | Third-party risk | Microsoft sub-processor list + DPAs |
| A1.1 | Availability — capacity | Resource adequacy | Fabric capacity sizing + autoscale |
| A1.2 | Availability — environmental | Power, HVAC | Microsoft-managed (Azure datacenters) |
| A1.3 | Availability — DR | Recovery testing | DR drills, failover runbook |
| PI1.1-PI1.5 | Processing Integrity — completeness, accuracy, timeliness | Data quality | Data contracts + DQ runbook |
| C1.1 | Confidentiality — designation | Sensitivity labels | Purview labels + OneLake Security |
| C1.2 | Confidentiality — disposal | Secure deletion | Delta VACUUM + GDPR doc |
| P1-P9 | Privacy | Notice, choice, collection, use, retention, access, disclosure, quality, monitoring | Privacy framework |
⚠️ Caveat: This mapping is a starting point. Your auditor will interpret criteria slightly differently. Walk through this matrix with your auditor in the planning phase — adjust before the examination period starts.
🏗️ Reference Architecture¶
flowchart TB
subgraph Identity["🆔 Identity & Access (CC5, CC6)"]
Entra[Entra ID]
WI[Workspace Identity]
CA[Conditional Access]
RBAC[Workspace RBAC]
end
subgraph Network["🌐 Network (CC5.2)"]
PE[Private Endpoints]
OAP[Outbound Access Protection]
IPF[IP Firewall]
end
subgraph Data["📦 Data Protection (CC6.4-6.6)"]
Labels[Sensitivity Labels]
CMK[Customer-Managed Keys]
OLS[OneLake Security]
TLS[TLS 1.2+]
end
subgraph Logging["📊 Logging & Monitoring (CC4, CC6.7)"]
WM[Workspace Monitoring]
LA[Log Analytics]
ALG[Action Groups]
Sentinel[Microsoft Sentinel]
end
subgraph CICD["🔄 Change Management (CC8)"]
Git[Git + Branch Protection]
FCICD[fabric-cicd]
DepPipes[Deployment Pipelines]
CAB[CAB Approval]
end
subgraph DR["🛡️ Resilience (CC7, A1)"]
Backup[OneLake Geo-Redundancy]
Failover[Multi-Region Failover]
DRT[DR Testing]
end
subgraph Audit["📜 Audit Evidence"]
AuditLog[(Immutable Audit Logs)]
ControlMatrix[(Control Matrix)]
Postmortems[(Postmortems)]
end
Entra --> RBAC
WI --> RBAC
CA --> Entra
PE --> Data
OAP --> Data
Labels --> Data
CMK --> Data
OLS --> Data
Data --> Logging
Identity --> Logging
Logging --> Sentinel
CICD --> Audit
DR --> Audit
Logging --> Audit ⚙️ Common Criteria (CC) Implementation¶
CC5.1 — Logical Access (Authentication & Authorization)¶
Control statement: "Logical access to data, applications, and infrastructure is restricted to authorized users."
Fabric Implementation:
| Requirement | Implementation |
|---|---|
| Service-to-service auth | Workspace Identity (GA 2026) — managed identity for Fabric workloads |
| User auth | Entra ID with MFA (Conditional Access — see zero-trust blueprint) |
| Service Principal lifecycle | Documented rotation, expiry alerts (auth failure runbook) |
| Privileged access | Just-in-time via Entra PIM; session recording |
| Access review | Quarterly attestation; auto-revocation on departure |
Evidence to collect: - Entra ID Conditional Access policy export (monthly snapshot) - Workspace IAM membership snapshots (weekly) - Access review attestation records (quarterly) - Privileged role activation logs (continuous)
// Audit-friendly query: list all privileged access activations in last 90 days
AuditLogs
| where TimeGenerated > ago(90d)
| where ActivityDisplayName == "Add member to role completed (PIM activation)"
| project TimeGenerated, InitiatedBy, TargetResources, Result
CC5.2 — Environment Hardening¶
Control statement: "Network and computing environments are protected via firewalls, encryption, and segmentation."
Fabric Implementation:
| Requirement | Implementation |
|---|---|
| Network segmentation | Private Endpoints (link to Bicep module landing in batch 5b) |
| Inbound restriction | Workspace IP firewall + VNet integration |
| Outbound restriction | OAP — Outbound Access Protection (link to feature) |
| Encryption at rest | CMK with customer-controlled rotation |
| Encryption in transit | TLS 1.2+ enforced (verified by Microsoft) |
| Vulnerability management | Microsoft-managed (runtime versions, patching) |
CC6.7 — Logging & Monitoring¶
Every Fabric item emits to: - Workspace Monitoring (KQL-native, 30-day default) - Log Analytics (Azure Monitor, 90-day default with tiered archive) - Microsoft Purview (audit, lineage) - Microsoft Sentinel (security analytics, optional)
Retention requirements for SOC 2: - Authentication events: minimum 12 months - Privileged access: minimum 18 months - Data access (if Confidentiality TSC): minimum 12 months - Configuration changes: minimum 12 months - Security alerts and incident records: minimum 18 months
⚠️ Gotcha: Default Log Analytics retention is 30 days. Configure at least 12 months for SOC 2 compliance. See
infra/modules/monitoring/log-analytics-workspace.bicep(Wave 1) —retentionInDays: 365minimum.
CC8.1 — Change Management¶
Control statement: "Changes are evaluated, approved, and tracked."
Fabric Implementation:
| Element | Implementation |
|---|---|
| Code review | GitHub branch protection requires 1+ reviewer |
| Approval | CAB process for major changes (change-management doc) |
| Deployment automation | fabric-cicd via GitHub Actions |
| Deployment gates | Deployment Pipelines stage promotion |
| Audit trail | Git commit history + Action runs + Deployment Pipeline logs |
| Rollback | Documented in tenant-migration runbook |
| Emergency change | Hotfix process with post-hoc CAB review |
Evidence to collect: - Quarterly: every production change with PR link, approver, deployment artifact, test evidence - Annual: rollback drill records
🔒 Security TSC Implementation¶
Already covered in CC1-CC9. The Security TSC is essentially the Common Criteria in SOC 2 vocabulary.
⚡ Availability TSC Implementation¶
A1.1 — Capacity Adequacy¶
| Requirement | Implementation |
|---|---|
| Capacity planning | Capacity planning doc |
| Autoscale | F-SKU scale-up via Azure Action Groups + Logic App |
| Headroom monitoring | SLO/SLI doc — capacity saturation SLO |
| Throttling response | Capacity throttling runbook |
Evidence: Monthly capacity utilization reports + scaling event logs.
A1.2 — Environmental Controls¶
Microsoft-managed via Azure data centers. Auditor will accept Microsoft's SOC 2 (subservice organization).
A1.3 — DR Testing¶
| Requirement | Implementation |
|---|---|
| DR plan documented | BCDR doc |
| DR runbook | Multi-region failover |
| Annual DR drill | Quarterly recommended; minimum annual |
| RTO/RPO targets | Documented per workload |
| Drill evidence | Drill report + post-drill action items |
🧩 Processing Integrity TSC Implementation¶
| Criterion | Implementation |
|---|---|
| PI1.1 — Inputs are complete | Data contracts at producer boundary (data-contracts) |
| PI1.2 — Inputs are accurate | Schema validation at Bronze ingestion |
| PI1.3 — Processing is timely | SLO on freshness (slo-sli-fabric) |
| PI1.4 — Processing is correct | Great Expectations suites + data quality runbook |
| PI1.5 — Outputs are correct | End-to-end validation in CI; quarterly attestation |
Evidence: GE checkpoint pass rates per quarter; failed-check incident records; freshness SLO reports.
🤐 Confidentiality TSC Implementation¶
| Criterion | Implementation |
|---|---|
| C1.1 — Confidential data identified | Sensitivity labels via Purview |
| C1.2 — Confidential data protected | OneLake Security with row/column filters; CMK |
| C1.3 — Confidential data disposed | Delta VACUUM + retention policies; GDPR deletion |
Evidence: Quarterly sensitivity-label audit; access logs filtered to Confidential-tagged tables; deletion attestation per DSAR.
👤 Privacy TSC Implementation¶
If choosing Privacy TSC, also align with GDPR and CCPA.
| Criterion | Implementation |
|---|---|
| P1 — Notice provided | Privacy notice published, version-controlled |
| P2 — Choice & consent | Consent capture (e.g., loyalty program opt-in for casino) |
| P3 — Collection limited | Schema review: only collect what's needed |
| P4 — Use limited | Purpose-binding; access reviews |
| P5 — Retention defined | Retention policies enforced via Delta + lifecycle rules |
| P6 — Subject access | DSAR runbook (batch 5b template) |
| P7 — Disclosure controlled | Sub-processor list maintained |
| P8 — Quality | Data quality framework (link to data contracts) |
| P9 — Monitoring | Privacy incident response (subset of incident response template) |
📊 Evidence Collection¶
The most-undercounted SOC 2 work is continuous evidence collection across the 12-month examination period.
Evidence Categories¶
| Category | Examples | Source | Cadence |
|---|---|---|---|
| Configuration | Bicep templates, IAM JSON | Git | Continuous (commit) |
| Operations | Runbook executions, postmortems | docs/postmortems/ | Per incident |
| Access | Privileged role activations | Entra audit logs | Continuous |
| Change | PR approvals, deployments | GitHub + Actions | Continuous |
| Monitoring | Alert firings, SLO compliance | Workspace Monitoring | Continuous |
| Resilience | DR drill records | Internal docs | Quarterly |
| Vulnerability | Pen test reports, vuln scans | Vendor reports | Annual + ad-hoc |
| Training | Security awareness completion | LMS export | Quarterly |
Continuous Evidence Pattern¶
Every CC criterion should have an automated query that produces evidence on demand. Store these in a control library and run them as a scheduled report.
# Example: CC6.1 — Privileged access monthly report
import datetime
from pathlib import Path
def generate_cc6_1_evidence(month: str, output_dir: Path) -> Path:
"""Generate CC6.1 monthly evidence: privileged role activations."""
kql = """
AuditLogs
| where TimeGenerated >= startofmonth(now())
| where TimeGenerated < startofmonth(now()) + 30d
| where ActivityDisplayName has "PIM activation"
| project TimeGenerated, InitiatedBy.user.userPrincipalName,
TargetResources, Result
| order by TimeGenerated asc
"""
df = run_log_analytics_query(kql)
out = output_dir / f"CC6.1-{month}-privileged-access.csv"
df.to_csv(out, index=False)
return out
Evidence Storage¶
- Immutable storage — Azure Blob with immutability policy or Storage Account WORM
- Retention — minimum 12 months past examination period (so 24 months total for the previous Type II)
- Access — auditor read-only access via short-lived SAS or Entra group
See audit trail immutability doc for tamper-evident workflows.
🗂️ Control Matrix Template¶
The deliverable to your auditor — a control matrix mapping each TSC criterion to control description, control owner, evidence location, test frequency, and exceptions.
A copy-paste template is provided in docs/compliance-templates/soc2-control-matrix.md (landing in batch 5b).
📅 Examination Period Preparation¶
12 Months Before Examination¶
- Engage CPA firm; agree on scope (which TSCs)
- Run readiness assessment (gap analysis)
- Remediate gaps
- Begin continuous evidence collection
- Train team on documentation discipline
Quarterly During Examination¶
- Quarterly evidence review (does each control have evidence?)
- Quarterly access review (privileged + standard)
- Quarterly DR drill (or annual minimum)
- Quarterly capacity review
30 Days Before Audit Field Work¶
- Compile control matrix
- Stage all evidence in auditor-accessible location
- Schedule auditor walkthroughs
- Brief leadership on likely findings
During Audit (typically 2-4 weeks)¶
- Daily auditor sync
- Respond to PBC (provided-by-client) requests within SLA
- Escalate disagreements via management response
Post-Audit¶
- Receive draft report
- Provide management response to any exceptions
- Plan remediation for next year's report
- Distribute report under NDA to customers
🚫 Anti-Patterns¶
| Anti-Pattern | Why It Hurts | What to Do Instead |
|---|---|---|
| "We'll start collecting evidence next month" | You can't backfill 12 months of operating effectiveness | Start the day Type II scope is decided |
| Manual evidence in folders / wiki | Tampering risk; auditor distrust | Immutable storage with audit trail |
| Auditor-told-me changes mid-examination | Voids the period; restart the clock | Lock controls before period start |
| No exception register | Auditor finds them anyway, with worse phrasing | Document deviations + root cause + remediation |
| Treating SOC 2 as one-time project | Annual renewal; it's a continuous practice | Embed into regular operations |
| Letting controls drift after report | Type II next year fails | Continuous monitoring + ownership |
| Storing PII in dev workspaces | Auditor will find it; immediate finding | Synthetic data only in dev; tag enforcement |
| No segregation of duties for production deploy | CC8 finding | Branch protection + 2-approver rule |
| Assuming Microsoft handles everything | Subservice org boundary requires customer controls too | Read Microsoft's SOC 2 carve-out section |
| Stale runbooks | Auditor tests for runbook freshness | Quarterly review with named owner |
📋 Production Readiness Checklist¶
Before declaring "SOC 2 Type II ready":
- CPA firm engaged, scope documented (TSCs selected)
- Control matrix completed and reviewed with auditor
- Every CC criterion has a named control owner
- Every control has documented evidence query/path
- Evidence stored in immutable, audit-accessible storage
- Retention configured ≥ 12 months for all SOC 2-relevant logs
- CMK enabled and rotation policy documented
- Private Endpoints + Workspace IP firewall configured
- OAP enabled where applicable
- Workspace Identity used for service-to-service auth
- Conditional Access requires MFA + device compliance
- Quarterly access review process running
- Quarterly DR drill scheduled and run at least once
- All runbooks current (reviewed in last 90 days)
- Postmortem template + register active
- Risk register maintained
- Sub-processor list and DPAs documented
- Privacy notice published (if Privacy TSC selected)
- Vendor management process documented (CC9.2)
- Penetration test scheduled (annual minimum)
- Security awareness training tracked
- Incident response runbook tested via tabletop
- Hotfix process documented with post-hoc CAB
- Change-management RFC template adopted
- All deployments traceable to approved RFC
- Control matrix walkthrough scheduled with auditor
📚 References¶
AICPA & Industry Standards¶
Microsoft Resources¶
- Microsoft Trust Center — SOC 2
- Microsoft Fabric Security Documentation
- OneLake Security
- Workspace Identity
Related Wave 5 Docs (this Wave)¶
- ISO 27001 Mapping
- GDPR Right to Deletion
- CCPA Privacy Rights
- STRIDE Threat Model
- Zero-Trust Blueprint
- Data Exfiltration Prevention
- Supply Chain Security
- Audit Trail Immutability
Related Operational Docs (Wave 1)¶
- Incident Response Template
- Multi-Region Failover Runbook
- Tenant Migration Runbook
- SLO/SLI for Fabric
- Change Management
- Observability Stack
Related Existing Docs¶
- Data Governance Deep Dive
- Identity & RBAC Patterns
- Network Security
- Customer-Managed Keys
- Outbound Access Protection
Compliance Templates¶
- SOC 2 Control Matrix Template (Wave 5 batch 5b)
- DSAR Runbook Template (Wave 5 batch 5b)