We’re planning for isolated development, testing and production environments in an all-AWS solution. We could have 30-40 people connecting remotely to those environments. Our ideal outcomes are:
- All users connect to a single VPN to access the AWS resources.
- Each user might be allowed to see one/all/combination of those environments.
- Only traffic to AWS resources should go to the VPN - their regular internet traffic shouldn’t.
- We like OpenVPN for wide support among OS’s.
The last time I worked in a similar environment, VPCs were relatively new (our admin managed access with security groups)… so – what are the current recommended solutions for separating Dev/Test/Prod environnments (within a single AWS account), and allowing multiple remote users to securely connect to them? We obviously want good controls over which users see which environments - preferably a web UI.
Being a greenfield situation, we’re open to just about any approach. Things we’ve considered:
- A single VPC segregated by Security Group (limited to 100 security groups - maybe an issue?).
- A single VPC segregated by subnet (currently researching).
- Multiple VPCs, each has its own VPN server and clients have a VPN profile for each (burdensome on client devices).
- Multiple VPCs, each has its own VPN server with “mesh tunnels” between them (seems unwieldy, even with four VPCs).
We’re not opposed to a clean commercial solution, versus setting it all up on our own with OpenVPN and the various AWS tools. We’d hoped the AWS “Client CPN” solution could work, but it only allows full tunnel traffic.
(that’s the question but here’s more on what we’re trying now…)
To control access at the network level we’ve been trying a separate VPC for each environment, and a fourth VPC with an OpenVPN server. There are peering relationships between the VPCs.
In testing, we deployed an EC2 instance into the Development VPC. A local VPN client connects to the VPN and can see/ping the EC2 box in the Development VPC. But, that EC2 instance can’t see/ping the local client at its VPN client address - it seems to not get back through the VPN. Seems related to this URL, so maybe this isn’t supported: