Skip to content

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
AWS CloudFront CDN for widget assets + Lambda@Edge