Accounts, Organizations, Landing Zones, and Guardrails
Accounts, Organizations, landing zones, and guardrails give an AWS estate a deliberate shape before application teams begin creating resources. The outcome is not merely many accounts. The outcome is a governed operating model: workloads land in accounts with known ownership, identities enter through controlled paths, network and logging baselines already exist, and policy prevents actions that would break the organization’s rules.
In this AWS Cloud Engineering lesson, the account boundary is the unit of isolation. A single account contains IAM identities, regional resources, quotas, billing attribution, CloudTrail events, and many service control decisions. AWS Organizations then groups accounts under one management account so central teams can apply policy, billing, account creation, and delegated administration. A landing zone is the prepared environment those accounts join. Guardrails are the preventative and detective controls that keep the environment within policy while still allowing teams to build.
How the Pieces Fit
An AWS Organization has one management account and zero or more member accounts. The management account owns the organization, consolidated billing relationship, organization-wide policy attachment points, and trusted access configuration for integrated AWS services. You should avoid running normal workloads there because broad organizational permissions and billing authority make it a high-impact account.
Accounts are arranged in organizational units, usually called OUs. An OU is a container for accounts and child OUs. Policies attached higher in the tree affect accounts below that point. Common OUs include Security for audit and log archive accounts, Infrastructure for shared networking or tooling, Sandbox for experimentation, and workload OUs such as Prod and NonProd. The OU tree should reflect control needs more than company org charts, because the tree determines where policy inheritance applies.
Service control policies, or SCPs, are the most important preventative guardrail in Organizations. An SCP does not grant permission. It defines the maximum permissions available to identities in affected accounts. A request must be allowed by identity or resource policy and must also not be blocked by an applicable SCP. This means an administrator in a member account can still be denied when the organization says an action is outside the account’s allowed envelope.
A landing zone combines account vending, identity integration, centralized logging, baseline networking, security monitoring, and policy. AWS Control Tower is AWS’s managed landing-zone service. It creates a governed multi-account baseline, enrolls accounts, applies controls, and uses related services such as Organizations, IAM Identity Center, CloudTrail, AWS Config, CloudFormation StackSets, and AWS Service Catalog. Teams can also build a custom landing zone, but then they own the lifecycle logic that Control Tower normally provides.
Configuration Anatomy
The core design inputs are account purpose, OU placement, identity source, region strategy, logging destination, and guardrail set. Naming should make ownership and purpose obvious: for example prod-payments-app, security-log-archive, and network-shared. Each account needs a root email address, alternate contacts, support role expectations, and a bootstrap role used by automation.
An SCP is JSON policy syntax with Version, Statement, Effect, Action or NotAction, Resource, and optional Condition. A common pattern is a deny statement with exceptions for break-glass or service-linked roles. Conditions can restrict regions, principals, tags, requested services, or organization paths. Be careful with broad Deny statements because denies override allows and can block recovery work.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyOutsideApprovedRegions",
"Effect": "Deny",
"NotAction": [
"iam:*",
"organizations:*",
"route53:*",
"support:*",
"cloudfront:*"
],
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": [
"us-east-1",
"us-west-2"
]
}
}
}
]
}
This fragment denies most regional service calls outside two approved regions while excluding global services that either do not use normal regional endpoints or often need special handling. The deterministic behavior is that an allowed EC2 launch request in eu-west-1 is denied by the SCP, while the same request in us-east-1 can proceed to IAM evaluation.
Worked Example 1: Separate Accounts by Blast Radius
Start with three accounts: security-log-archive, nonprod-web, and prod-web. Put the security account under a tightly controlled Security OU and the workload accounts under NonProd and Prod. Centralize CloudTrail organization trails into the log archive account. Developers receive broader permissions in nonprod-web and narrower deployment roles in prod-web.
The expected behavior is clear isolation. A developer mistake that deletes a test bucket in nonprod-web does not delete a production bucket because the buckets live in different accounts with different IAM roles and resource names. Billing reports can also show spend by account, which makes ownership conversations less ambiguous.
set -euo pipefail
aws organizations list-accounts --output table
aws organizations list-organizational-units-for-parent \
--parent-id r-example \
--output table
The commands are read-only discovery. In a real organization, replace r-example with the root ID from list-roots. You should see accounts and OUs that match the intended boundary model before attaching guardrails.
Worked Example 2: Region Guardrail for Workloads
Suppose the platform standard allows workloads only in us-east-1 and us-west-2. Attach the region-deny SCP to Prod and NonProd, not to Security until you have checked security tooling requirements. The reason is practical: security and identity services sometimes need global or cross-region behavior during setup.
Expected behavior is deterministic at authorization time. When a principal in prod-web calls ec2:RunInstances in eu-central-1, the request fails with an access denied error even if its IAM role allows EC2 administration. When the same role calls ec2:RunInstances in us-west-2, the SCP does not block it, so IAM, quota, VPC, and service validation decide the final result.
Worked Example 3: Account Vending with Baselines
A landing zone should make account creation repeatable. A request for prod-orders-api should create or enroll the account, place it in the Prod OU, attach baseline roles, send CloudTrail and Config data to central accounts, enable required security services, and apply tags such as Owner, CostCenter, and DataClassification. With Control Tower, Account Factory and Account Factory for Terraform are common ways to standardize this flow.
The expected output is not an empty account. It is an account that already has the organizational context needed for operations. Verification should show the account in the right OU, the expected controls enabled, central logs arriving, and deployment roles present. Application teams then build inside a prepared boundary instead of discovering governance requirements after launch.
set -euo pipefail
ACCOUNT_ID="111122223333"
aws organizations list-parents --child-id "$ACCOUNT_ID" --output json
aws cloudtrail describe-trails --include-shadow-trails --output table
aws configservice describe-configuration-recorders --output table
For a correctly enrolled account, list-parents should point to the intended OU. CloudTrail and AWS Config discovery should show that baseline recording exists. If these checks are empty in a new account, account vending created compute space but not a governed landing-zone account.
Design Choices and Trade-offs
Choose more accounts when isolation, billing ownership, separate quotas, or separate deployment permissions matter. Choose fewer accounts when operational overhead would exceed the benefit. The common mistake is treating accounts as projects with no lifecycle owner. Every account needs an owner, a business purpose, and an exit path for closure or suspension.
Choose OU depth carefully. A shallow tree is easier to reason about but gives less targeted policy inheritance. A deep tree can express fine differences, but policy debugging becomes harder because multiple inherited policies participate in every authorization decision. Prefer OUs that correspond to durable control differences such as production criticality, sandbox freedom, regulated data, or suspended accounts.
Preventative guardrails stop violations before they happen, but they can also block legitimate urgent work. Detective guardrails, such as Config rules, Security Hub findings, or Control Tower detective controls, allow activity and report drift. Use preventative controls for actions the organization is confident should never happen, such as disabling central audit trails in workload accounts. Use detective controls when context matters and remediation may require human judgment.
Failure Modes and Troubleshooting
Symptom: an administrator in a member account receives AccessDenied for an action its IAM policy allows. Cause: an SCP attached to the account, parent OU, or root blocks the action. Diagnose: check the account’s OU path, list attached policies at each level, and use IAM policy simulation where applicable. Correct: narrow the deny condition, move the account to the correct OU, or use an approved break-glass path instead of adding broader IAM permissions.
Symptom: a newly created account is missing logs or security findings. Cause: the account was created outside the landing-zone vending process or enrollment failed partway through. Diagnose: compare the account against the baseline checklist: OU, CloudTrail, Config recorder, security service membership, baseline roles, and required tags. Correct: enroll the account through Control Tower or rerun the custom baseline automation idempotently.
Symptom: a region restriction breaks IAM, Route 53, CloudFront, or Organizations operations. Cause: the SCP treated global services like normal regional services. Diagnose: inspect the denied event in CloudTrail and note the service, action, principal, and requested region context. Correct: add deliberate exceptions for required global services while keeping regional workload services restricted.
Security, Reliability, and Cost Implications
Security improves because account boundaries limit who can affect sensitive resources and SCPs provide organization-level denies that local account administrators cannot bypass. Reliability improves when production workloads are isolated from experiments, quotas, and destructive testing. Cost management improves because account-level billing, tags, and budgets can map spend to owners.
There are operational costs. More accounts mean more lifecycle automation, access review, logging volume, and policy testing. Central teams should treat Organizations configuration as production infrastructure. Changes to SCPs, trusted access, delegated administrators, and landing-zone baselines deserve peer review, staged rollout through lower-risk OUs, and rollback notes.
Hands-On Lab
Prerequisites: access to an AWS Organization in a sandbox environment, AWS CLI configured with permission to read Organizations and IAM data, and approval to create a test OU or use an existing sandbox OU. Do not run this lab from a production management account without a reviewed change plan.
- Run
aws sts get-caller-identityand confirm you are using the intended administrative role. - Run
aws organizations list-rootsand record the root ID. - Create or identify a sandbox OU for policy testing. If creating one, name it
CourseSandbox. - Create a test SCP that denies
s3:DeleteBucketand attach it only to the sandbox OU. - Move a disposable test account into the sandbox OU or use an account already dedicated to policy testing.
- In the test account, try deleting a disposable S3 bucket. The expected result is
AccessDeniedcaused by the SCP. - Detach the SCP, wait for policy propagation, and retry the same delete on a disposable bucket only if cleanup requires it.
Verification: prove the control worked by collecting the denied CLI error and the CloudTrail event showing the denied s3:DeleteBucket request. Also verify that unrelated accounts outside the sandbox OU are not affected by listing the policy targets.
Cleanup: detach the test SCP, delete the SCP if it is no longer needed, move the test account back to its original OU, and remove any disposable buckets created for the lab. Keep the notes that identify the exact OU, policy ID, and test account because they are the audit trail for the exercise.
Assessment Exercises
- You inherit one AWS account containing production, development, logging, and shared networking. Propose an account and OU split, then explain which failure each new boundary reduces.
- A team asks for full administrator access in a production account because an SCP blocks a deployment. Explain why IAM administrator access may not help and what evidence you need before changing the SCP.
- Design a region guardrail for workloads that must run only in two regions. Which global services would you review for exceptions, and how would you test the policy before broad rollout?
- Compare Control Tower with a custom landing zone for a small company with strict governance but limited platform engineering capacity. Which responsibilities move to AWS-managed workflows and which remain with the company?
- A new account appears in consolidated billing but has no Config recorder and no central CloudTrail delivery. Write the first five diagnostic checks you would run.
Summary
Accounts are AWS’s strongest everyday isolation boundary, Organizations supplies hierarchy and central policy, landing zones make account creation repeatable, and guardrails enforce or detect governance rules. A good design starts with account purpose and OU policy inheritance, applies SCPs only where their denial behavior is understood, and verifies every new account against the landing-zone baseline before workloads depend on it.
