skylynk.Book a call
Blog
2026-03-106 min read

The AWS Multi-Account Strategy Most Companies Get Wrong

One account for everything

The most common starting point for AWS usage is a single account that accumulates everything: dev, staging, and production workloads sharing the same IAM namespace, VPC, and billing. Security groups that started as "temporary" become permanent. IAM policies grow by accretion. Nobody fully understands what is allowed and what is not, because the policy list is three hundred entries long and nobody has reviewed it in a year.

The blast radius of a mistake in this setup is the entire organization. One misconfigured security group, one overly permissive S3 bucket policy, one leaked credential — and everything is exposed. Dev and prod share a network boundary, so a compromise in a non-critical workload can pivot to production. Cost allocation is impossible because everything runs in the same account and the bill is one opaque number.

This works until it does not. The triggering event is usually a security incident, a compliance audit, or a cost review that reveals spending nobody can explain. At that point the remediation is painful because you are untangling a year or more of compounded decisions in a live environment.

Why account-per-environment is not enough

The first instinct after outgrowing a single account is to create three accounts: dev, staging, and prod. This is better — prod is now isolated from dev mistakes — but it misses most of the value available from a proper multi-account structure.

You still have no guardrails. Nothing prevents an engineer from creating a public S3 bucket in prod, disabling CloudTrail, or using an instance type that is not approved. There is no blast radius containment per team — if your payment processing team and your analytics team share the prod account, a mistake in analytics can affect payment processing. Compliance enforcement is manual: you have to check each account individually and hope nobody has drifted from the baseline.

Billing is still aggregated at the account level, so if your prod account runs fifty services you still cannot tell from the bill which team or application owns which cost. Cost allocation requires tagging, and tagging without enforcement is a suggestion that most people ignore.

The jump from account-per-environment to a proper landing zone is not just about adding accounts. It is about adding the governance layer that makes accounts meaningful.

What a proper landing zone looks like

A functional landing zone has AWS Organizations at the center, with OUs (Organizational Units) structured by workload and environment. A common structure: a root OU containing a Security OU (logging account, security tooling account), a Shared Services OU (DNS, shared networking, build tooling), and one OU per major workload with child accounts for dev, staging, and prod within each workload.

Service Control Policies attached to OUs are the enforcement mechanism. An SCP on the root OU that prevents disabling CloudTrail applies to every account in the organization regardless of what individual account admins do. SCPs that prevent creating public S3 buckets, that restrict which regions are available, that require MFA for root actions — these apply uniformly and cannot be overridden by account-level policies.

Account vending automates the creation of new accounts with the right baseline already applied: CloudTrail enabled, GuardDuty enrolled, Config rules active, required tags enforced. Control Tower provides this out of the box for AWS-managed baseline. For teams with specific requirements, custom Terraform modules that invoke the Organizations API can implement the same pattern with more flexibility.

A shared services account provides centralized logging (CloudTrail logs from all accounts to an immutable S3 bucket here), centralized security tooling (Security Hub aggregator, GuardDuty admin account), and shared DNS (Route 53 Resolver for split-horizon resolution across accounts). Transit Gateway handles network connectivity between accounts when workloads need to communicate.

The governance layer people skip

The governance layer is what most teams skip when they set up a multi-account structure, and it is what makes the structure worth having.

SCPs are not punitive controls — they are the floor below which no account in the organization can fall. Think of them as the set of things that should be true everywhere, always, regardless of who is operating the account. CloudTrail always enabled. No public S3 buckets (outside specific, explicitly whitelisted accounts). No regions outside your approved list. No root account API key creation. These are not restrictions on engineers — they are guarantees to your security and compliance teams.

Tag policies enforced at creation mean resources arrive with the required tags attached, not as a post-hoc cleanup exercise. AWS Organizations tag policies can enforce that every resource has `env`, `team`, and `service` tags. AWS Config rules can alert or auto-remediate when resources lack required tags. Cost Explorer is useful for cost allocation only when your tags are complete and consistent.

AWS Config with a managed rule set gives you continuous compliance checking: root MFA enabled, no unrestricted SSH ingress, encryption at rest on EBS and RDS, no overly permissive IAM policies. Config Rules can trigger Lambda-based auto-remediation for violations that are safe to fix automatically.

Budget alerts per account, forwarded to team-owned Slack channels or email aliases, make cost ownership real. When a team sees their account budget alert fire, they take action. When cost is aggregated at the organization level, nobody owns it.

Migration path if you are already in a mess

You do not need to start over. Incremental account separation is possible and is the right approach for organizations that have live workloads they cannot simply move.

The sequence that works: get the organization structure right first. Create the org, create the OUs, apply SCPs to the root. This does not require moving any workloads — it establishes the governance framework that new and migrated accounts will inherit. Enable Control Tower if you want the managed baseline, or apply your own IaC baseline to the org.

Next, create new accounts for net-new workloads. Any new project starts in a properly structured account with the baseline applied. This prevents the problem from getting worse while you work on the existing accounts.

Then migrate existing workloads incrementally, starting with the lowest-risk ones. A dev environment is easier to migrate than prod. A stateless application is easier than a stateful database. The migration of each workload is an opportunity to clean up: standardize IaC, apply tagging, document architecture decisions.

Prod migrations of critical workloads should be planned and executed carefully. Blue-green migration — stand up the workload in the new account, shift traffic gradually, monitor, decommission old environment — works for most web-tier applications. Stateful workloads (databases, queues) need more careful planning around data migration and cutover.

What Skylynk does

Skylynk's cloud architecture engagement covers both greenfield landing zone design and migration from existing single-account or loose multi-account setups. The deliverables include: Organizations structure and SCP design, Terraform modules for account vending, baseline controls deployment across all accounts, and a migration plan that sequences workload moves by risk and dependency.

For teams already running in a messy multi-account setup, we start with an assessment that maps the current state, identifies the highest-risk gaps, and prioritizes remediation. The cloud architecture service page describes the full engagement structure. If your current account structure looks like what is described in section one of this post, this is worth a conversation.

AWS OrganizationsLanding ZoneArchitecture
Cloud Architecture

Ready to fix this?

Skylynk works with engineering teams to solve exactly these problems — no generic advice, no long assessments before any value. The Cloud Architecture engagement is built around your specific situation.

See the Cloud Architecture service