For a small web-hosting business where I host multiple clients’ static websites using AWS, primarily S3 + CloudFront.
DNS is hosted and managed through Cloudflare, so Route 53 isn’t part of the setup. ACM is used for SSL certificates where required.
Each client’s website codebase is completely separate, with each client having their own GitHub repository and CI/CD pipeline.
My current setup
I already host a couple of client websites using:
AWS Organisation
│
├── Client A AWS account
│ ├── Development resources
│ └── Production resources
│
└── Client B AWS account
├── Development resources
└── Production resources
So currently I’m doing one AWS account per client, with dev and prod separated within the account.
As I add more clients, I’m wondering whether I should continue with this approach or change the architecture.
The options I’m considering
1. One AWS account per client
This is my current approach:
AWS Organisation
├── Client A account
│ ├── Dev
│ └── Prod
├── Client B account
│ ├── Dev
│ └── Prod
└── Client C account
├── Dev
└── Prod
2. One AWS account per client per environment
AWS Organisation
├── Client A
│ ├── Dev account
│ └── Prod account
├── Client B
│ ├── Dev account
│ └── Prod account
└── Client C
├── Dev account
└── Prod account
This provides stronger environment-level isolation, but obviously results in significantly more AWS accounts.
3. One AWS account for all clients, with separate Terraform states
AWS account
├── Client A → Terraform state A
├── Client B → Terraform state B
└── Client C → Terraform state C
Each client would still have separate resources and Terraform state, but all clients share the same AWS account.
4. One AWS account for all clients with a single Terraform state
AWS account
└── Terraform state
├── Client A
├── Client B
└── Client C
I’m particularly interested in whether my current approach of one AWS account per client with dev/prod inside that account is a sensible long-term architecture, or whether there’s a compelling reason to move to either separate accounts per environment or a shared AWS account with separate Terraform states.
For those running a multi-client AWS hosting setup:
What architecture have you settled on, and what would you do differently if starting again?
I’m especially interested in the practical implications once you get beyond a handful of clients — account management, Terraform, CI/CD, security, billing and operational overhead.
Source: r/aws · by /u/Realistic-Depth-3124