Skip to main content

AWS Landing Zones

1) Concept & Why

1.1 Definition (plain English)

A landing zone is a pre‑governed, multi‑account AWS foundation: identity, networking, guardrails, logging, and cost controls — delivered as code so teams can build quickly and safely.

1.2 When to invest

  • Multiple teams/environments, regulated data, or SaaS multi‑tenancy.
  • Early GenAI adoption where prompts/outputs must stay private.

1.3 GenAI add‑ons (beyond a generic landing zone)

  • Private model access (Interface VPC Endpoints/PrivateLink to Bedrock).
  • Model governance (IAM/SCP allow/deny lists by model/region).
  • Safety (Bedrock Guardrails at app tier; log moderation hits).
  • Token & cost telemetry (latency, token count, per‑tenant showback).

2) Reference Architecture

2.1 Organization & accounts

AWS Organization (root)
├─ OU-Prod → prod-app, prod-data
├─ OU-NonProd → dev, stage
├─ OU-Sandbox → time‑boxed experiments
└─ Shared → Security | Logging | Networking | Tooling

Why multi‑account? Blast‑radius control, clearer budgets, cleaner IAM, easier compliance.

2.2 Identity & access

  • IAM Identity Center → permission sets (Builder/Deployer/ReadOnly).
  • SCPs at OU level: region allowlist, mandatory tags, deny public access.
  • Least privilege: narrow roles for CI/CD and ops; separate duties.

2.3 Networking

  • Central Networking account: Transit Gateway/peering, shared VPC Endpoints.
  • PrivateLink to Bedrock/S3/STS/ECR; no Internet/NAT for inference.
  • Optional VPC Lattice to publish internal services across accounts.
AWS Organization (root)
├─ OU-Prod ────────────────────────────────────────────────────────────────┐
│ └─ Account: prod-app │
│ VPC (10.0.0.0/16) │
│ ├─ Subnets (App) │
│ │ └─ ECS/Lambda/EC2 (GenAI app/agent) │
│ │ │ │
│ │ └─ IAM role (from Identity Center permission set) │
│ │ └─ Policies: bedrock:InvokeModel, kms:Decrypt, logs:Put* │
│ │
│ ├─ Interface VPC Endpoint: com.amazonaws.eu-west-2.bedrock │
│ │ (PrivateLink) │
│ │ └─ Endpoint SG restricts to app subnets │
│ │
│ └─ Route 53 Resolver + TGW to shared services │
│ │
├─ OU-Shared ────────────────────────────────────────────────────────────────────────┤
│ ├─ Account: Networking │
│ │ ├─ Transit Gateway / Peering │
│ │ └─ Shared Interface Endpoints (S3, STS, ECR, optional Bedrock) │
│ ├─ Account: Logging │
│ │ └─ Central CloudTrail, VPC Flow Logs, CloudWatch Log groups │
│ └─ Account: Security │
│ └─ GuardDuty, Security Hub, Config Aggregator │
│ │
└─ Guardrails (applied at OU via SCPs) │
• Region allowlist • Mandatory tags • Block public S3/IGW for workloads │
• Model allow/deny lists (via IAM + SCP conditions) │

Bedrock service (eu-west-2) <─── PrivateLink ───> Endpoint in prod-app VPC │

Logs/metrics → Logging account; Costs → CUR + Budgets (per-tag/OU showback) │

3) Security, Observability, FinOps

3.1 Security baseline

  • Prevention: SCPs (deny regions, block public S3/SGs), service policies.
  • Detection: GuardDuty, Config/Conformance Packs, Security Hub, Detective.
  • Response: Central incident playbooks; delegated admin.
  • Encryption & secrets: KMS for data at rest; Secrets Manager for credentials.

3.2 Observability & audit

  • Org‑level CloudTrail, VPC Flow Logs, CloudWatch Logs to Logging account.
  • App telemetry: latency, error rate, token counts, model/version, safety flags.
  • Traceability: correlate prompt → model → output → user/action.

3.3 FinOps

  • Standard tags (env, app, owner, cost-center, tenant).
  • CUR, Budgets, Cost Anomaly Detection, per‑BU dashboards.
  • Bedrock Application Inference Profiles for clean showback.

3.4 Policy‑as‑code (samples)

Deny unapproved regions (SCP)

{
"Version": "2012-10-17",
"Statement": [{
"Sid": "DenyUnsupportedRegions",
"Effect": "Deny",
"Action": "*",
"Resource": "*",
"Condition": {"StringNotEquals": {"aws:RequestedRegion": ["eu-west-2","eu-west-1"]}}
}]
}

Require tags (SCP pattern)

{
"Version": "2012-10-17",
"Statement": [{
"Sid": "RequireStandardTags",
"Effect": "Deny",
"Action": ["ec2:RunInstances","s3:CreateBucket","bedrock:InvokeModel"],
"Resource": "*",
"Condition": {"Null": {"aws:RequestTag/app": "true"}}
}]
}

Restrict Bedrock model (IAM)

{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AllowOnlyApprovedModels",
"Effect": "Deny",
"Action": ["bedrock:InvokeModel","bedrock:InvokeModelWithResponseStream"],
"Resource": ["arn:aws:bedrock:eu-west-2::foundation-model/anthropic.claude-3-haiku-20240307"]
}]
}

4) Delivery & Operations

4.1 CI/CD & account vending

  • IaC everywhere (Control Tower/LZA + StackSets/CDK/Terraform).
  • Golden templates: VPC, endpoints, logging, Bedrock policy packs.
  • Automated account vending applies baselines on creation.

4.2 First 30/60/90 plan

  • 0–30: Organizations, Control Tower, OUs, logging, SSO; PrivateLink for Bedrock.
  • 30–60: Security Hub/GuardDuty/Config, CUR dashboards, sample Chat+RAG pipeline.
  • 60–90: LZA‑style conformance packs, model allowlists, VPC Lattice, per‑tenant cost.

4.3 Pitfalls → fixes

  • Internet hairpinning → Interface Endpoints, block public egress.
  • Unattributed spend → mandatory tags + showback.
  • IAM sprawl → permission sets + templates.
  • Snowflake networks → shared blueprint + PR reviews.
  • Security stalls POCs → pre‑approved archetypes + self‑service within guardrails.

4.4 Checklist

  • Control Tower + OUs + delegated admins
  • Central logging (CloudTrail, VPC Flow, CloudWatch)
  • Identity Center groups/permission sets
  • PrivateLink (Bedrock + core services)
  • SCPs (regions/tags/public access)
  • Security Hub/GuardDuty/Config
  • CUR + budgets + anomaly detection
  • Golden VPC + policy packs (StackSets)
  • Account vending workflow
  • App guardrails + token/cost telemetry

4.5 What Control Tower adds vs DIY

  • Out‑of‑the‑box landing zone: opinionated setup of Organizations, OUs, SSO (Identity Center), centralized logging, and baseline controls without writing glue code.
  • Guardrails catalog: prebuilt preventive (SCP) and detective (AWS Config) controls you can enable per OU with a few clicks; unified compliance dashboard.
  • Account Factory: standardized account vending via Service Catalog; new accounts are created and auto‑enrolled with baselines/guardrails.
  • Drift detection & remediation: detects when enrolled accounts deviate from guardrails/baselines and can trigger remediation.
  • Lifecycle orchestration: consistent rollout of new controls/regions across OUs and accounts at scale.
  • First‑party integration path: works cleanly with Landing Zone Accelerator (LZA) and AFT (Account Factory for Terraform) for IaC‑driven vending.

You can build most of this with raw Organizations + StackSets + Config + custom pipelines; Control Tower packages and operates it as a managed, upgradeable baseline so you spend time on product/GenAI features instead of governance plumbing.

4.6 With vs Without Control Tower (mini)

CapabilityWith Control TowerWithout Control Tower (DIY)
Baseline setup (OUs, SSO, central logging, initial guardrails)Opinionated, packaged setup via CTAssemble Organizations, Identity Center, CloudTrail, S3, Config, StackSets yourself
Guardrails mgmt (preventive/detective)Catalog of SCPs & Config rules; enable per OU with status viewAuthor/maintain SCPs & Config rules; build dashboards/alerts
Account vendingAccount Factory with auto-enrollment to baselinesBuild Service Catalog/Automation/Lambda pipelines using CreateAccount
Drift detection & remediationBuilt-in drift checks for enrolled accounts with remediation hooksRoll your own with Config, StackSets drift, custom Lambdas
Compliance viewCentral landing zone compliance dashboardAggregate Security Hub/Config yourself; maintain reporting
Lifecycle orchestrationPush new controls/region policies across OUs consistentlyPipeline your own rollouts and handle exceptions manually
ExtensibilityFirst-party integration with LZA & AFTPossible, but you must integrate and operate
Ops ownershipAWS manages the landing zone frameworkYou own design, code, upgrades, break-fixes