Landing Zones & Control Tower
Landing Zones & Control Tower
A Landing Zone is the multi-account AWS environment that your entire organization runs inside. It is not a single service or a checkbox — it is the secure, governed foundation on which every workload, every team, and every compliance requirement sits. Getting it wrong at the start means retrofitting security controls onto hundreds of accounts under production pressure. Getting it right means your platform team can provision a new team environment in minutes with security built in by default.
This lesson covers the four pillars of a production Landing Zone: baseline account topology, Organizational Unit (OU) design, Service Control Policies (SCPs) as preventive guardrails, and centralized logging. These are not concepts used only at hyperscaler scale — they are the baseline expectation at any serious company from Series B onward.
Baseline Account Topology
The first principle of Landing Zone design: never run workloads in the management (root) account. The management account has unrestricted access to all member accounts. If it is compromised or misconfigured, everything in your organization is at risk. AWS recommends keeping it empty of workloads and restricting human access to near-zero.
A mature baseline topology uses at minimum these dedicated accounts:
- Management Account — owns the AWS Organization. Only used by platform/cloud-ops. Hosts AWS Control Tower, AWS Organizations, consolidated billing, and nothing else. Human login is rare and requires MFA + break-glass process.
- Log Archive Account — a write-once destination for all organization-wide logs: CloudTrail, AWS Config, VPC Flow Logs, and S3 Access Logs. Workload accounts can ship to it but cannot delete from it. Even organization admins should not have delete permission on the log bucket — enforce this with an S3 Object Lock policy.
- Audit / Security Tooling Account — runs Security Hub, GuardDuty aggregator, Inspector, and your SIEM integration. Has read-only cross-account access into all member accounts. Security team owns this account; it is not shared with developers.
- Shared Services Account — hosts centrally-shared infrastructure: Transit Gateway, Route 53 Resolver, internal CA (ACM PCA), shared AMI pipeline, artifact repositories (ECR, CodeArtifact). All workload accounts peer or attach through here.
- Workload Accounts (per environment) — dev, staging, and prod are separate AWS accounts, not separate VPCs in the same account. Account-level isolation is the strongest blast radius control AWS offers: an IAM misconfiguration in dev cannot affect prod resources.
- Network Account — owns the Transit Gateway and egress inspection (Network Firewall or third-party appliance). Centralizes routing policy without giving workload accounts control over the network fabric.
OU Design: Organizing Accounts into Policies
AWS Organizations groups accounts into Organizational Units (OUs). OUs exist for one reason: to apply Service Control Policies (SCPs) consistently to a group of accounts without touching each account individually. A clean OU hierarchy makes SCP management tractable at hundreds of accounts.
A standard top-level OU structure recommended by AWS and adopted by most large organizations:
- Root — applies baseline SCPs that apply to everyone, including the management account restrictions.
- Infrastructure OU — contains the Log Archive, Audit, Shared Services, and Network accounts. SCPs here are permissive for platform tooling but block workload-like actions (no EC2 launch from Log Archive).
- Workloads OU — subdivided into
SDLC(dev/staging) andProduction. Production-specific SCPs enforce stricter controls: no disabling CloudTrail, no public S3 buckets, no leaving allowed regions. - Sandbox OU — developer experimentation accounts. Aggressive cost limits via SCPs (block expensive instance families), mandatory auto-termination of resources, and no VPC peering to production networks.
- Suspended OU — accounts being offboarded. An SCP attached here denies all actions, effectively freezing the account while it awaits deletion or audit.
Service Control Policies: Preventive Guardrails
Service Control Policies (SCPs) are JSON-based IAM-syntax policies attached to the root, an OU, or an individual account in AWS Organizations. They define the maximum permissions boundary for everyone in that scope — including the account's own root user. An SCP does not grant permissions; it filters what IAM policies inside the account can allow.
Critical SCP patterns every Landing Zone must implement:
FullAWSAccess managed SCP that AWS attaches to every new OU. If you remove FullAWSAccess and add only your restrictive SCPs, you must explicitly allow every action you want to permit. Most teams accidentally lock out their own platform team. The safe approach: keep FullAWSAccess attached as a baseline and layer deny-only SCPs on top of it.
AWS Control Tower: Automating the Landing Zone
AWS Control Tower is the managed service that provisions and governs a Landing Zone. It sets up the baseline OU structure, deploys pre-configured accounts (Log Archive and Audit), enables an organization-wide CloudTrail trail, and provides a catalog of guardrails — a mix of SCPs (preventive) and AWS Config rules (detective).
Control Tower's core primitives:
- Account Factory — a Service Catalog product that provisions a new member account from a template, places it in the correct OU, applies account-level configurations (baseline IAM roles, budget alerts, VPC settings), and enrolls it into all organization-wide services. Account Factory for Terraform (AFT) is the Infrastructure-as-Code version — each account is a
terraform apply. - Guardrails — pre-built controls categorized as Mandatory (cannot be disabled, e.g., CloudTrail enabled), Strongly Recommended, and Elective. As of 2025, Control Tower ships with 450+ guardrails. Enable the full Strongly Recommended set on day one.
- Control Tower Dashboard — gives a compliance posture view across all enrolled accounts. Non-compliant resources surface here before they become incidents.
Centralized Logging Architecture
Every API call, resource change, and network flow in your organization must land in the Log Archive account in a tamper-evident, immutable store. This is not optional — it is the evidence chain for security incidents, compliance audits, and post-mortems.
The correct logging stack:
- AWS CloudTrail — Organization Trail: a single trail enabled from the management account that captures management events from all current and future member accounts into the Log Archive S3 bucket. Enable data events for S3 and Lambda selectively (they are high-volume and expensive to capture wholesale).
- AWS Config — Organization Aggregator: records configuration state and changes for all resource types across all accounts and regions. Feeds into Config Rules for compliance evaluation. The aggregator view in the management or Audit account gives a single-pane view of every resource in the organization.
- VPC Flow Logs: enabled at the VPC level in each workload account, delivered to the centralized log bucket (or a regional CloudWatch Logs group that is then exported). Use
v5format to capture traffic metadata including TCP flags and packet-level statistics. - S3 Object Lock: the log bucket must use
COMPLIANCEmode Object Lock with a minimum 90-day retention. In COMPLIANCE mode, no user — including the account root — can delete or shorten the retention period. This provides a tamper-evident audit trail even if an attacker compromises organization admin credentials.
Enabling an organization-wide CloudTrail from the management account with Terraform:
enable_log_file_validation = true). This generates a SHA-256 digest file every hour that chains each log file. If an attacker deletes or modifies a log file, the digest chain breaks — the AWS CloudTrail Validate Logs CLI command will detect tampering even if the attacker also deleted the digest files (the chain cannot be reconstructed without the private key AWS controls).