AWS SecurityAWSOrganizationsMulti-AccountSOC 2SCPGuardDutyCloudTrail

SOC 2 Compliance Across AWS Multi-Account Organizations

How to manage SOC 2 compliance when you run multiple AWS accounts — Organizations SCPs, GuardDuty multi-account setup, centralized logging, and audit scope definition.

SecureSpect Team··9 min read

Why Multi-Account AWS Architectures Are the Right Pattern

AWS recommends running separate accounts for production, staging, development, security/logging, and shared services. This isolation approach provides real security and compliance benefits: a compromised development account can't pivot to production, resource policies can be simpler within a single account boundary, and blast radius is limited.

For SOC 2, multi-account architectures are both an asset and a complexity. The isolation is good. The additional surface area for checks is challenging. Here's how to manage it.

Defining Your SOC 2 Scope Across Accounts

Not every AWS account needs to be in SOC 2 scope. The scope boundary is: accounts where customer data is stored, processed, or transmitted; or accounts whose compromise could materially impact your production environment.

Typical scope for a SaaS company:

In scope:

  • Production account (customer data, application runtime)
  • Shared services account (IAM Identity Center, centralized logging, DNS)
  • Security account (GuardDuty aggregator, Security Hub aggregator)
Out of scope (usually):
  • Development accounts (if no real customer data)
  • Staging accounts (if isolated with test data only)
  • Data lake/analytics accounts (depends on whether they process real customer data)

Document your scope decision in your System Description. Auditors will ask why certain accounts are excluded.

Enforce Guardrails with Service Control Policies

Service Control Policies (SCPs) applied at the AWS Organizations level are the most powerful mechanism for maintaining consistent security posture across accounts — because they apply regardless of what individual account administrators do.

SOC 2-relevant SCPs to implement:

// Deny disabling CloudTrail

{

"Sid": "DenyCloudTrailDisable",

"Effect": "Deny",

"Action": [

"cloudtrail:DeleteTrail",

"cloudtrail:StopLogging",

"cloudtrail:UpdateTrail"

],

"Resource": "*"

}

// Deny GuardDuty detector deletion

{

"Sid": "DenyGuardDutyDelete",

"Effect": "Deny",

"Action": [

"guardduty:DeleteDetector",

"guardduty:DisassociateFromMasterAccount",

"guardduty:StopMonitoringMembers"

],

"Resource": "*"

}

// Require encryption on new S3 buckets

{

"Sid": "DenyUnencryptedS3",

"Effect": "Deny",

"Action": "s3:PutBucketPolicy",

"Resource": "*",

"Condition": {

"StringNotEquals": {

"s3:x-amz-server-side-encryption": ["aws:kms", "AES256"]

}

}

}

These SCPs mean that individual account administrators — even those with full AdministratorAccess — cannot disable core security services. This satisfies auditor requirements for enforced security baseline controls.

Centralized Security Services

GuardDuty Multi-Account

Designate a security account as the GuardDuty administrator. Member accounts send findings to the administrator account — giving you a single pane of glass across all accounts:

# In the security/administrator account

aws guardduty create-detector --enable --region us-east-1

# Add all member accounts

aws guardduty create-members \

--detector-id ADMIN-DETECTOR-ID \

--account-details '[

{"AccountId":"PROD-ACCOUNT-ID","Email":"prod@company.com"},

{"AccountId":"SHARED-ACCOUNT-ID","Email":"shared@company.com"}

]'

For SOC 2 audits, you can show GuardDuty findings from all in-scope accounts in one export from the administrator account.

CloudTrail Organization Trail

Create an organization-level CloudTrail trail that automatically covers all accounts in your organization:

aws cloudtrail create-trail \

--name org-soc2-trail \

--s3-bucket-name centralized-cloudtrail-logs \

--is-organization-trail \

--is-multi-region-trail \

--enable-log-file-validation \

--include-global-service-events

An organization trail logs all API activity across every current and future member account. No per-account configuration required. The logs aggregate in a central S3 bucket — your SOC 2 logging control is implemented once and covers everything.

Security Hub Aggregation

Configure Security Hub aggregation to collect findings from all accounts into a single administrator account. This includes CIS Benchmark results, AWS Foundational Security Best Practices, and findings from GuardDuty, Inspector, and IAM Access Analyzer:

# In the security account, enable as administrator

aws securityhub enable-organization-admin-account \

--admin-account-id SECURITY-ACCOUNT-ID

# Auto-enable new accounts

aws securityhub update-organization-configuration \

--auto-enable

Connecting SecureSpect to Multi-Account Organizations

SecureSpect supports multi-account AWS Organizations. Connect your management account, and SecureSpect discovers and assesses member accounts based on your defined scope. All checks run per-account and aggregate into a single compliance dashboard — you see the pass/fail state of all 49 controls across all in-scope accounts in one view.

Multi-account evidence is organized by account in SecureSpect's auditor portal, making it straightforward to respond to auditor requests for evidence from specific accounts.

Automate your SOC 2 evidence collection

Connect your AWS and GitHub environments and start collecting audit-ready evidence today. Free to start.

Start Free →More Articles