Project

General

Profile

AWS Infrustructure » History » Version 2

David Leedom, 04/01/2026 07:31 PM

1 2 David Leedom
# AWS Infrastructure Context Document
2
3
**Owner Account ID:** 256086846830
4
**Region:** us-east-1 (US East - N. Virginia)
5
**Last Updated:** March 31, 2026
6
7
---
8
9
## VPCs
10
11
### Catalyst Secure VPC (Primary / Private VPC)
12
13
- **VPC ID:** vpc-07f5fb32f92605bb9
14
- **IPv4 CIDR:** 10.20.0.0/16
15
- **Default VPC:** No
16
- **DNS Resolution:** Enabled
17
- **DNS Hostnames:** Enabled
18
19
This is the target VPC for all infrastructure. It contains both public and private subnets. Servers are being migrated here from the Public Default VPC in phases.
20
21
**Subnets:**
22
23
- Public subnet(s) in us-east-1a and us-east-1b — used for internet-facing services (WireGuard VPN, future reverse proxy)
24
- Private subnet(s) in us-east-1a and us-east-1b — used for all application servers, databases, and internal services
25
26
**Networking:**
27
28
- Internet Gateway attached for public subnet internet access
29
- NAT Gateway in the public subnet — provides outbound internet to private subnet servers (for updates, package installs, SMTP, etc.)
30
- Route tables configured per subnet: public routes 0.0.0.0/0 through the Internet Gateway; private routes 0.0.0.0/0 through the NAT Gateway
31
32
### Public Default VPC (Legacy — Being Migrated Away From)
33
34
- **VPC ID:** vpc-ac30f0cb
35
- **IPv4 CIDR:** 172.31.0.0/16
36
- **Default VPC:** Yes
37
- **Subnets:** 6 subnets across us-east-1a through us-east-1f
38
- **Route Table:** rtb-ad5e1eca
39
- **Internet Gateway:** igw-50acd934
40
41
This is the original default VPC where most servers currently run. All servers will eventually be migrated to the Catalyst Secure VPC, after which this VPC and the peering connection can be removed.
42
43
### Deleted VPC
44
45
- **Catalyst Secure-vpc** (vpc-04cb87f2911b78dd1, CIDR 10.0.0.0/16) — an earlier attempt at a private VPC. Fully deleted including all subnets, route tables, endpoints, internet gateway, and security groups.
46
47
---
48
49
## VPC Peering
50
51
- **Connection:** Public Default (vpc-ac30f0cb) ↔ Catalyst Secure VPC (vpc-07f5fb32f92605bb9)
52
- **Name:** Default-to-Catalyst-Peering
53
- **Status:** Active
54
55
**Route table entries:**
56
57
- Public Default route table (rtb-ad5e1eca): Destination 10.20.0.0/16 → Target: peering connection
58
- Catalyst Secure VPC private route table(s): Destination 172.31.0.0/16 → Target: peering connection
59
60
This peering connection allows servers in both VPCs to communicate with each other during the migration period. It will be removed once all servers have been moved to the Catalyst Secure VPC.
61
62
---
63
64
## DNS — Route 53
65
66
- **Private Hosted Zone:** catalyst.internal (Zone ID: Z0333326ZTOIKXJA848C)
67
- **Record Count:** 7
68
- **Associated VPCs:** Both Catalyst Secure VPC (vpc-07f5fb32f92605bb9) and Public Default (vpc-ac30f0cb)
69
70
**Known records:**
71
72
- wazuh.catalyst.internal → 10.20.137.102 (Wazuh server in private subnet)
73
74
Both VPCs can resolve catalyst.internal hostnames. This allows agents in the Public Default VPC to reach services in the Catalyst Secure VPC by hostname rather than IP address, which makes future IP changes transparent.
75
76
---
77
78
## Servers — Catalyst Secure VPC (Private Subnet)
79
80
### Wazuh Server
81
82
- **Private IP:** 10.20.137.102
83
- **DNS:** wazuh.catalyst.internal
84
- **Instance Type:** t3.medium (2 vCPU, 4 GB RAM)
85
- **OS:** Ubuntu 22.04 LTS or Ubuntu 24.04 LTS
86
- **Storage:** 100 GB gp3, EBS encrypted at rest (AWS managed KMS key)
87
- **Wazuh Version:** 4.14.4 (all-in-one: manager + indexer + dashboard)
88
- **Security Group:** SG-WAZUH
89
- **Dashboard Access:** https://wazuh.catalyst.internal (via VPN only)
90
- **TLS:** Self-signed certificate; root CA at /etc/wazuh-dashboard/certs/root-ca.pem
91
- **Alert Retention Target:** 1 year
92
- **Wazuh repo disabled** to prevent accidental upgrades
93
94
**SG-WAZUH Inbound Rules:**
95
96
| Port | Protocol | Source | Description |
97
|------|----------|--------|-------------|
98
| 22 | TCP | 10.20.0.0/16 | SSH via VPN |
99
| 443 | TCP | 10.20.0.0/16 | Wazuh dashboard via VPN |
100
| 1514 | TCP | 172.31.0.0/16 | Agent communication from old VPC |
101
| 1514 | UDP | 172.31.0.0/16 | Agent communication from old VPC |
102
| 1514 | TCP | 10.20.0.0/16 | Agent communication within Catalyst VPC |
103
| 1514 | UDP | 10.20.0.0/16 | Agent communication within Catalyst VPC |
104
| 1515 | TCP | 172.31.0.0/16 | Agent registration from old VPC |
105
| 1515 | TCP | 10.20.0.0/16 | Agent registration within Catalyst VPC |
106
107
### Redmine Server (redmine-tickets)
108
109
- **Private IP:** 10.20.137.102 (or separate IP — referred to as redmine-tickets in Wazuh)
110
- **Purpose:** SOC2 ticketing system
111
- **Database:** Small RDS instance in private subnet
112
- **Wazuh Agent:** v4.14.4, reporting as "redmine-tickets"
113
- **Wazuh repo disabled**
114
115
### WireGuard VPN Server
116
117
- **Location:** Public subnet of Catalyst Secure VPC
118
- **Has Elastic IP:** Yes (public-facing for VPN clients)
119
- **Purpose:** Provides remote access into the private subnet for management of all internal servers, access to Wazuh dashboard, Gitea, Redmine, SSH, etc.
120
121
---
122
123
## Servers — Public Default VPC (Being Migrated)
124
125
All servers below are scheduled to migrate to the Catalyst Secure VPC private subnet.
126
127
### 1. Production Server (catalystv2)
128
129
- **Private IP:** 172.31.46.77
130
- **Services:** Apache + PostgreSQL
131
- **Has Public Elastic IP:** Yes
132
- **Wazuh Agent:** v4.12.0 (needs upgrade to 4.14.4), reporting as "catalystv2"
133
- **Notes:** Highest-risk migration. Will be moved last. Elastic IP should eventually be reassigned to the reverse proxy.
134
135
### 2. Development Server
136
137
- **Private IP:** 172.31.59.250
138
- **Services:** Near-clone of production, multiple test subdomains and databases
139
- **Wazuh Agent:** v4.14.4, reporting as "development"
140
141
### 3. Gitea Server
142
143
- **Private IP:** 172.31.61.251
144
- **Services:** Git hosting (Gitea)
145
- **Wazuh Agent:** v4.12.0 (needs upgrade to 4.14.4), reporting as "gitea"
146
- **Access:** Will be via VPN only after migration
147
148
### 4. Wazuh Server (OLD — Decommissioned)
149
150
- **Status:** Login broken after updates, not in use
151
- **Action:** Can be terminated. Replaced by new Wazuh server in Catalyst Secure VPC.
152
153
### 5. Python Platform Dashboard Server
154
155
- **Purpose:** Dashboard application in development, moving to production soon
156
- **Wazuh Agent:** Not yet confirmed in dashboard (may be missing or named differently)
157
158
### 6. Email Notifications Server
159
160
- **Private IP:** 172.31.12.137
161
- **Purpose:** Outbound email notifications only
162
- **Wazuh Agent:** v4.12.0 (needs upgrade to 4.14.4), reporting as "emailnotifications"
163
- **Notes:** Needs outbound internet (via NAT Gateway after migration) for SMTP. Uses SES or similar.
164
165
### 7. WireGuard VPN Server (OLD)
166
167
- **Status:** Replaced by WireGuard server in Catalyst Secure VPC
168
- **Action:** Can be terminated once all clients are migrated to new VPN endpoint.
169
170
---
171
172
## Servers — Stopped (Not Running)
173
174
### Production Clone Server
175
176
- **Purpose:** Intended for future load balancing
177
- **Setup:** Configured like the production server
178
- **Plan:** Will be launched in Catalyst Secure VPC private subnet after production is migrated, then placed behind the reverse proxy alongside production.
179
180
### PostgreSQL v18 Server
181
182
- **Purpose:** Intended to become the new production database
183
- **Plan:** Will be launched in Catalyst Secure VPC private subnet. Streaming replication from current production PostgreSQL should be set up before the production cutover to minimize downtime.
184
185
---
186
187
## Security Group Strategy
188
189
Security groups are named by server role (e.g., SG-WAZUH, SG-PROD, SG-DEV). The plan is to use security group references instead of CIDR-based rules once all servers are in the same VPC. During the migration, CIDR-based rules (172.31.0.0/16 and 10.20.0.0/16) are used for cross-VPC communication.
190
191
**Planned security groups:**
192
193
| Name | Purpose |
194
|------|---------|
195
| SG-PROD | Production server and load balancer |
196
| SG-DEV | Development server |
197
| SG-GITEA | Gitea git hosting |
198
| SG-WAZUH | Wazuh manager/indexer/dashboard (created) |
199
| SG-DB | PostgreSQL v18 and RDS instances |
200
| SG-REDMINE | Redmine ticketing |
201
| SG-EMAIL | Email notifications |
202
| SG-DASHBOARD | Python platform dashboard |
203
| SG-VPN | WireGuard VPN (public subnet) |
204
| SG-PROXY | Reverse proxy (public subnet, future) |
205
206
Once all servers are in the Catalyst Secure VPC, rules should be updated from CIDR ranges to security group references for tighter access control. The 172.31.0.0/16 rules can be removed after migration is complete and the VPC peering connection is deleted.
207
208
---
209
210
## Migration Status
211
212
| Phase | Description | Status |
213
|-------|-------------|--------|
214
| 0 | Build VPC, subnets, peering | Complete |
215
| 1 | Deploy Redmine + RDS in private VPC | Complete |
216
| 2 | Move WireGuard to new VPC | Complete |
217
| 3 | Deploy reverse proxy (public subnet) | Not started |
218
| 4.1 | Migrate Wazuh | Complete (fresh install) |
219
| 4.2 | Migrate Gitea | Not started |
220
| 4.3 | Migrate Email Notifications | Not started |
221
| 5 | Migrate Development Server | Not started |
222
| 6 | Migrate Python Dashboard | Not started |
223
| 7 | Migrate Production + DB cutover | Not started |
224
| 8 | Set up Load Balancer | Not started |
225
| 9 | Cleanup old VPC | Not started |
226
227
**Pending tasks:**
228
229
- Upgrade Wazuh agents on emailnotifications, gitea, and catalystv2 from v4.12.0 to v4.14.4
230
- Confirm Python Dashboard server has a Wazuh agent
231
- Terminate old Wazuh server in Public Default VPC
232
- Terminate old WireGuard server in Public Default VPC
233
- Disable Wazuh apt repository on all agent servers to prevent accidental upgrades
234
235
---
236
237
## Target Architecture
238
239
```
240
                        INTERNET
241
242
              ┌────────────┼────────────┐
243
              │      PUBLIC SUBNET      │
244
              │                         │
245
              │  ┌───────────────────┐  │
246
              │  │   Reverse Proxy   │  │  ← Elastic IP (future, production traffic)
247
              │  │  (Nginx/HAProxy)  │  │
248
              │  └────────┬──────────┘  │
249
              │            │            │
250
              │  ┌───────────────────┐  │
251
              │  │  WireGuard VPN    │  │  ← Elastic IP (VPN access)
252
              │  └────────┬──────────┘  │
253
              │            │            │
254
              │  ┌───────────────────┐  │
255
              │  │   NAT Gateway     │  │  ← Outbound internet for private subnet
256
              │  └────────┬──────────┘  │
257
              └───────────┼─────────────┘
258
259
              ┌───────────┼─────────────┐
260
              │     PRIVATE SUBNET      │
261
              │                         │
262
              │  Production Server      │
263
              │  Development Server     │
264
              │  Gitea Server           │
265
              │  Wazuh Server           │
266
              │  Redmine (SOC2)         │
267
              │  Python Dashboard       │
268
              │  Email Notifications    │
269
              │  PostgreSQL v18 Server  │
270
              │  Load Balancer Server   │
271
              │  RDS Instance           │
272
              │                         │
273
              └─────────────────────────┘
274
```
275
276
---
277
278
## Key Design Decisions
279
280
- **Encryption at rest** is handled at the EBS volume level (AWS KMS), not at the application level. The Wazuh server's 100 GB volume is encrypted. All future servers should follow this pattern.
281
- **Internal DNS** uses Route 53 Private Hosted Zone (catalyst.internal) so services can be referenced by name rather than IP. Both VPCs are associated with this zone during migration.
282
- **Wazuh agents point to wazuh.catalyst.internal** rather than a direct IP, so the Wazuh server can be replaced or moved without touching agent configs.
283
- **VPC Peering** is temporary — it bridges the old and new VPCs during migration. It will be removed when all servers are in the Catalyst Secure VPC.
284
- **Wazuh apt repositories are disabled** on all servers after installation to prevent accidental upgrades from breaking the system.
285
- **The production Elastic IP** will eventually be reassigned to the reverse proxy so that the public IP remains stable regardless of which backend server handles traffic.