AWS Cloud
AWS Control Tower, end to end: the managed landing zone, its controls, and where it bites
One managed service wires AWS Organizations, IAM Identity Center, Config, CloudTrail and StackSets into a governed multi-account landing zone. Here is every moving part — and the honest limits.
Scope & versions: AWS Control Tower as documented mid-2026 — the User Guide and Controls Reference, landing-zone version 4.0-era behavior. Version-sensitive facts (the LZ 4.0 mandatory-controls change, LZ 3.x logging changes, proactive controls, control counts, the ~33 supported Regions) are attributed inline. Re-verify counts, supported-Region count, and landing-zone-version behavior before you rely on a specific number.
You inherit an AWS org with forty accounts. Logging is configured three different ways, IAM differs in every account, someone has been running EC2 in the management account, and nobody can tell you which accounts have public S3 buckets. Building the governance to fix that by hand — org-wide CloudTrail, a central log account, a guardrail library per team, single sign-on — is months of work you would then own forever.
AWS Control Tower is the managed answer: it stands up a best-practice landing zone in under an hour and keeps watching it for drift. It is also opinionated, occasionally opaque, and unforgiving when you fight its model. This is the whole machine — the accounts, the OUs, the three kinds of control, how accounts get vended, how drift is caught — and the specific places it is rigid enough that teams outgrow it.
TL;DR
- Control Tower is orchestration, not a new service. It drives AWS Organizations, IAM Identity Center, Service Catalog, Config, CloudTrail and CloudFormation StackSets into a prescribed landing zone. It does not replace any of them.
- The skeleton is fixed: a management account (which hosts Control Tower and is exempt from controls — no workloads there), a Security OU holding a Log Archive and an Audit account, and a tree of workload OUs holding your member accounts.
- Governance is controls applied per OU, in three behaviors — preventive (SCP/RCP/declarative policies), detective (Config rules), proactive (CloudFormation hooks) — crossed with mandatory / strongly-recommended / elective guidance.
- It is free; the resources it turns on are not. Control Tower has no charge, but AWS Config recording — a configuration item per resource change, per Region — is the bill that surprises people.
- Use it as the foundation, and know its edges. Drift is a real operational tax (almost every drift path runs through the over-powered management account), some setup choices are one-way, enrollment is fussy, and when you outgrow it you add Landing Zone Accelerator on top rather than replacing it.
The forty accounts you can't govern by hand
Control Tower does not invent much. It orchestrates services you already have — AWS Organizations, IAM Identity Center, Service Catalog, Config, CloudTrail, CloudFormation StackSets — and configures them into a multi-account environment AWS calls a landing zone: the enterprise-wide container for your OUs, accounts, users, and the rules over them.
The point worth seeing before anything else is that the underlying services are identical with or without Control Tower. The difference is who wires them. Do it by hand and you write your own Organizations structure, your own centralized logging, your own SCP library, your own account-vending pipeline — and then keep all of it consistent as it scales. Control Tower is the conductor that configures the same instruments into a best-practice arrangement, and keeps them in tune.
The landing zone at a glance — every account and OU on one board
Here is the whole structure Control Tower builds. Learn this map and most of the service falls into place; every later section is a zoom into one region of it.
When you set up the landing zone, Control Tower creates the Security and (optional) Sandbox OUs, creates or adopts the Log Archive and Audit accounts inside Security, stands up an IAM Identity Center directory with preconfigured groups, and applies its baseline. It deploys into accounts using CloudFormation StackSets — one stack instance per account per Region. (Seeing some instances marked Outdated after an update is normal, not a fault.)
Who owns each box:
| Component | What it is | Who should touch it |
|---|---|---|
org-root | The AWS Organizations parent holding every OU | Control Tower (managed) |
mgmt-account | Hosts Control Tower, Organizations, Account Factory, Service Catalog, the Identity Center directory | Platform admins only — no workloads |
security-ou | Foundational OU holding the two shared accounts | Control Tower (don't delete) |
log-archive | Central, write-once S3 for every account's CloudTrail + Config logs | Compliance/security, read-mostly |
audit | Cross-account audit roles, three SNS topics, Security Hub aggregation | Security/compliance teams |
sandbox-ou / workload-ou | Registered OUs holding your enrolled member accounts | Your teams, under the OU's controls |
member-account | Where workloads actually live | Application teams |
The two shared accounts you did not choose to run. Alongside the management account, Control Tower creates two core accounts in the Security OU. You can custom-name them, or bring existing accounts to fill the roles — but only once, at initial setup. There is no do-over later.
- Log Archive is your write-once evidence locker: a central S3 bucket holding a copy of every account's CloudTrail and Config logs, immutable by design. From landing zone v3.3 on, the bucket policy enforces an
aws:SourceOrgIDcondition so only accounts inside your organization can write to it. (Version-sensitive: pre-3.3 landing zones lack that guard.) - Audit is your security team's cockpit: it carries an auditor (read-only) and an administrator (full-access) role into every account, and is the fan-in for notifications via three SNS topics — all configuration events, aggregate security notifications (Config-rule compliance, GuardDuty findings), and drift notifications.
How it enforces the rules — the three kinds of control
A control (formerly "guardrail" — AWS still uses both words) is a high-level rule in plain language. The single most important fact about controls: a control applies to an entire OU, and every account in that OU inherits it. You govern by moving accounts into the right OU, not by configuring accounts one at a time.
- ① Preventive — an SCP/RCP or declarative policy in Organizations blocks the API call outright, in all Regions.
- ② Detective — an AWS Config rule flags noncompliance after the fact, in Control-Tower-supported Regions only.
- ③ Proactive — a CloudFormation hook blocks a resource before it is provisioned, for CFN-provisioned resources only.
The behavior axis — how a control enforces:
| Behavior | Mechanism | When it acts | Status values | Region scope |
|---|---|---|---|---|
| Preventive | SCP / RCP / declarative policy (Organizations) | Blocks the API call | Enforced / Not enabled | All Regions |
| Detective | AWS Config rule | Flags it after the fact | Clear / In violation / Not enabled | CT-supported Regions only |
| Proactive | CloudFormation hook | Blocks before provisioning | PASS / FAIL / SKIP | CFN-provisioned resources only |
Proactive controls are the newest of the three — AWS launched them (as CloudFormation hooks) in preview in November 2022 with 130+ controls, and has expanded them since. (Version-sensitive: availability and Region coverage keep growing; check the current catalog.)
The guidance axis — how strongly AWS recommends a control, independent of its behavior:
- Mandatory — protect Control Tower's own deployed resources. Version-sensitive surprise: starting with landing zone version 4.0, mandatory controls are no longer applied by default. Older landing zones had them on automatically.
- Strongly recommended — common best practices for a well-architected estate; you opt in at the OU level.
- Elective — lock down actions many enterprises restrict; opt in per OU.
A concrete preventive control is just an SCP fragment. The landing-zone Region-deny control (AWS-GR_REGION_DENY) is a single deny shaped like this:
{
"Effect": "Deny",
"NotAction": [ "iam:*", "organizations:*", "sts:*", "cloudfront:*" ],
"Resource": "*",
"Condition": {
"StringNotEquals": { "aws:RequestedRegion": ["us-east-1", "eu-west-1"] },
"ArnNotLike": { "aws:PrincipalARN": "arn:aws:iam::*:role/AWSControlTower*" }
}
}Paraphrased from the control reference — the live template is longer. Note the NotAction carve-out for global services and the principal exception for Control Tower's own roles.
How a new account is born — Account Factory and its two paths
Account Factory is a vending machine built on AWS Service Catalog. It is a configurable account template; provisioning an account is really provisioning a Service Catalog product, which Control Tower then baselines with the standard stack sets and drops into an OU, under that OU's controls.
- ① A user in the
AWSAccountFactorygroup requests an account (console wizard or Service Catalog). - ② A Service Catalog provisioned product is created.
- ③ Control Tower baselines it via StackSets (CloudTrail, CloudWatch, Config, roles, VPC).
- ④ The account lands in the target OU and inherits that OU's controls.
The vend hops, in order:
| # | Hop | What happens |
|---|---|---|
| 1 | mgmt-account (Account Factory) | Request submitted by an AWSAccountFactory member |
| 2 | → service-catalog | A provisioned product is created from the Account Factory template |
| 3 | → stacksets | Baseline stacks deployed; default VPC deleted, an aws-controltower-VPC created |
| 4 | → workload-ou / member-account | Account placed in a registered OU and inherits its controls; Identity Center access wired up |
New accounts get the full treatment above. You can turn the VPC off in Account Factory's network settings if the workload does not need one. Enrolling an existing account is the harder path, and where teams get stuck. Two customization routes sit on top of the basic factory:
- Account Factory Customization (AFC) — console-driven. You register a blueprint (itself a Service Catalog product) so vended accounts come pre-baked with your resources. Blueprints can be CloudFormation (deploys to multiple Regions) or Terraform (single Region only). Partner-built blueprints exist too.
- Account Factory for Terraform (AFT) — a GitOps pipeline for Terraform shops. You write an account-request Terraform file,
git push, and AFT provisions and customizes the account through a Step Functions pipeline. AFT runs from its own dedicated AFT management account (not the Control Tower management account), needs an existing landing zone, and is explicitly not for deploying workload resources — only for making and customizing accounts.
AWSControlTowerExecution IAM role, sit in the same organization, land in a registered OU, and — the one that bites — have no existing AWS Config resources. If it already has a Config recorder or delivery channel, delete them first or enrollment fails. Control Tower also won't touch an enrolled account's existing VPCs (unlike a fresh vend), and watch for duplicate CloudTrail charges from leftover account-level trails.How it stays honest — drift, updates, and the reset button
Drift is divergence from the state Control Tower expects, and managing it is a routine operations task — not an exception. Detection is automatic: Control Tower makes read-only Organizations calls via the AWSControlTowerAdmin role and runs a daily scan of its managed SCPs, RCPs, and declarative policies (their identifiers start with aws-guardrails), checking each OU's policies still match the controls that should be there. Drift surfaces on the dashboard and through the Audit account's Drift Notifications topic (de-duplicated, so you get one alert per issue).
- ① Daily managed-policy scan runs from
mgmt-accountviaAWSControlTowerAdmin. - ② It compares the live Organizations / Config state against the expected controls.
- ③ The
auditaccount emits a de-duplicated Drift Notification (and the dashboard banners). - ④ You remediate: update landing zone → re-register OU → reset (in rising severity).
The remediation ladder, mild to severe:
| Drift | Example | Fix |
|---|---|---|
| Resolvable / benign | Rename a registered OU, change a shared account's email | Self-resolves on refresh |
| Move-account drift | An account dragged between OUs outside Control Tower | Update landing zone + re-register the OU |
| Structural | Deleted Security OU, or a required role (AWSControlTowerAdmin / ...CloudTrailRole / ...StackSetRole) | Reset landing zone — blocks every other action until done |
The operational sting, echoed by practitioners: while your landing zone is drifted, "Enroll account" stops working — you fall back to provisioning through Service Catalog directly. The Scale Factory team's field advice is blunt and worth adopting: treat drift as an incident and minimize the time you spend in it.
Where it runs — home Region, governed Regions, and Region deny
When you create the landing zone, the Region you are signed into becomes your home Region — and you can never change it. Control Tower supports roughly 33 Regions today; you choose which additional ones to govern. (Version-sensitive: the supported-Region count grows over time.)
- ① Home Region (fixed at creation) — you can never move it, and you can't deny it.
- ② Governed Regions — detective/proactive controls extend here once each OU is re-registered.
- ③ Un-governed Region — outside oversight, but resources can still be created.
- ④ Region-deny SCP boundary — the only thing that actually blocks a Region.
Region deny comes in two forms. AWS-GR_REGION_DENY is an elective, preventive SCP that applies to the whole landing zone; CT.MULTISERVICE.PV.1 applies per OU. You can't deny your home Region, and global services (IAM, Organizations, and friends) are exempt. Enable it only when you are sure you have no resources you still need in the target Regions, because it locks you out of them immediately.
A quieter gotcha: adding a governed Region updates the landing zone but does not update your existing accounts. Detective controls will not extend into the new Region until you re-register each OU to re-baseline its accounts. Miss that step and you have governed Regions on paper with ungoverned accounts underneath.
What you actually pay for, and the ceilings
Control Tower itself is free. There is no per-account or per-landing-zone charge. What you pay for is everything it switches on: Service Catalog, CloudTrail, AWS Config, CloudWatch, SNS, S3, and VPC.
The limits worth committing to memory:
| Limit | Value |
|---|---|
| Accounts per landing zone | Up to 10,000 |
| SCPs per OU | 10 |
| Concurrent account operations (Account Factory) | 5 |
| Concurrent control operations | 100 queued, 10 in progress |
| OU registration ceiling | Can't register an OU with >1,000 directly nested accounts |
| General concurrency | Roughly one operation at a time (the two above are the exceptions) |
Also check Region availability before you plan: several newer Regions don't yet support Service Catalog, AFC, AFT, or Customizations for Control Tower (CfCT), which quietly rules out those features there.
Where it bites, and when to reach past it
Collected in one place so they don't interrupt the map. Most of these are the abstraction leaking, or someone fighting the fixed model.
- Workloads in the management account. It is exempt from controls by design — anything there runs ungoverned at organization scope. Keep it empty; run workloads in member accounts.
- The management account is the drift super-spreader. Almost every drift path runs through it, because it hosts both Control Tower and Organizations. Lock it down with least-privilege IAM and keep humans out of it.
- Enrolling an account that already has Config. Enrollment fails if the account has a Config recorder/delivery channel. Delete them first.
- Assuming an un-governed Region is a blocked Region. It is not. Use the Region-deny control if you actually mean to block.
- Forgetting to re-register OUs after adding a Region. Existing accounts don't get the new Region's detective controls until you re-register their OU.
- Editing Control Tower's managed resources by hand. Modifying its VPC, roles, SCPs, or stack sets outside the supported paths creates drift and can push controls into an "unknown state."
- One-time choices you can't undo. The home Region, and using existing accounts for Log Archive/Audit, are locked at setup. Some account attributes can't change after provisioning either. Decide deliberately.
- Config cost creep. The default records everything, everywhere governed. Review what Config records before your estate is large, not after the bill arrives.
Three ways to build a governed multi-account estate — and they are layers more than rivals:
| Approach | What you get | When it wins |
|---|---|---|
| Organizations alone | Raw primitives — OUs, SCPs, consolidated billing. You build logging, vending, and drift-checking yourself. | Full control, unusual requirements, or mature IaC you don't want an opinionated layer over. |
| Control Tower | A managed landing zone + ongoing governance on Organizations, in under an hour. | The default for most teams who want best-practice multi-account without hand-rolling it. |
| Landing Zone Accelerator | A CDK-based solution deploying deeper networking/security aligned to compliance frameworks — layered on top of Control Tower. | Highly-regulated or complex estates that outgrow the built-in customization; also Regions where Control Tower isn't available (LZA can run on Organizations directly). |
AWS's own guidance matches what the tooling implies: deploy Control Tower as your foundational landing zone, then add LZA as needed. They are not an either/or. Start with Control Tower; graduate to LZA-on-Control-Tower when the requirements demand it, not before — LZA is a heavier operational commitment. And if you already built your own account structure, the newer controls-only experience lets you adopt Control Tower's managed control library without deploying a full landing zone.
Control Tower is the fast, managed floor under a multi-account AWS estate: it wires the same services you would have wired anyway, keeps them honest, and gets out of your way — right up to the edges, which are worth knowing before you hit them.References
- AWS — What Is AWS Control Tower? (User Guide). https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html
- AWS — How AWS Control Tower works (landing-zone structure, StackSets). https://docs.aws.amazon.com/controltower/latest/userguide/how-control-tower-works.html
- AWS — About the shared accounts (management, Log Archive, Audit). https://docs.aws.amazon.com/controltower/latest/userguide/special-accounts.html
- AWS — About controls in AWS Control Tower (Controls Reference). https://docs.aws.amazon.com/controltower/latest/controlreference/controls.html
- AWS — Control behavior and guidance (behaviors × guidance; LZ 4.0 note). https://docs.aws.amazon.com/controltower/latest/controlreference/control-behavior.html
- AWS — Provision and manage accounts with Account Factory. https://docs.aws.amazon.com/controltower/latest/userguide/account-factory.html
- AWS — Account Factory Customization (AFC) and Partner blueprints. https://docs.aws.amazon.com/controltower/latest/userguide/af-customization-page.html
- AWS — Overview of Account Factory for Terraform (AFT). https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html
- AWS — About enrolling existing accounts (baseline stack sets, Config prerequisite). https://docs.aws.amazon.com/controltower/latest/userguide/enroll-account.html
- AWS — Configure AWS Control Tower without a VPC. https://docs.aws.amazon.com/controltower/latest/userguide/configure-without-vpc.html
- AWS — Working with IAM Identity Center and AWS Control Tower. https://docs.aws.amazon.com/controltower/latest/userguide/sso.html
- AWS — How AWS Regions work with AWS Control Tower. https://docs.aws.amazon.com/controltower/latest/userguide/region-how.html
- AWS — Configure the Region deny control. https://docs.aws.amazon.com/controltower/latest/userguide/region-deny.html
- AWS — Detect and resolve drift in AWS Control Tower. https://docs.aws.amazon.com/controltower/latest/userguide/drift.html
- AWS — Manage AWS Config costs in AWS Control Tower. https://docs.aws.amazon.com/controltower/latest/userguide/config-costs.html
- AWS — AWS Control Tower Pricing. https://aws.amazon.com/controltower/pricing/
- AWS — Limitations and quotas in AWS Control Tower. https://docs.aws.amazon.com/controltower/latest/userguide/limits.html
- AWS — AWS Control Tower and Landing Zone Accelerator. https://docs.aws.amazon.com/controltower/latest/userguide/about-lza.html
- AWS — Comprehensive controls management (proactive controls preview, Nov 2022). https://aws.amazon.com/about-aws/whats-new/2022/11/aws-control-tower-preview-comprehensive-controls-management/
- AWS — Control Tower introduces a Controls-dedicated experience. https://aws.amazon.com/blogs/aws/aws-control-tower-introduces-a-controls-dedicated-experience/
- Scale Factory (Rob), Apr 2025 — When Control Tower Drifts (practitioner reality-check). https://scalefactory.com/blog/2025/04/30/when-control-tower-drifts/