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.

Deep dive · cloud & platform engineers ·

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.

WITHOUT Control Tower · you wire each service, per accountthe raw AWS services — you connect them, per accountWITH Control Tower · same services, conductedthe landing zone it producesthe SAME AWS services — configured + connected uniformlysets upconductsAccount Aown CloudTrail / ConfigAccount Bown IAM / SCPs… every accountdiffersno central Log Archive / Audit · no single guardrail setOrganizationsIdentityCenterOrgCloudTrailConfig+ aggregatorStackSetsServiceCatalogyou build it — and own it foreverControl Tower — the conductorconfigures the same services below into a prescribed landing zonemgmt-accountexemptsecurity-oulog-archive + auditworkload OUsone guardrail setOrganizationsIdentityCenterOrgCloudTrailConfig+ aggregatorStackSetsServiceCatalog
Figure 1. Without Control Tower vs with it. Both panels hold the same six AWS services — the only new thing on the right is a conductor arranging them into a prescribed landing zone. That is the whole idea: an orchestration layer, not a new service plane.
The one-liner. If you run more than a handful of accounts, you want an orchestration layer, and this is the managed one. If you run three accounts and know exactly what is in each, you may not need it yet. Nothing here is a new service you have to learn from scratch — it is the services you already know, configured for you.

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.

Region scopeManagement account · exempt — no workloadsSecurity OU (foundational)Workload OUs (registered)controls-layer — applied per OU (every account in it inherits)services-plane — what Control Tower orchestrates underneathOrganization root(AWS Organizations)home Region (fixed)+ governed RegionsControlTowerAccountFactoryServiceCatalogIdentityCenterLog Archiveimmutable S3Auditroles · 3 SNSSandbox OU (optional)Memberaccount… more memberaccountspreventive (SCP / RCP / declarative) · detective (Config rules) · proactive (CloudFormation hooks)guidance: mandatory · strongly recommended · elective the management account is exemptOrganizationsIdentityCenterOrgCloudTrailConfig+ aggregatorStackSets(baselines)ServiceCatalog
Figure 2. The Control Tower landing zone: a management account on the left (exempt, no workloads), a Security OU holding the two shared accounts, a workload-OU tree on the right, OU-scoped controls across the middle, all sitting on the AWS Organizations services plane it orchestrates.

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:

ComponentWhat it isWho should touch it
org-rootThe AWS Organizations parent holding every OUControl Tower (managed)
mgmt-accountHosts Control Tower, Organizations, Account Factory, Service Catalog, the Identity Center directoryPlatform admins only — no workloads
security-ouFoundational OU holding the two shared accountsControl Tower (don't delete)
log-archiveCentral, write-once S3 for every account's CloudTrail + Config logsCompliance/security, read-mostly
auditCross-account audit roles, three SNS topics, Security Hub aggregationSecurity/compliance teams
sandbox-ou / workload-ouRegistered OUs holding your enrolled member accountsYour teams, under the OU's controls
member-accountWhere workloads actually liveApplication 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:SourceOrgID condition 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.
The rule that gets broken most: the management account is not a workload account. Root and admins there are deliberately exempt from controls so the account can never lock itself out — which means a workload running there runs ungoverned, with the blast radius of your whole organization. Keep it empty.

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.

Any workload OU — controls attach hereGuidance (orthogonal axis)blocks the callflags afterblocks provision① PreventiveSCP / RCP② DetectiveConfig rule③ ProactiveCFN hookmember accountmember accountmember accountMandatoryStrongly recommendedElectiveA control attaches to the OU and covers every account in it. Management account is exempt; from landing zone 4.0, mandatory controls are no longer on by default.
Figure 3. Two orthogonal axes. A control's behavior is how it enforces (preventive / detective / proactive); its guidance is how strongly AWS recommends it (mandatory / strongly recommended / elective). Whichever it is, it attaches to an OU and covers every account inside.
  • 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:

BehaviorMechanismWhen it actsStatus valuesRegion scope
PreventiveSCP / RCP / declarative policy (Organizations)Blocks the API callEnforced / Not enabledAll Regions
DetectiveAWS Config ruleFlags it after the factClear / In violation / Not enabledCT-supported Regions only
ProactiveCloudFormation hookBlocks before provisioningPASS / FAIL / SKIPCFN-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:

Region-deny control — SCP shape (illustrative)
{
  "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.

Workload OU (registered)side paths — same destination, different prerequisitesprovisionbaselineplace in OUregisters productprovisionsalt pathAWSAccountFactoryuser requests① Account Factoryin mgmt-account② Service Catalogprovisioned product③ StackSetsbaseline④ Member accountinherits OU controlsAFC blueprintCFN multi-Region / TF 1-RegionAFT pipelinegit push · own AFT mgmt acctEnroll existing accountneeds exec role · no prior Config
Figure 4. Vending a new account (the numbered spine) versus the side paths — AFC blueprints, the AFT GitOps pipeline, and enrolling an existing account. Same destination, a governed member account; very different prerequisites.
  • A user in the AWSAccountFactory group 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:

#HopWhat happens
1mgmt-account (Account Factory)Request submitted by an AWSAccountFactory member
2service-catalogA provisioned product is created from the Account Factory template
3stacksetsBaseline stacks deployed; default VPC deleted, an aws-controltower-VPC created
4workload-ou / member-accountAccount 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.
Enroll-existing gotchas. An existing account must carry the 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.
If you just need a working mental model, stop here. That is the shape: a fixed account skeleton, controls applied per OU, and a factory that vends governed accounts. The rest is how it stays honest, where it runs, what it costs, and where it bites — for people operating, scaling, or debugging a real landing zone.

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).

④ Remediate — rising severityread-onlymismatchnotify① Daily scanfrom mgmt-account② CompareOrgs / Config state③ Audit SNSdrift notifiedUpdate landing zoneRe-register OUReset landing zone (blocks all else)Detection is automatic; remediation is on you. While drifted, “Enroll account” is disabled.The scan watches structure, not what changes inside an account — cover that with your own Config rules.
Figure 5. Detection is automatic; remediation is not. The daily managed-policy scan from the management account compares Organizations/Config state, notifies the Audit account, and hands you a remediation ladder that runs from harmless (rename an OU) to landing-zone-halting (delete the Security OU).
  • Daily managed-policy scan runs from mgmt-account via AWSControlTowerAdmin.
  • It compares the live Organizations / Config state against the expected controls.
  • The audit account 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:

DriftExampleFix
Resolvable / benignRename a registered OU, change a shared account's emailSelf-resolves on refresh
Move-account driftAn account dragged between OUs outside Control TowerUpdate landing zone + re-register the OU
StructuralDeleted 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.

Two field notes. The daily scan calls Organizations using your management-account API budget — if your own scripts hammer the same Organizations APIs, you can hit the transactions-per-second limit and get throttled. And drift detection watches the structure, not the insides: it will not notice a risky change made inside an individual account that no control covers. For that you still need your own Config rules or EventBridge monitoring.

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.)

Under Control Tower governanceOutside governanceblocks① Home Regionfixed · can't be denied② Governed Regionswatched after re-register OU③ Un-governed Regionunwatched — still usable④ Region-denySCP boundaryPreventive controls are global; detective + proactive controls are Region-scoped.Opting out of a Region does not block it — only the Region-deny control (AWS-GR_REGION_DENY landing-zone-wide, or CT.MULTISERVICE.PV.1 per OU) does.
Figure 6. Governance reach by Region. The home Region is fixed; governed Regions are watched; an un-governed Region is unwatched, not unavailable — people can still deploy there. Preventive controls are global; detective and proactive controls are Region-scoped. Blocking a Region is a separate act: the Region-deny control.
  • 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.
The misconception that costs people: opting out of a Region does not block anyone from deploying there. It only means resources in that Region sit outside Control Tower governance — unwatched, not unavailable. If you actually want to block a Region, that is the Region-deny control.

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.

Config is the bill that surprises people. It charges per configuration item — one record per resource change, per Region. Multiply by every governed account and Region and it adds up fast. AWS softened this in landing zone v3.0+: global resources like IAM users and roles are recorded in the home Region only, instead of once per Region. It is still the line item to watch, and the reason reviewers warn that the abstraction can leave you "paying for resources you didn't know were created." Identity, too, is a choice: the default Identity Center directory is free, but you can self-manage identity (bring your own IdP) in one setting.

The limits worth committing to memory:

LimitValue
Accounts per landing zoneUp to 10,000
SCPs per OU10
Concurrent account operations (Account Factory)5
Concurrent control operations100 queued, 10 in progress
OU registration ceilingCan't register an OU with >1,000 directly nested accounts
General concurrencyRoughly 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:

ApproachWhat you getWhen it wins
Organizations aloneRaw 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 TowerA 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 AcceleratorA 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

  1. AWS — What Is AWS Control Tower? (User Guide). https://docs.aws.amazon.com/controltower/latest/userguide/what-is-control-tower.html
  2. AWS — How AWS Control Tower works (landing-zone structure, StackSets). https://docs.aws.amazon.com/controltower/latest/userguide/how-control-tower-works.html
  3. AWS — About the shared accounts (management, Log Archive, Audit). https://docs.aws.amazon.com/controltower/latest/userguide/special-accounts.html
  4. AWS — About controls in AWS Control Tower (Controls Reference). https://docs.aws.amazon.com/controltower/latest/controlreference/controls.html
  5. AWS — Control behavior and guidance (behaviors × guidance; LZ 4.0 note). https://docs.aws.amazon.com/controltower/latest/controlreference/control-behavior.html
  6. AWS — Provision and manage accounts with Account Factory. https://docs.aws.amazon.com/controltower/latest/userguide/account-factory.html
  7. AWS — Account Factory Customization (AFC) and Partner blueprints. https://docs.aws.amazon.com/controltower/latest/userguide/af-customization-page.html
  8. AWS — Overview of Account Factory for Terraform (AFT). https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html
  9. AWS — About enrolling existing accounts (baseline stack sets, Config prerequisite). https://docs.aws.amazon.com/controltower/latest/userguide/enroll-account.html
  10. AWS — Configure AWS Control Tower without a VPC. https://docs.aws.amazon.com/controltower/latest/userguide/configure-without-vpc.html
  11. AWS — Working with IAM Identity Center and AWS Control Tower. https://docs.aws.amazon.com/controltower/latest/userguide/sso.html
  12. AWS — How AWS Regions work with AWS Control Tower. https://docs.aws.amazon.com/controltower/latest/userguide/region-how.html
  13. AWS — Configure the Region deny control. https://docs.aws.amazon.com/controltower/latest/userguide/region-deny.html
  14. AWS — Detect and resolve drift in AWS Control Tower. https://docs.aws.amazon.com/controltower/latest/userguide/drift.html
  15. AWS — Manage AWS Config costs in AWS Control Tower. https://docs.aws.amazon.com/controltower/latest/userguide/config-costs.html
  16. AWS — AWS Control Tower Pricing. https://aws.amazon.com/controltower/pricing/
  17. AWS — Limitations and quotas in AWS Control Tower. https://docs.aws.amazon.com/controltower/latest/userguide/limits.html
  18. AWS — AWS Control Tower and Landing Zone Accelerator. https://docs.aws.amazon.com/controltower/latest/userguide/about-lza.html
  19. 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/
  20. AWS — Control Tower introduces a Controls-dedicated experience. https://aws.amazon.com/blogs/aws/aws-control-tower-introduces-a-controls-dedicated-experience/
  21. Scale Factory (Rob), Apr 2025 — When Control Tower Drifts (practitioner reality-check). https://scalefactory.com/blog/2025/04/30/when-control-tower-drifts/