Networking
Most AWS infrastructure runs in eu-central-1 in the account's default VPC with custom subnets. The atrax-node crawlers run in their own dedicated VPCs in eu-west-1, isolated by region — see Atrax service docs for the rationale.
VPC Layout
eu-central-1 (default VPC, both stage and prod)
| Subnet Type |
CIDR Blocks |
AZs |
Used By |
| Public |
172.31.128.0/20, 172.31.192.0/20, 172.31.208.0/20 |
a, b, c |
ALBs, NAT Gateway |
| Private |
172.31.144.0/20, 172.31.160.0/20, 172.31.176.0/20 |
a, b, c |
ECS instances, RDS |
eu-west-1 (atrax-node, dedicated VPCs)
| Environment |
VPC CIDR |
Subnets |
| Stage |
172.30.128.0/17 |
Three public /20 subnets across eu-west-1a/b/c |
| Prod |
172.30.0.0/17 |
Three public /20 subnets across eu-west-1a/b/c |
The eu-west-1 VPCs use public subnets only — atrax-node hosts have an Elastic IP attached directly to each EC2 instance so each crawler egresses from a customer-whitelisted IP. There is no peering between the eu-central-1 and eu-west-1 VPCs; atrax-node reaches atrax-api over the public ALB.
flowchart TB
subgraph euc1["eu-central-1 (default VPC)"]
subgraph Public["Public Subnets"]
PubALB[Public ALB]
IntALB[Internal ALB]
NAT[NAT Gateway]
end
subgraph Private["Private Subnets"]
ECS[ECS Instances]
RDS[RDS Instances]
end
end
subgraph euw1["eu-west-1 (atrax-node VPC)"]
subgraph PublicW["Public Subnets"]
NodeEC2[Atrax-node EC2 + EIP]
end
end
Internet --> PubALB
VPN[Client VPN] --> IntALB
VPN --> RDS
ECS --> NAT --> Internet
PubALB --> ECS
IntALB --> ECS
ECS --> RDS
NodeEC2 --> Internet
NodeEC2 -->|"REST (public ALB)"| PubALB
Load Balancers
Stage
| ALB |
Scheme |
Hosts |
stage-euc1-core-public-alb |
Internet-facing |
core-api.stage.cookiehub.net, atrax-api.stage.cookiehub.net, dash.stage.cookiehub.net |
stage-euc1-core-internal-alb |
Internal |
Internal services |
Production
| ALB |
Scheme |
Hosts |
prod-euc1-core-public-alb |
Internet-facing |
atrax-api.cookiehub.net |
prod-euc1-core-internal-alb |
Internal |
vault-api.internal.cookiehub.net |
The prod public ALB exists so atrax-node in eu-west-1 can reach atrax-api over the internet (no cross-region peering). Other prod services remain internal.
DNS
Public Zones
| Zone |
Records |
stage.cookiehub.net |
core-api.stage.cookiehub.net, atrax-api.stage.cookiehub.net, dash.stage.cookiehub.net |
cookiehub.net |
atrax-api.cookiehub.net, plus production records |
Private Zones (VPC-only)
| Zone |
Example Records |
internal.stage.cookiehub.net |
Internal stage service discovery |
internal.cookiehub.net |
vault-api.internal.cookiehub.net, database endpoints |
Private zones resolve only within the VPC or over the VPN connection.
VPN
AWS Client VPN with certificate-based mutual authentication.
| Setting |
Value |
| Authentication |
Mutual (certificate-based via EasyRSA CA) |
| Split tunnel |
Enabled (only VPC traffic goes through VPN) |
| Session timeout |
8 hours |
| Access |
All VPC resources — ALBs, RDS, EC2 instances |
See VPN Access runbook for certificate setup.
Security Groups
Traffic is restricted between components via security groups:
| Group |
Allows Inbound From |
Port |
| ALB SG |
Internet (public) or VPN (internal) |
443 |
| ECS SG |
ALB SG |
Service port (3000) |
| RDS SG |
ECS SG, VPN SG, Dashboard SG |
3306 / 5432 |
NAT Gateway
ECS instances in private subnets reach the internet (ECR image pulls, external APIs) via a NAT Gateway in the public subnet. Outbound-only — no inbound traffic from the internet reaches private subnets directly.
External Networking
| Provider |
Purpose |
| Cloudflare |
DNS for cookiehub.com (not in AWS), Pages for docs site |
| Scaleway |
Edge PHP servers (separate network, not AWS) |
| AWS CloudFront |
CDN for widget assets + Lambda@Edge |