As a Cloud Architect, mastering AWS Organizations is foundational for effective multi-account strategies and centralized governance. AWS Organizations enables you to consolidate multiple AWS accounts into a single, centrally managed structure. This provides key benefits like consolidated billing, central identity management (via AWS SSO), and most critically, the ability to apply guardrails across your entire cloud estate. A well-designed multi-account strategy is paramount for security (reducing blast radius, strong isolation), operational efficiency (environment separation), cost allocation, and regulatory compliance. Organizations allow you to group accounts into Organizational Units (OUs), mirroring your company's structure or compliance zones, such as Security, Networking, Production, Development, or Sandbox OUs.
Service Control Policies (SCPs) are the powerhouse of multi-account governance within AWS Organizations. SCPs are a type of organization policy that specifies the maximum permissions that all IAM principals (users, roles, groups) can have within any account associated with the SCP. Crucially, SCPs are guardrails – they never grant permissions, they only restrict them. Even if an IAM policy within an account explicitly grants a permission, an SCP denying that same permission at an OU or Organization root level will always take precedence. This allows you to enforce baseline security and compliance requirements across your entire organization, such as preventing root user sign-ins, blocking access to specific AWS regions, or disallowing the deletion of critical logging resources (e.g., CloudTrail S3 buckets).
Effective multi-account governance hinges on strategically designing your OU structure and applying granular SCPs. For instance, you might place stricter SCPs on your Production OUs to limit actions and approved regions, while applying more permissive policies to Sandbox OUs. SCPs operate on an explicit deny takes precedence principle, meaning any explicit deny in an SCP will override any allow. This allows architects to implement robust security postures at scale, ensuring consistent adherence to policies irrespective of individual account configurations. Understanding the hierarchical inheritance and evaluation logic of SCPs is critical for architects to prevent unintended restrictions while ensuring a strong security posture across dozens, or even hundreds, of accounts.
Key Takeaways
- AWS Organizations centralizes management and billing for multiple AWS accounts.
- SCPs are organizational-level guardrails that restrict the maximum permissions for all IAM principals.
- SCPs cannot grant permissions; they only deny them, overriding any IAM policy allow.
- A well-designed OU structure combined with granular SCPs is fundamental for multi-account governance.
- Use SCPs to enforce baseline security, compliance, and prevent common misconfigurations across your AWS estate.
Code Example
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {
"StringLike": {
"aws:PrincipalArn": [
"arn:aws:iam::*:root"
]
}
}
}
]
}How this code works
This Service Control Policy (SCP) serves a critical security function: it prevents the AWS account root user from performing any actions within any account where this SCP is applied. This enforces the best practice of never using the root user for day-to-day operations, ensuring all administrative tasks are performed by IAM users or roles with specific, least-privilege permissions. By effectively disabling the root user, it significantly reduces the attack surface and helps maintain a robust security posture across an AWS Organization.
The policy achieves this with an Effect of Deny, which is crucial because an explicit Deny always overrides any Allow statements from other policies. It applies this Deny to Action: "*" and Resource: "*", ensuring absolutely no operations can be performed. The key targeting mechanism is the Condition block, which checks the aws:PrincipalArn (the identity making the request). Using StringLike, the policy specifically matches any ARN that ends with :root (e.g., arn:aws:iam::123456789012:root), identifying the root user in any account. This ensures that only the highly privileged root user is restricted, leaving IAM users and roles unaffected.