A single AWS account is the right starting point, covered in this domain's first lesson — but it stops being the right shape once real production workloads, multiple environments, and more than one person are all sharing the same account, the same billing, and the same blast radius.
4 min read
A single AWS account is simple, but that simplicity has a real cost as things grow: a mistake in a "just testing something" experiment can affect production resources sitting in the same account; every IAM permission has to be scoped carefully within one shared space instead of relying on account boundaries; and billing for genuinely different purposes (a dev environment, a production environment, a separate team's project) is all mixed into one bill with no natural separation. AWS Organizations is AWS's answer: a structure for managing multiple accounts centrally, under one management account, with policies that can apply across all of them at once.
An Organizational Unit (OU) groups accounts so policies can be applied to the whole group at once, rather than account by account. A common, simple starting structure: a "Production" OU and a "Non-Production" OU, each with different guardrails — production might block the ability to disable CloudTrail logging entirely, while non-production allows more experimentation.
A Service Control Policy (SCP) attached to an OU (or individual account) sets the maximum permissions available to every identity in that account — even an account's own root user cannot exceed what an SCP allows, since SCPs apply above and outside normal IAM entirely. This is the organization-wide equivalent of the permissions boundary concept from this domain's IAM lesson, just scoped to entire accounts instead of individual roles.
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Deny",
"Action": ["cloudtrail:StopLogging", "cloudtrail:DeleteTrail"],
"Resource": "*"
}]
}Attached to the "Production" OU, this SCP makes it impossible for anyone in a production account — including someone with an otherwise-admin IAM role — to disable audit logging, no matter what IAM policy they're granted directly. SCPs are for org-wide guardrails that must never be bypassable by a permissions mistake in an individual account, not for day-to-day permission management (that's still IAM's job within each account).
The natural first question: why go through the complexity of multiple accounts instead of just being careful with IAM roles and tagging within a single account? A few concrete reasons this curriculum's earlier lessons already set up the vocabulary for:
Accessing resources across accounts uses the same IAM role-assumption pattern from this domain's IAM lesson, extended across account boundaries — a role in Account B can trust Account A, allowing a user or service in Account A to assume it and temporarily act within Account B, with no credentials ever copied between accounts.
# In Account B (the account being accessed)
resource "aws_iam_role" "cross_account_access" {
name = "from-account-a"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { AWS = "arn:aws:iam::111111111111:root" } # Account A
Action = "sts:AssumeRole"
}]
})
}# From Account A
aws sts assume-role \
--role-arn arn:aws:iam::222222222222:role/from-account-a \
--role-session-name my-sessionFor a team just beginning to split beyond a single account, a reasonable minimal structure: a management account (billing and org-level policies only, no actual workloads run here), a production account, and a dev/staging account — three accounts, not the elaborate 10+-account structures larger enterprises eventually grow into. The structure should grow as real organizational needs emerge (a genuinely separate team needing its own account, a compliance requirement demanding account-level isolation), not be over-built speculatively from day one — the same "match the structure to actual need" principle the Agile & Project Management domain's scaling-agile lesson makes about organizational frameworks generally.
Check your understanding
A quick comprehension check — not tracked, not graded, just for you.
1. What does a Service Control Policy (SCP) do?
2. Why use separate AWS accounts instead of relying solely on careful IAM within one account?
3. How does cross-account access work without copying credentials between accounts?
4. What is a reasonable minimal account structure for a team just beginning to split beyond a single account?
AWS