Cloud Tech by Victor
DevOpsBeginner

AWS Organizations & Account Structure

How AWS Organizations, organizational units, and the AWS account itself form the real isolation boundary, and why that structure - not any single resource - is where governance and billing actually happen.

Updated 2026-07-245 min read

Overview

AWS organizes everything around the account as the real isolation boundary, unlike a nested resource-group hierarchy inside a single subscription, an AWS account is where billing, service quotas, and blast radius actually get contained. AWS Organizations lets many accounts be managed together: organizational units (OUs) group accounts for policy application, and Service Control Policies (SCPs) attach at the organization, OU, or account level to cap the maximum permissions available underneath them, on top of, never instead of, the IAM policies that actually grant access. Tags and AWS Resource Groups exist for cross-resource visibility inside an account, but they are a query mechanism, not a lifecycle or deletion boundary the way an Azure resource group is.

Quick Reference

LevelPurposeDeleting/removing it
OrganizationRoot container managing multiple accounts centrallyRequires all member accounts to be removed first
Organizational unit (OU)Groups accounts for SCPs and policy applicationDoesn't delete member accounts, just removes grouping
Member accountBilling and security isolation boundaryClosing an account is a distinct, deliberate, multi-step process
SCPCaps maximum permissions for everything beneath itDetaching it removes the ceiling, doesn't grant new access

The commands below are grouped by service, not an exhaustive reference (see the official AWS CLI command reference for every flag), but the set that covers nearly all day-to-day aws CLI work.

CommandDescriptionCopy
aws configureInteractively set the access key, secret key, default region, and output format.
aws sts get-caller-identityShow the account ID and IAM user/role ARN currently authenticated as.
aws configure listShow the current configuration values and where each one came from.

Syntax

bash
aws organizations create-organizational-unit \
  --parent-id r-abcd --name Production

aws organizations create-account \
  --email prod-payments@example.com --account-name payments-prod

Examples

scp-deny-outside-approved-regions.json, an SCP that caps every identity in the attached OU to two approved regions, no matter what their own IAM policy allows:

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": { "aws:RequestedRegion": ["us-east-1", "eu-west-1"] }
      }
    }
  ]
}

SCPs restrict, they never grant

Attaching this SCP to an OU does not give anyone permission to do anything in us-east-1 or eu-west-1, it only blocks every action everywhere else. An identity still needs its own IAM allow within that region to do anything at all.

Visual Diagram

Common Mistakes

  • Assuming AWS Resource Groups behave like an Azure resource group, a deletion/lifecycle boundary, when they're really just a saved tag-based query with no ownership semantics.
  • Running an entire company, production included, out of a single AWS account instead of separating environments and teams by account.
  • Writing an SCP and expecting it to grant access, then being confused when everything underneath it still returns access denied without a matching IAM allow.
  • Assuming an org-wide SCP also restricts the management account itself; SCPs only ever apply to member accounts, never to the management account.
  • Skipping AWS Organizations and centralized logging entirely, leaving no org-wide guardrail against an individual account drifting out of compliance.

Performance

  • SCP evaluation happens alongside normal IAM policy evaluation and adds no meaningful latency, the real cost is organizational complexity if the OU/SCP structure isn't kept simple.
  • Account creation and OU membership changes through AWS Organizations are eventually consistent, propagation to all regions/services can take a few minutes, don't assume it's instantaneous.

Best Practices

  • Separate accounts by environment (production, staging, development) and by team or workload boundary, using AWS Organizations to manage them centrally rather than tags inside one account.
  • Apply SCPs at the OU level for guardrails that should apply organization-wide (approved regions, disallowed services), rather than repeating them per account.
  • Use a dedicated management account for billing/Organizations and a separate log-archive account for centralized CloudTrail logs, following the landing-zone pattern instead of overloading one account with every responsibility.
  • Use tags and AWS Resource Groups for cross-resource visibility and cost allocation within an account, not as a substitute for real account-level isolation.

Interview questions

What is the fundamental unit of isolation in AWS, and how does that differ from a single resource-group boundary in Azure?

In AWS, the account itself is the fundamental security and billing isolation boundary, every resource lives inside exactly one account, and account-level separation is what actually contains blast radius (a compromised credential in one account cannot directly touch resources in another). This differs from Azure, where a single subscription can contain many resource groups as an additional lifecycle boundary beneath it. AWS has no equivalent nested container inside an account for "delete everything in this group together," which is why multi-account strategies (via AWS Organizations) do the job that resource groups partly do in Azure, at the account level instead of a sub-account level.

What is a Service Control Policy (SCP), and what is the one thing it does not do?

An SCP is a policy attached to an AWS Organizations root, organizational unit, or member account that defines the maximum available permissions for every identity in that account, including that account's own administrators and its root user. What an SCP does not do is grant any permission by itself, it only sets a ceiling; an identity still needs an actual IAM allow (from an identity-based or resource-based policy) within that ceiling to do anything. An SCP with no matching IAM allow underneath it results in access denied, not access granted, which is the most common misunderstanding of how SCPs work. One exception worth knowing: SCPs never apply to the organization's management account itself, only to member accounts.

Why would an organization use multiple AWS accounts instead of one account holding all resources?

Separate accounts per environment (production, staging, development) or per team give a hard isolation boundary that a single account with tags or naming conventions cannot: a mistake or compromised credential in a development account cannot reach production resources at all, rather than merely being restricted by IAM policy within the same account. It also gives cleaner cost attribution (billing rolls up per account), independent service quotas, and a natural blast-radius limit for security incidents. AWS Organizations, and patterns built on top of it like a landing zone, exist specifically to make many accounts manageable, centralized billing, centralized logging, and org-wide SCPs, without losing that isolation.

References

ShareXLinkedInReddit
Was this page helpful?
Suggest an improvement