Beyond Compliance Theater: Building Security Programs That Survive the Auditor Leaving
SOC2 certification has become table stakes in enterprise software sales. But somewhere between the framework's good intentions and production reality, something breaks down. This post examines the gap between compliance artifacts and actual security posture and what AWS-native controls can do that an audit cannot.

The problem with process-based assurance SOC2 measures whether you have a process, not whether the process works. You can document a terrible control consistently and pass. You can run an excellent informal practice and fail. The result in production: MFA "enforced" through a policy document nobody enforces. Access reviews where managers approve 200 entitlements in three minutes. Encryption "in transit and at rest" that stops at the load balancer. Vulnerability management programs that scan but never patch. The auditor signs off. The Type II report goes in the sales deck. The shared admin credential stays in a Slack DM from 2021. What AWS-native controls can enforce that documentation cannot IAM blast radius limits Policy documents describe intended access. IAM permission boundaries and Service Control Policies (SCPs) enforce it.
Recommendation: Use SCPs at the AWS Organizations level to hard-cap what any IAM entity in an account can do — regardless of what individual policies grant. A developer IAM role should never be able to attach IAM policies, modify CloudTrail, or access production resources from a dev account, even if an administrator accidentally grants it.
json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Example SCP: Prevent IAM privilege escalation
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyIAMPrivilegeEscalation",
"Effect": "Deny",
"Action": [
"iam:CreatePolicyVersion",
"iam:SetDefaultPolicyVersion",
"iam:PassRole",
"iam:AttachUserPolicy",
"iam:PutUserPolicy"
],
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:PrincipalTag/Role": "SecurityAdmin"
}
}
}
]
}Short-lived credentials everywhere
Long-lived access keys are a compliance checkbox item. Replacing them is an architectural change.
Recommendation: Move every workload to IAM roles with temporary credentials via STS. For humans: AWS IAM Identity Center (SSO) with session durations under 8 hours. For CI/CD: OIDC federation from GitHub Actions or GitLab to IAM roles — no static keys stored anywhere.
AWS services: IAM Identity Center, AWS STS AssumeRoleWithWebIdentity, IAM Roles Anywhere (for on-prem workloads)
Access reviews that are harder to rubber-stamp
A review where a manager approves 200 entitlements in three minutes is not a review.
Recommendation: Use IAM Access Analyzer to surface unused permissions and external resource access. Feed findings into your access review workflow so reviewers see concrete evidence — "this role hasn't used EC2:DescribeInstances in 90 days" — rather than a flat list of permissions to approve.
AWS services: IAM Access Analyzer, AWS CloudTrail Lake (for usage analysis), Amazon Detective
Encryption that actually covers the attack surface
"Encryption in transit and at rest" that stops at the load balancer is not end-to-end encryption. Data processed in plaintext inside the VPC is still a risk.
Recommendation:
- TLS termination should happen at the application layer, not just the ALB
- Use AWS KMS with customer-managed keys (CMKs) for data at rest — and audit who can call
kms:Decrypt - For sensitive workloads, evaluate AWS Nitro Enclaves for in-use encryption
The diagnostic tests
Run these against your environment before your next audit preparation cycle:
| Test | AWS Tool | What it surfaces |
|---|---|---|
| Enumerate unused IAM permissions | IAM Access Analyzer | Privilege accumulation |
| Find public S3 buckets | S3 Block Public Access report + Security Hub | Unintended exposure |
| Identify unencrypted resources | AWS Config rule: encrypted-volumes | Encryption gaps |
| Check MFA enrollment | IAM Credential Report | Policy vs. reality gap |
| Audit CloudTrail coverage | AWS Config rule: cloud-trail-enabled | Logging blind spots |
The principle
Compliance is the floor. Build security controls that enforce intent, not just document it.
If your security posture would collapse the day after the auditor leaves, you don't have a security program. You have a report.
Further reading
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article