delivered for clients · names withheldimplementation Cloud and infrastructure

Cloud landing zone and account vending

Cohash builds AWS and Azure landing zones as code. First comes the organization or management group hierarchy, then identity federation, central logging, the network hub and preventive guardrails. After that we add account or subscription vending, so teams request a new environment through a pull request. We usually use Control Tower with Account Factory for Terraform on AWS, and the Azure Verified Modules for platform landing zones on Azure.

  1. 01Hierarchy and guardrail design
  2. 02Identity and access
  3. 03Logging, security and network hub
  4. 04Vending pipeline
  5. 05Migrate existing accounts
case-study / cloud-landing-zone delivered
beforeAccounts and subscriptions created by hand afterGoverned landing zone with account vending
01 · REQUEST AND IDENTITY 02 · LANDING ZONE CODE 03 · PLATFORM 04 · CENTRAL SERVICES Vending pull request: owner · cost center · env Vending pull request owner · cost center ·env Entra ID: groups · break-glass alerts Entra ID groups · break-glassalerts Vending pipeline: AFT · AVM subscription vending Vending pipeline AFT · AVM subscriptionvending Guardrails: SCPs · Azure Policy deny Guardrails SCPs · Azure Policydeny AWS Control Tower OUs: enrolled accounts AWS Control TowerOUs enrolled accounts Azure management groups: AVM platform landing zone Azure managementgroups AVM platform landingzone Hub network: egress · DNS · on-premises Hub network egress · DNS ·on-premises Log archive: CloudTrail · activity log Log archive CloudTrail · activitylog Security tooling: central account Security tooling central account
case file

The story

Told without the client's name or anything that could identify them.

what happened

A media company's cloud team created accounts and subscriptions by hand, so each one arrived with different settings and new environments were a long wait. Logs lived in each account, guardrails were written in a wiki rather than enforced, and the Azure side still depended on Blueprints and the archived enterprise-scale module. We designed the organizational unit and management group hierarchy around environments and risk, federated access through Entra ID, and built central logging, security tooling and a hub network as code. Account Factory for Terraform on AWS and a subscription vending module on Azure now create environments from a pull request. Existing accounts were enrolled with guardrails in audit mode first, and Blueprint assignments were converted to deployment stacks.

why it was urgent

Azure Blueprints retires on 31 January 2027, with a phased retirement that began 31 July 2026. Microsoft archived the caf-enterprise-scale Terraform module on 15 September 2026 and points users to Azure Verified Modules for platform landing zones. Teams on either have a dated reason to rebuild their foundation.

problem statement
  • openIt takes weeks to get a new account or subscription, and no two show up configured the same way.
  • recurringLogs live in each account, so an incident means asking every team for access.
  • blockedYour Azure landing zone still depends on Blueprints or the archived enterprise-scale module.
  • openThe guardrails exist, in a wiki. No service control policy or Azure Policy actually enforces them.
architecture

The estate, before and after

before
before

Before: accounts and subscriptions created by hand

Each account or subscription was set up by hand with its own logging and access. Guardrails lived in a wiki, and the Azure foundation relied on Blueprints and the archived enterprise-scale module.

Before: accounts and subscriptions created by hand Each account or subscription was set up by hand with its own logging and access. Guardrails lived in a wiki, and the Azure foundation relied on Blueprints and the archived enterprise-scale module. 01 · REQUESTS 02 · SETUP 03 · CLOUD ESTATE request reference click setup click setup assignments Environment requests tickets · email Guardrail wiki not enforced Manual account setup different every time Azure Blueprints retiring 31 January 2027 AWS accounts local logs · local users Azure subscriptions enterprise-scale module
Read the diagram as text
  1. Environment requests → Manual account setup: request
  2. Guardrail wiki → Manual account setup: reference
  3. Manual account setup → AWS accounts: click setup
  4. Manual account setup → Azure subscriptions: click setup
  5. Azure Blueprints → Azure subscriptions: assignments
after
after

After: a landing zone with vending as code

A pull request triggers Account Factory for Terraform or subscription vending, which places the new environment under the right hierarchy level with guardrails and baselines applied. Logs flow to a central archive and access is federated through Entra ID.

After: a landing zone with vending as code A pull request triggers Account Factory for Terraform or subscription vending, which places the new environment under the right hierarchy level with guardrails and baselines applied. Logs flow to a central archive and access is federated through Entra ID. 01 · REQUEST AND IDENTITY 02 · LANDING ZONE CODE 03 · PLATFORM 04 · CENTRAL SERVICES trigger new account new subscription SCPs policy permission sets role assignments org trail log export peering findings Vending pull request owner · cost center · env Ex Entra ID groups · break-glassalerts Vending pipeline AFT · AVMsubscription vending Guardrails SCPs · Azure Policy deny AWS Control Tower OUs enrolled accounts Azure management groups AVM platform landing zone Hub network egress · DNS · on-premises Log archive CloudTrail · activity log Security tooling central account
Read the diagram as text
  1. Vending pull request → Vending pipeline: trigger
  2. Vending pipeline → AWS Control Tower OUs: new account
  3. Vending pipeline → Azure management groups: new subscription
  4. Guardrails → AWS Control Tower OUs: SCPs
  5. Guardrails → Azure management groups: policy
  6. Entra ID → AWS Control Tower OUs: permission sets
  7. Entra ID → Azure management groups: role assignments
  8. AWS Control Tower OUs → Log archive: org trail
  9. Azure management groups → Log archive: log export
  10. AWS Control Tower OUs → Hub network: peering
  11. Log archive → Security tooling: findings
results

What the client got

What changed for the client once the work was done. Described, not scored: we don't publish client figures.

  1. result 01

    New environments come from a pull request

    Teams request an account or subscription with owner, cost center and environment in a pull request, and vending applies the same baseline customizations every time.

  2. result 02

    Guardrails are enforced, not documented

    Service control policies and Azure Policy deny effects apply by level of the hierarchy, and each control ran in audit mode against existing accounts before enforcement.

  3. result 03

    Logs are in one place

    We set up organization-wide CloudTrail and activity log export into a central log archive. An incident no longer starts with asking each team for access.

  4. result 04

    Access is federated with break-glass alerting

    We mapped Entra ID groups to permission sets and Azure roles, and break-glass accounts alert whenever they're used.

  5. result 05

    Nothing depends on Blueprints

    Blueprint assignments were converted to deployment stacks and the archived enterprise-scale module was replaced with Azure Verified Modules ahead of the 31 January 2027 retirement.

what can go wrong

Risks we plan for

  1. Guardrails that block real work

    Switch a deny policy on without an audit period and deployments break. Each control runs in audit mode against existing accounts first.

  2. Network design locked in too early

    IP ranges and hub topology are painful to change once workloads sit on them. The address plan leaves room for on-premises ranges, mergers and regions you haven't opened yet.

  3. A landing zone nobody can change

    Click-built or vendor-only setups drift. Everything, including guardrails, lives in code with a named platform owner.

ai in this move

Where AI helps, and where it needs guardrails

Microsoft publishes an Azure Blueprints migration skill for GitHub Copilot that helps convert artifacts to deployment stacks, and it warns that the output has to be reviewed. We use tools like that for first drafts. Landing zones need a pattern for AI workloads now as well. Model endpoints stay in approved regions, agent identities get their own accounts or subscriptions, and MCP servers are reachable only through the hub.

forward deployed engineers →
you keep

What you're left with

We write these for your setup, and they're working documents. Your team should be able to keep things running from them long after we've gone.

  • design01

    Landing zone architecture with hierarchy, guardrails and network design

    yours to keep
  • design02

    Landing zone code in Terraform, Bicep or both, with pipelines

    yours to keep
  • code03

    Account or subscription vending pipeline with baseline customizations

    yours to keep
  • document04

    Identity federation and break-glass procedure

    yours to keep
  • plan05

    Migration plan for existing accounts, subscriptions and Blueprint assignments

    yours to keep
field notes

Learn the background

Terms from this page in plain English. If you want the why, the field note behind it is right there.

01Break-glass accounts
Emergency admin accounts excluded from normal access policies. You only use them when everything else has failed, and you watch them closely.in context →
02Drift
When a live configuration slowly wanders away from what you intended, often through emergency edits nobody tracked.in context →
03Egress
Data leaving a cloud provider's network. Getting data in is free. Getting it out is billed by the gigabyte.in context →
The data layer 01 Workloads that read it layer 02 One primary cloud layer 03 Short-list exceptions layer 04 Egress on crossings
field note · 8 min · 3-question check The multi-cloud tax, and how to stop paying it the ideaRun each workload next to its data, and price every crossing between clouds. read the note
talent and delivery · governed landing zone with account vending

Certified engineers, wherever you need them.

Some clients want a project team, some want a couple of engineers on theirs. Either works. Onsite, nearshore or offshore, with handovers across time zones that keep things moving.

Onsite

Engineers at your sites in the US

Nearshore

Overlapping hours with US teams

Offshore

Overnight progress on your backlog

All time zones

Coverage handed over across time zones

24-hour coverage · US Central time
OnsiteUS business hours
Nearshoreoverlapping US hours
Offshoreovernight progress
Combinedhandover, not hand-off
01Should we use Control Tower or build our own on AWS?

Usually Control Tower with Account Factory for Terraform. AWS keeps the core controls maintained and AFT gives you GitOps vending. A custom build only earns its keep when you need controls or account structures that Control Tower can't express.

02What replaces Azure Blueprints?

Microsoft recommends deployment stacks, with template specs as another option. Landing zones built on the old enterprise-scale module should move to Azure Verified Modules for platform landing zones.

03Can we keep our existing accounts?

Yes. Existing AWS accounts can be enrolled in Control Tower and Azure subscriptions moved under new management groups. Guardrail findings are fixed in audit mode before enforcement.

04How long does a landing zone take?

Mostly on what's already there. The number of accounts or subscriptions, the connectivity you need and the controls your compliance team asks for all move the date. A greenfield foundation goes faster than enrolling a big existing estate.

sources 3 sources linked last checked 2026-10-20 content fingerprint 773f6e72
  1. 01Microsoft Learn: Azure Blueprints overview and retirementlearn.microsoft.com ↗
  2. 02GitHub: terraform-azurerm-caf-enterprise-scale (archived 15 Sep 2026)github.com ↗
  3. 03AWS: Account Factory for Terraform overviewdocs.aws.amazon.com ↗
Reviewed by the Cohash team Product names are trademarks of their owners. how we handle facts and data →
next step

Planning this move?

A 30-minute working session with a senior engineer. No slides.

useful to bring
  • The platform and the version you're on
  • Where you need to get to, and by when
  • What's custom: rules, plugins, integrations
  • Any audit finding or deadline driving it