Azure Compliance
Translate policy and regulatory requirements into implementable Azure controls and audit evidence.
Map frameworks (ISO 27001, SOC2, HIPAA, PCI-DSS) to Azure services and configurations.
Use This Skill When
- The user needs compliance alignment (ISO, SOC2, HIPAA, PCI-DSS, or custom)
- The user asks for policy enforcement, audit logging, or data protection controls
- The user needs a remediation plan for compliance gaps
- The user is preparing for a security audit or certification
Context: Compliance Maturity
Immature: No compliance framework, ad hoc security, no audit trail
Developing: Framework chosen, basic controls, manual evidence collection
Managed: Controls automated with Azure Policy, audit logging centralized → Target
Optimized: Continuous compliance monitoring, real-time dashboards, attestation automated
Required Inputs
- Applicable frameworks: ISO 27001, SOC2 Type II, HIPAA, PCI-DSS, or custom?
- Data classification: Public, internal, confidential, secret (PII, PHI, payment data)?
- Current architecture: Existing controls, gaps identified?
- Audit scope: What resources/processes in scope?
- Evidence requirements: Reports, logs, attestations needed for certification?
- Risk tolerance: What's acceptable? What's not?
Decision Tree
Which compliance framework applies?
├─ ISO 27001 → Identity (4.6), Access (6.2, 6.6), Encryption (10.2), Audit (12.4)
├─ SOC2 Type II → Trust Service Criteria: Security, Availability, Processing Integrity, Confidentiality, Privacy
├─ HIPAA → Technical safeguards: Access, encryption, audit, integrity
├─ PCI-DSS → Network, access, encryption, logging, incident response (for payment processing)
└─ Custom → Map control names to Azure services
Is data sensitive (PII, PHI, payment)?
├─ Yes → Encryption (at-rest + in-transit), MFA, audit logging, DLP
└─ No → Basic controls sufficient
Do you process across regions/countries?
├─ Yes → Data residency compliance (GDPR, CCPA, regional data localization)
└─ No → Single-region controls
Do you process continuously or in batches?
├─ Continuous → Real-time monitoring, alerts, anomaly detection
└─ Batch → Periodic reviews, manual attestation
Who audits you (internal, external, customer)?
├─ Internal only → Simplified documentation
├─ External audit → Formal evidence packages, reports
└─ Customer audit → On-demand access, dashboards
Workflow
Phase 1: Map Control Objectives
ISO 27001 Example Controls:
Control 6.2: User registration and access rights
├─ Objective: Only authorized users access systems
├─ Azure Implementation:
│ ├─ Entra ID for authentication
│ ├─ RBAC for authorization
│ ├─ MFA for privileged access (PIM)
│ └─ Access reviews quarterly
├─ Evidence: Role assignments list, access review reports
Control 10.2: Monitoring and review of access records
├─ Objective: Detect unauthorized access attempts
├─ Azure Implementation:
│ ├─ Activity logs → Log Analytics
│ ├─ Alerts on failed logins (5+ failures = suspicious)
│ ├─ Alerts on privilege escalation
│ └─ Monthly log review
├─ Evidence: Alert configuration, log samples, review sign-offs
Control 10.7: Retention of log information
├─ Objective: Maintain audit trail for investigation
├─ Azure Implementation:
│ ├─ Logs stored for 1+ year (retention policy)
│ ├─ Archive to storage for long-term (7+ years)
│ └─ Access controlled (only security team)
├─ Evidence: Retention policy screenshot, archive storage exists
PCI-DSS Example Controls:
Requirement 2: Default security parameters
├─ Objective: Change default passwords, disable unnecessary services
├─ Azure Implementation:
│ ├─ No default storage account keys in use
│ ├─ Change password on deployment
│ ├─ Disable basic auth (use OAuth/OIDC)
│ └─ Disable unnecessary ports/protocols
├─ Evidence: Configuration review, disabled services list
Requirement 6: Develop and maintain secure applications
├─ Objective: No hardcoded passwords, input validation, error handling
├─ Azure Implementation:
│ ├─ Code scanning (DevSecOps)
│ ├─ Dependency scanning (vulnerabilities)
│ ├─ SAST/DAST testing
│ └─ Security gate in CI/CD
├─ Evidence: Scan reports, remediation history
Phase 2: Implement Azure Governance Controls
Enable Azure Policy (enforce controls automatically):
# Require encryption on storage accounts
az policy assignment create \
--name "Require-Storage-Encryption" \
--display-name "Require Storage Encryption" \
--policy "fc6e5a0a-e4c7-4f7a-b3f7-8b7e1a9b5c3d" \
--scope "/subscriptions/$SUBID" \
--enforcement-mode "Default" # or "DoNotEnforce" for audit-only
Common compliance policies:
# ISO 27001 / SOC2 policies
├─ Require encryption in transit (HTTPS only)
├─ Require encryption at rest (Storage encryption)
├─ Require MFA for Azure Admin
├─ Require NSGs on all subnets
├─ Require private endpoints for databases
├─ Require activity log retention (90+ days)
├─ Require Defender on compute/storage/databases
└─ Audit only: Allowed resource types
# PCI-DSS specific
├─ Network isolation (NSGs, firewalls)
├─ Encryption for payment data
├─ Access logging and monitoring
├─ Vulnerability scanning
├─ Incident response planning
└─ Annual security assessments
# HIPAA specific
├─ Encryption (at-rest + in-transit)
├─ Access controls and audit logging
├─ Backup and disaster recovery
├─ Data integrity controls (no tampering)
├─ Encryption of portable media
└─ Business associate agreements (BAA)
Assign policies at management group scope (cascades to all subscriptions):
az policy assignment create \
--name "Org-Compliance-Policy-Set" \
--display-name "Organization Compliance Controls" \
--policy-set-definition "1f3afb9d-9a04-4a29-a705-cda07f4f3ad0" \
--scope "/providers/Microsoft.Management/managementGroups/ContosoMG" \
--location "eastus" \
--enforce
Phase 3: Configure Audit Logging & Monitoring
Centralize audit logs:
# Activity logs → Log Analytics workspace
az monitor diagnostic-settings create \
--name "audit-to-law" \
--resource "/subscriptions/$SUBID" \
--workspace "/subscriptions/$SUBID/resourceGroups/$RG/providers/Microsoft.OperationalInsights/workspaces/$LAW" \
--logs '[{"category":"Administrative","enabled":true},{"category":"Security","enabled":true}]'
Configure alerts for suspicious activity:
# Alert: 5+ failed logins in 5 minutes (brute force attempt)
az monitor metrics alert create \
--name "brute-force-attempt" \
--resource-group $RG \
--scopes "/subscriptions/$SUBID" \
--condition "total SignInFailures > 5" \
--window-size "PT5M" \
--evaluation-frequency "PT1M" \
--actions email_action "admin@contoso.com"
Audit logging queries (KQL):
// Administrative changes (who changed what, when)
AzureActivity
| where OperationName in ("Create", "Update", "Delete")
| summarize count() by Caller, OperationName, bin(TimeGenerated, 1h)
// Failed authentication attempts
SigninLogs
| where Status.errorCode != "0"
| summarize count() by UserPrincipalName, ClientAppUsed
// Privilege escalation (owner role granted)
AzureActivity
| where OperationName == "Create role assignment"
| where Properties contains "Owner"
| project TimeGenerated, Caller, SubscriptionId, Properties
Phase 4: Data Protection & Encryption
Enable encryption at rest:
# Storage account: Microsoft-managed keys (default) or CMK (better)
az storage account update \
--resource-group $RG \
--name "st${app}${env}" \
--encryption-key-name "storage-key" \
--encryption-key-vault "/subscriptions/$SUBID/resourceGroups/$RG/providers/Microsoft.KeyVault/vaults/$KV"
# Database: Transparent Data Encryption (TDE)
az sql server update \
--resource-group $RG \
--name $SQL_SERVER \
--encryption-key-id "/subscriptions/$SUBID/resourceGroups/$RG/providers/Microsoft.KeyVault/vaults/$KV/keys/$KEY"
Enable encryption in transit:
# HTTPS only (no HTTP)
az storage account update \
--resource-group $RG \
--name "st${app}${env}" \
--https-only
# SQL Server: Enforce SSL
az sql server firewall-rule create \
--resource-group $RG \
--server $SQL_SERVER \
--name "AllowAzureIPs" \
--start-ip-address 0.0.0.0 \
--end-ip-address 0.0.0.0 # Azure IPs only
Key Vault for secrets (no hardcoding):
# Store connection strings, API keys, passwords in Key Vault
az keyvault secret set \
--vault-name $KV \
--name "sql-connection-string" \
--value "Server=...;User Id=...;Password=..."
# Access from app via managed identity
# No password in code, config, or logs
Phase 5: Access & Identity Controls
Multi-factor authentication (for humans):
# Require MFA for all admin users
az ad user update \
--user-principal-name admin@contoso.com \
--strong-authentication-requirement true
Privileged access management (PIM):
# Owner role requires approval, 4-hour max, MFA
az rest --method post \
--uri "https://graph.microsoft.com/v1.0/privilegedIdentityManagement/roleAssignments" \
--body '{
"roleDefinitionId":"'$OWNER_ROLE_ID'",
"principalId":"'$ADMIN_GROUP_ID'",
"type":"eligible",
"requestorId":"'$USER_ID'"
}'
Least privilege (RBAC):
# Avoid: Contributor (too broad)
# Use specific roles:
├─ Storage Blob Data Reader (read-only)
├─ Key Vault Secrets User (get secrets only)
├─ SQL DB Contributor (database, not server)
└─ Owner: Reserved for emergency only, PIM-eligible
Phase 6: Compliance Evidence & Audit Readiness
Generate compliance report:
# Azure Advisor: Security recommendations
az advisor recommendation list --category Security
# Defender for Cloud: Secure Score
az security secure-score show
# Policy Compliance: Non-compliant resources
az policy state list \
--filter "isCompliant eq false" \
--group-by "policyDefinitionId" \
--apply "groupby((properties/policyDefinitionGroupNames/any()), count() as count)"
Audit readiness checklist:
✓ Policies defined and enforced
✓ Audit logs centralized and retained 1+ year
✓ Alerts configured for sensitive operations
✓ Encryption (at-rest, in-transit) enabled
✓ Access controls (RBAC, MFA, PIM) in place
✓ Vulnerability scans run regularly
✓ Backups tested and verified
✓ Incident response plan documented and practiced
✓ Security training completed (staff)
✓ Business Associate Agreements (if HIPAA)
Maintain evidence artifacts:
├─ Policy assignments and exemptions
├─ Role assignments (human + workload)
├─ Audit log exports (monthly)
├─ Secure Score trend (monthly)
├─ Vulnerability scan reports
├─ Access review attestations
├─ Incident response logs
└─ Security training records
Output Contract
Control Mapping Document
- Framework control → Azure implementation
- Responsibility: Microsoft (shared) vs. Customer (your responsibility)
Gap Analysis
- Current state: Which controls in place?
- Target state: Which controls needed?
- Severity: Blocking (critical), high, medium, low
Remediation Plan (prioritized)
- Priority 1 (blocking): Fix before production
- Priority 2 (high): Fix within 30 days
- Priority 3 (medium): Fix within 90 days
- Priority 4 (low): Fix as opportunity allows
Audit Evidence Checklist
- Policy configuration screenshots
- Logs and queries proving monitoring
- Access review sign-offs
- Encryption certificates or Key Vault references
- Incident response runbook
Compliance Monitoring Dashboard
- Policy compliance % (target: 100%)
- Resources non-compliant by policy
- Alert trends (suspicious activity)
- Secure Score trend
Guardrails
- Do not claim certification by default: Only claim compliance when formally audited and certified.
- Separate shared controls from customer controls: Microsoft handles infrastructure; you handle application + data.
- Enable audit logging for all services: If you can't prove it happened, assume it didn't (audit requirement).
- Encrypt sensitive data: At-rest (CMK) and in-transit (TLS 1.2+) for regulated workloads.
- Require MFA for humans: Eliminates 99% of credential-based attacks.
- Review access quarterly: Remove unused accounts, downgrade overpermissioned roles.
- Test incident response: Don't wait for a real incident; practice quarterly.
- Document assumptions: Mark which controls are inherited from Azure vs. implemented by you.
1---2name: azure-compliance3description: Map Azure architectures and operations to security and compliance controls. Use this skill when users ask for governance, policy enforcement, audit readiness, or regulatory alignment. Covers ISO, SOC2, HIPAA, PCI-DSS, and custom compliance frameworks.4---56# Azure Compliance78Translate policy and regulatory requirements into implementable Azure controls and audit evidence.9Map frameworks (ISO 27001, SOC2, HIPAA, PCI-DSS) to Azure services and configurations.1011## Use This Skill When1213- The user needs compliance alignment (ISO, SOC2, HIPAA, PCI-DSS, or custom)14- The user asks for policy enforcement, audit logging, or data protection controls15- The user needs a remediation plan for compliance gaps16- The user is preparing for a security audit or certification1718## Context: Compliance Maturity1920**Immature**: No compliance framework, ad hoc security, no audit trail 21**Developing**: Framework chosen, basic controls, manual evidence collection 22**Managed**: Controls automated with Azure Policy, audit logging centralized → **Target** 23**Optimized**: Continuous compliance monitoring, real-time dashboards, attestation automated2425## Required Inputs2627- **Applicable frameworks**: ISO 27001, SOC2 Type II, HIPAA, PCI-DSS, or custom?28- **Data classification**: Public, internal, confidential, secret (PII, PHI, payment data)?29- **Current architecture**: Existing controls, gaps identified?30- **Audit scope**: What resources/processes in scope?31- **Evidence requirements**: Reports, logs, attestations needed for certification?32- **Risk tolerance**: What's acceptable? What's not?3334## Decision Tree3536```37Which compliance framework applies?38├─ ISO 27001 → Identity (4.6), Access (6.2, 6.6), Encryption (10.2), Audit (12.4)39├─ SOC2 Type II → Trust Service Criteria: Security, Availability, Processing Integrity, Confidentiality, Privacy40├─ HIPAA → Technical safeguards: Access, encryption, audit, integrity41├─ PCI-DSS → Network, access, encryption, logging, incident response (for payment processing)42└─ Custom → Map control names to Azure services4344Is data sensitive (PII, PHI, payment)?45├─ Yes → Encryption (at-rest + in-transit), MFA, audit logging, DLP46└─ No → Basic controls sufficient4748Do you process across regions/countries?49├─ Yes → Data residency compliance (GDPR, CCPA, regional data localization)50└─ No → Single-region controls5152Do you process continuously or in batches?53├─ Continuous → Real-time monitoring, alerts, anomaly detection54└─ Batch → Periodic reviews, manual attestation5556Who audits you (internal, external, customer)?57├─ Internal only → Simplified documentation58├─ External audit → Formal evidence packages, reports59└─ Customer audit → On-demand access, dashboards60```6162## Workflow6364### Phase 1: Map Control Objectives6566**ISO 27001 Example Controls:**6768```69Control 6.2: User registration and access rights70├─ Objective: Only authorized users access systems71├─ Azure Implementation:72│ ├─ Entra ID for authentication73│ ├─ RBAC for authorization74│ ├─ MFA for privileged access (PIM)75│ └─ Access reviews quarterly76├─ Evidence: Role assignments list, access review reports7778Control 10.2: Monitoring and review of access records79├─ Objective: Detect unauthorized access attempts80├─ Azure Implementation:81│ ├─ Activity logs → Log Analytics82│ ├─ Alerts on failed logins (5+ failures = suspicious)83│ ├─ Alerts on privilege escalation84│ └─ Monthly log review85├─ Evidence: Alert configuration, log samples, review sign-offs8687Control 10.7: Retention of log information88├─ Objective: Maintain audit trail for investigation89├─ Azure Implementation:90│ ├─ Logs stored for 1+ year (retention policy)91│ ├─ Archive to storage for long-term (7+ years)92│ └─ Access controlled (only security team)93├─ Evidence: Retention policy screenshot, archive storage exists94```9596**PCI-DSS Example Controls:**9798```99Requirement 2: Default security parameters100├─ Objective: Change default passwords, disable unnecessary services101├─ Azure Implementation:102│ ├─ No default storage account keys in use103│ ├─ Change password on deployment104│ ├─ Disable basic auth (use OAuth/OIDC)105│ └─ Disable unnecessary ports/protocols106├─ Evidence: Configuration review, disabled services list107108Requirement 6: Develop and maintain secure applications109├─ Objective: No hardcoded passwords, input validation, error handling110├─ Azure Implementation:111│ ├─ Code scanning (DevSecOps)112│ ├─ Dependency scanning (vulnerabilities)113│ ├─ SAST/DAST testing114│ └─ Security gate in CI/CD115├─ Evidence: Scan reports, remediation history116```117118### Phase 2: Implement Azure Governance Controls1191201. **Enable Azure Policy** (enforce controls automatically):121 ```bash122 # Require encryption on storage accounts123 az policy assignment create \124 --name "Require-Storage-Encryption" \125 --display-name "Require Storage Encryption" \126 --policy "fc6e5a0a-e4c7-4f7a-b3f7-8b7e1a9b5c3d" \127 --scope "/subscriptions/$SUBID" \128 --enforcement-mode "Default" # or "DoNotEnforce" for audit-only129 ```1301312. **Common compliance policies**:132 ```bash133 # ISO 27001 / SOC2 policies134 ├─ Require encryption in transit (HTTPS only)135 ├─ Require encryption at rest (Storage encryption)136 ├─ Require MFA for Azure Admin137 ├─ Require NSGs on all subnets138 ├─ Require private endpoints for databases139 ├─ Require activity log retention (90+ days)140 ├─ Require Defender on compute/storage/databases141 └─ Audit only: Allowed resource types142 ```143144 ```bash145 # PCI-DSS specific146 ├─ Network isolation (NSGs, firewalls)147 ├─ Encryption for payment data148 ├─ Access logging and monitoring149 ├─ Vulnerability scanning150 ├─ Incident response planning151 └─ Annual security assessments152 ```153154 ```bash155 # HIPAA specific156 ├─ Encryption (at-rest + in-transit)157 ├─ Access controls and audit logging158 ├─ Backup and disaster recovery159 ├─ Data integrity controls (no tampering)160 ├─ Encryption of portable media161 └─ Business associate agreements (BAA)162 ```1631643. **Assign policies at management group scope** (cascades to all subscriptions):165 ```bash166 az policy assignment create \167 --name "Org-Compliance-Policy-Set" \168 --display-name "Organization Compliance Controls" \169 --policy-set-definition "1f3afb9d-9a04-4a29-a705-cda07f4f3ad0" \170 --scope "/providers/Microsoft.Management/managementGroups/ContosoMG" \171 --location "eastus" \172 --enforce173 ```174175### Phase 3: Configure Audit Logging & Monitoring1761771. **Centralize audit logs**:178 ```bash179 # Activity logs → Log Analytics workspace180 az monitor diagnostic-settings create \181 --name "audit-to-law" \182 --resource "/subscriptions/$SUBID" \183 --workspace "/subscriptions/$SUBID/resourceGroups/$RG/providers/Microsoft.OperationalInsights/workspaces/$LAW" \184 --logs '[{"category":"Administrative","enabled":true},{"category":"Security","enabled":true}]'185 ```1861872. **Configure alerts for suspicious activity**:188 ```bash189 # Alert: 5+ failed logins in 5 minutes (brute force attempt)190 az monitor metrics alert create \191 --name "brute-force-attempt" \192 --resource-group $RG \193 --scopes "/subscriptions/$SUBID" \194 --condition "total SignInFailures > 5" \195 --window-size "PT5M" \196 --evaluation-frequency "PT1M" \197 --actions email_action "admin@contoso.com"198 ```1992003. **Audit logging queries** (KQL):201 ```kql202 // Administrative changes (who changed what, when)203 AzureActivity204 | where OperationName in ("Create", "Update", "Delete")205 | summarize count() by Caller, OperationName, bin(TimeGenerated, 1h)206 207 // Failed authentication attempts208 SigninLogs209 | where Status.errorCode != "0"210 | summarize count() by UserPrincipalName, ClientAppUsed211 212 // Privilege escalation (owner role granted)213 AzureActivity214 | where OperationName == "Create role assignment"215 | where Properties contains "Owner"216 | project TimeGenerated, Caller, SubscriptionId, Properties217 ```218219### Phase 4: Data Protection & Encryption2202211. **Enable encryption at rest**:222 ```bash223 # Storage account: Microsoft-managed keys (default) or CMK (better)224 az storage account update \225 --resource-group $RG \226 --name "st${app}${env}" \227 --encryption-key-name "storage-key" \228 --encryption-key-vault "/subscriptions/$SUBID/resourceGroups/$RG/providers/Microsoft.KeyVault/vaults/$KV"229 230 # Database: Transparent Data Encryption (TDE)231 az sql server update \232 --resource-group $RG \233 --name $SQL_SERVER \234 --encryption-key-id "/subscriptions/$SUBID/resourceGroups/$RG/providers/Microsoft.KeyVault/vaults/$KV/keys/$KEY"235 ```2362372. **Enable encryption in transit**:238 ```bash239 # HTTPS only (no HTTP)240 az storage account update \241 --resource-group $RG \242 --name "st${app}${env}" \243 --https-only244 245 # SQL Server: Enforce SSL246 az sql server firewall-rule create \247 --resource-group $RG \248 --server $SQL_SERVER \249 --name "AllowAzureIPs" \250 --start-ip-address 0.0.0.0 \251 --end-ip-address 0.0.0.0 # Azure IPs only252 ```2532543. **Key Vault for secrets** (no hardcoding):255 ```bash256 # Store connection strings, API keys, passwords in Key Vault257 az keyvault secret set \258 --vault-name $KV \259 --name "sql-connection-string" \260 --value "Server=...;User Id=...;Password=..."261 262 # Access from app via managed identity263 # No password in code, config, or logs264 ```265266### Phase 5: Access & Identity Controls2672681. **Multi-factor authentication** (for humans):269 ```bash270 # Require MFA for all admin users271 az ad user update \272 --user-principal-name admin@contoso.com \273 --strong-authentication-requirement true274 ```2752762. **Privileged access management** (PIM):277 ```bash278 # Owner role requires approval, 4-hour max, MFA279 az rest --method post \280 --uri "https://graph.microsoft.com/v1.0/privilegedIdentityManagement/roleAssignments" \281 --body '{282 "roleDefinitionId":"'$OWNER_ROLE_ID'",283 "principalId":"'$ADMIN_GROUP_ID'",284 "type":"eligible",285 "requestorId":"'$USER_ID'"286 }'287 ```2882893. **Least privilege (RBAC)**:290 ```bash291 # Avoid: Contributor (too broad)292 # Use specific roles: 293 ├─ Storage Blob Data Reader (read-only)294 ├─ Key Vault Secrets User (get secrets only)295 ├─ SQL DB Contributor (database, not server)296 └─ Owner: Reserved for emergency only, PIM-eligible297 ```298299### Phase 6: Compliance Evidence & Audit Readiness3003011. **Generate compliance report**:302 ```bash303 # Azure Advisor: Security recommendations304 az advisor recommendation list --category Security305 306 # Defender for Cloud: Secure Score307 az security secure-score show308 309 # Policy Compliance: Non-compliant resources310 az policy state list \311 --filter "isCompliant eq false" \312 --group-by "policyDefinitionId" \313 --apply "groupby((properties/policyDefinitionGroupNames/any()), count() as count)"314 ```3153162. **Audit readiness checklist**:317 ```318 ✓ Policies defined and enforced319 ✓ Audit logs centralized and retained 1+ year320 ✓ Alerts configured for sensitive operations321 ✓ Encryption (at-rest, in-transit) enabled322 ✓ Access controls (RBAC, MFA, PIM) in place323 ✓ Vulnerability scans run regularly324 ✓ Backups tested and verified325 ✓ Incident response plan documented and practiced326 ✓ Security training completed (staff)327 ✓ Business Associate Agreements (if HIPAA)328 ```3293303. **Maintain evidence artifacts**:331 ```332 ├─ Policy assignments and exemptions333 ├─ Role assignments (human + workload)334 ├─ Audit log exports (monthly)335 ├─ Secure Score trend (monthly)336 ├─ Vulnerability scan reports337 ├─ Access review attestations338 ├─ Incident response logs339 └─ Security training records340 ```341342## Output Contract3433441. **Control Mapping Document**345 - Framework control → Azure implementation346 - Responsibility: Microsoft (shared) vs. Customer (your responsibility)3473482. **Gap Analysis**349 - Current state: Which controls in place?350 - Target state: Which controls needed?351 - Severity: Blocking (critical), high, medium, low3523533. **Remediation Plan** (prioritized)354 - Priority 1 (blocking): Fix before production355 - Priority 2 (high): Fix within 30 days356 - Priority 3 (medium): Fix within 90 days357 - Priority 4 (low): Fix as opportunity allows3583594. **Audit Evidence Checklist**360 - Policy configuration screenshots361 - Logs and queries proving monitoring362 - Access review sign-offs363 - Encryption certificates or Key Vault references364 - Incident response runbook3653665. **Compliance Monitoring Dashboard**367 - Policy compliance % (target: 100%)368 - Resources non-compliant by policy369 - Alert trends (suspicious activity)370 - Secure Score trend371372## Guardrails373374- **Do not claim certification by default**: Only claim compliance when formally audited and certified.375- **Separate shared controls from customer controls**: Microsoft handles infrastructure; you handle application + data.376- **Enable audit logging for all services**: If you can't prove it happened, assume it didn't (audit requirement).377- **Encrypt sensitive data**: At-rest (CMK) and in-transit (TLS 1.2+) for regulated workloads.378- **Require MFA for humans**: Eliminates 99% of credential-based attacks.379- **Review access quarterly**: Remove unused accounts, downgrade overpermissioned roles.380- **Test incident response**: Don't wait for a real incident; practice quarterly.381- **Document assumptions**: Mark which controls are inherited from Azure vs. implemented by you.