1.Why production should not live in one undifferentiated account
An AWS account is a hard boundary — IAM permissions, resource limits, even a compromised credential all stop at the account edge. Putting development, staging and production in one account means a mistake in one can reach the others.
Key features
- An account is a real security boundary, not just a folder
- A leaked credential in dev cannot reach a separate prod account
- Service quotas are per-account — one workload cannot starve another
- The bill is also per-account, making cost attribution exact
- Splitting later means migrating live resources, not just relabeling
- One account for everything
- A dev IAM policy typo can touch a prod resource
- Runaway test traffic competes with prod for the same quotas
- One compromised credential is a blast radius over everything
- The bill is one number — cost by environment needs tagging discipline
- One account per environment
- IAM policies in dev cannot reach prod resources at all
- Each environment has its own service quotas
- A compromised dev credential stops at the dev account boundary
- The bill is naturally split per environment, no tagging required
Command
One account, three environments Three accounts, one per environment
───────────────────────────── ─────────────────────────────
dev + staging + prod resources → 111111111111 dev
share IAM, quotas, blast radius 222222222222 staging
333333333333 prodAn account is a real security boundary. Separating dev/staging/prod by account, not by naming convention, stops a mistake in one reaching another.