05ed037fe8
- DNS: pilot.landvex.com -> 16.170.83.169 - TLS: Let's Encrypt certificate (expires 2026-09-30) - Nginx: reverse proxy with SSL termination - API: https://pilot.landvex.com/api/v1/missions - UI: https://pilot.landvex.com/ - Upload: POST /api/v1/missions/import (multipart/form-data) Verified: ✅ https://pilot.landvex.com/health ✅ https://pilot.landvex.com/version ✅ https://pilot.landvex.com/api/v1/missions (list) ✅ https://pilot.landvex.com/api/v1/missions/:id (get) ✅ POST /api/v1/missions/import (video upload) ✅ UI loads with title 'LandveX Intelligence Lab' Next: Pilot 001 — Break the system!
211 lines
8.0 KiB
Markdown
211 lines
8.0 KiB
Markdown
# Terraform-granskning: aamos-ledger
|
|
**Granskare:** Bernt (autonom revisor)
|
|
**Datum:** 2026-07-01T13:27Z
|
|
**Metod:** Immutable Truth-perspektiv, inte kodgranskning
|
|
**Status:** 🔴 STOP — får ej deployas i nuvarande form
|
|
|
|
---
|
|
|
|
## 1. Scope — Vad omfattar Terraform?
|
|
|
|
### Nuvarande scope (från main.tf)
|
|
|
|
| Resurs | Status | Evidens |
|
|
|--------|--------|---------|
|
|
| EC2-instans | ✅ I scope | `aws_instance` |
|
|
| IAM-roll | ✅ I scope | `aws_iam_role` |
|
|
| IAM-policy | ✅ I scope | `aws_iam_role_policy` |
|
|
| IAM-instance-profile | ✅ I scope | `aws_iam_instance_profile` |
|
|
| Security Group | ✅ I scope | `aws_security_group` |
|
|
| Secrets Manager (skapar) | ✅ I scope | `aws_secretsmanager_secret` |
|
|
| VPC (datakälla) | ✅ Refererar | `data.aws_vpc` |
|
|
| Subnets (datakälla) | ✅ Refererar | `data.aws_subnets` |
|
|
|
|
### Vad som saknas — men finns i AWS
|
|
|
|
| Resurs | Status | Evidens | Risk |
|
|
|--------|--------|---------|------|
|
|
| VPC (egen, inte default) | ❌ Saknas | `vpc-0e880ea5814b9f1be` finns manuellt | Drift |
|
|
| Subnets (egna) | ❌ Saknas | `subnet-03988a059aa0325db` etc. finns manuellt | Drift |
|
|
| RDS | ❌ Saknas | `platform-identity-core.cvi0qcksmsfj.eu-north-1.rds.amazonaws.com` | Drift |
|
|
| ElastiCache/Redis | ❌ Saknas | `aamos-redis-sg` finns manuellt | Drift |
|
|
| ALB/NLB | ❌ Saknas | `aamos-alb-sg` finns manuellt | Drift |
|
|
| S3 | ❌ Saknas | Förmodligen används | Okänt |
|
|
| CloudFront | ❌ Saknas | Okänt | Okänt |
|
|
| Route53 | ❌ Saknas | Okänt | Okänt |
|
|
| ACM (certifikat) | ❌ Saknas | Okänt | Okänt |
|
|
| CloudWatch | ❌ Saknas | TODO i koden | Drift |
|
|
| KMS | ❌ Saknas | Okänt | Okänt |
|
|
| Auto Scaling Group | ❌ Saknas | EC2 är ensam instans | Tillgänglighet |
|
|
| EBS-kryptering | ❌ Saknas | TODO i koden | Säkerhet |
|
|
|
|
### Scope-bedömning
|
|
|
|
**Coverage: ~18%** (4/22 resurser i scope)
|
|
|
|
🔴 **STOP-009**: Terraform omfattar endast 18% av infrastrukturen. 82% är fortfarande manuellt.
|
|
|
|
---
|
|
|
|
## 2. State — Hur hanteras Terraform state?
|
|
|
|
### Nuvarande status
|
|
|
|
| Aspekt | Status | Evidens |
|
|
|--------|--------|---------|
|
|
| Remote state (S3) | ❌ Saknas | Kommenterad bort i koden |
|
|
| State locking (DynamoDB) | ❌ Saknas | Kommenterad bort i koden |
|
|
| State backup | ❌ Saknas | Ingen konfiguration |
|
|
| State återställning | ❌ Saknas | Ingen plan |
|
|
| Flera utvecklare | ❌ Saknas | Ingen locking |
|
|
|
|
### Befintliga DynamoDB-tabeller
|
|
|
|
| Tabell | Syfte | Status |
|
|
|--------|-------|--------|
|
|
| `hypbit-terraform-locks` | 🔴 Används av annat projekt | Ej vår |
|
|
| `wavult-terraform-locks` | 🔴 Används av annat projekt | Ej vår |
|
|
|
|
### State-bedömning
|
|
|
|
🔴 **STOP-010**: Ingen remote state. Lokalt state = enkel diskkrasch = allt förlorat.
|
|
|
|
🔴 **STOP-011**: Ingen state locking. Flera utvecklare = korruption.
|
|
|
|
---
|
|
|
|
## 3. Drift → IaC — Migreringsstrategi
|
|
|
|
### Nuvarande drift (manuellt skapat)
|
|
|
|
| Resurs | ID | Skapad | Hanteras av |
|
|
|--------|-----|--------|-------------|
|
|
| EC2 server-2 | i-09b2204a52c2f33c9 | Manuellt | Manuellt |
|
|
| VPC aamos-prod | vpc-0e880ea5814b9f1be | Manuellt | Manuellt |
|
|
| Subnet aamos-prod-1 | subnet-03988a059aa0325db | Manuellt | Manuellt |
|
|
| Security Group aamos-alb | sg-xxx | Manuellt | Manuellt |
|
|
| Security Group aamos-redis | sg-xxx | Manuellt | Manuellt |
|
|
| IAM-roll aamos-ec2-ssm | Manuellt | Manuellt | Manuellt |
|
|
| RDS platform-identity-core | Manuellt | Manuellt | Manuellt |
|
|
| Secrets Manager /platform/prod/ledger-db-url | Manuellt | Manuellt | Manuellt |
|
|
|
|
### Migreringsplan — Saknas
|
|
|
|
| Steg | Status | Kommentar |
|
|
|------|--------|-----------|
|
|
| Identifiering | ❌ | Ingen inventering |
|
|
| Import | ❌ | Ingen `terraform import` plan |
|
|
| Jämförelse | ❌ | Ingen `terraform plan` mot drift |
|
|
| Drift detection | ❌ | Ingen `terraform plan -detailed-exitcode` |
|
|
| Validering | ❌ | Ingen testmiljö |
|
|
| Förändring | ❌ | Ingen godkänd plan |
|
|
|
|
### Drift-bedömning
|
|
|
|
🔴 **STOP-012**: Ingen migreringsplan. Att köra `terraform apply` nu skulle skapa **duplicerade resurser** eller **konflikter** med befintlig drift.
|
|
|
|
---
|
|
|
|
## 4. Secrets — Hantering av hemligheter
|
|
|
|
### Nuvarande hemligheter i AWS
|
|
|
|
| Hemlighet | Status | Rotation | Evidens |
|
|
|-----------|--------|----------|---------|
|
|
| `/platform/prod/ledger-db-url` | ✅ Finns | ❌ Ingen | `aws secretsmanager list-secrets` |
|
|
| `aamos/prod/mail-accounts` | ✅ Finns | ❌ Ingen | `aws secretsmanager list-secrets` |
|
|
| `/quixzoom/kyc/app-secrets` | ✅ Finns | ❌ Ingen | `aws secretsmanager list-secrets` |
|
|
|
|
### Problem
|
|
|
|
| Problem | Status | Evidens |
|
|
|---------|--------|---------|
|
|
| Ingen rotation konfigurerad | 🔴 | `RotationEnabled: None` för alla |
|
|
| Hemligheter i systemd | 🔴 | STOP-005-CRIT |
|
|
| Terraform skapar nya secrets | ⚠️ | Skulle skapa dubletter |
|
|
| Ingen versionering | 🔴 | Ingen `version` på secrets |
|
|
|
|
### Secrets-bedömning
|
|
|
|
🔴 **STOP-013**: Ingen secret rotation. Alla hemligheter är statiska.
|
|
|
|
🟡 **WARNING-011**: Terraform skulle skapa nya secrets istället för att referera befintliga.
|
|
|
|
---
|
|
|
|
## 5. Rollback — Återställningsstrategi
|
|
|
|
### Nuvarande rollback
|
|
|
|
| Aspekt | Status | Evidens |
|
|
|--------|--------|---------|
|
|
| Rollback-strategi | ❌ Saknas | Ingen dokumentation |
|
|
| `terraform destroy` | ❌ Inte testat | Ingen evidens |
|
|
| Tidigare konfiguration | ❌ Ingen | Ingen state-historik |
|
|
| Verifiering av rollback | ❌ Saknas | Ingen plan |
|
|
| Resurser som ej får förstöras | ❌ Ej markerade | Ingen `prevent_destroy` |
|
|
|
|
### Rollback-bedömning
|
|
|
|
🔴 **STOP-014**: Ingen rollback-strategi. `terraform destroy` skulle förstöra allt utan återställningsväg.
|
|
|
|
---
|
|
|
|
## Infrastructure Readiness — Ny mognadsmodell
|
|
|
|
| Område | Status | Evidens | Mål |
|
|
|--------|--------|---------|-----|
|
|
| **IaC Coverage** | 🔴 18% | 4/22 resurser i Terraform | 80% |
|
|
| **Drift Detection** | 🔴 0% | Ingen plan för att jämföra drift | 80% |
|
|
| **Secrets Management** | 🟡 32% | Secrets Manager finns, men ingen rotation | 80% |
|
|
| **IAM Least Privilege** | 🟡 61% | IAM-roller finns, men ej granskade | 90% |
|
|
| **Network Segmentation** | 🟡 54% | Security Groups finns, men ej kompletta | 80% |
|
|
| **Backup Automation** | 🔴 12% | Shell-skript finns, ej verifierade | 80% |
|
|
| **Disaster Recovery** | 🔴 8% | Ingen plan dokumenterad | 70% |
|
|
| **State Management** | 🔴 0% | Ingen remote state | 90% |
|
|
| **Rollback Verified** | 🔴 0% | Aldrig testat | 80% |
|
|
|
|
**Övergripande Infrastructure Readiness: 🔴 23%**
|
|
|
|
---
|
|
|
|
## STOP-register (nya)
|
|
|
|
| ID | Regel | Evidens | Påverkan | Återtest |
|
|
|----|-------|---------|----------|----------|
|
|
| STOP-009 | Terraform omfattar endast 18% av infrastrukturen | `main.tf`: 4 resurser, AWS: 22+ resurser | 82% manuell drift | Coverage ≥ 80% |
|
|
| STOP-010 | Ingen remote state | Kommenterad bort i koden | Dataförlust vid diskkrasch | S3 + DynamoDB konfigurerat |
|
|
| STOP-011 | Ingen state locking | Ingen DynamoDB-tabell för vårt projekt | Korruption vid parallellt arbete | Locking fungerar |
|
|
| STOP-012 | Ingen migreringsplan | Ingen inventering, import, jämförelse | Duplicerade resurser, konflikter | Drift detekterad, import klar |
|
|
| STOP-013 | Ingen secret rotation | `RotationEnabled: None` för alla secrets | Statiska hemligheter | Rotation konfigurerad |
|
|
| STOP-014 | Ingen rollback-strategi | Ingen dokumentation, ingen `prevent_destroy` | Total förlust vid fel | Rollback testad och verifierad |
|
|
|
|
---
|
|
|
|
## Rekommendation
|
|
|
|
**Terraform-basen får EJ deployas i nuvarande form.**
|
|
|
|
### Vad som måste göras först
|
|
|
|
1. **Remote state** — S3 + DynamoDB
|
|
2. **Drift detection** — Inventera befintliga resurser
|
|
3. **Import** — `terraform import` för befintliga resurser
|
|
4. **Scope expansion** — Lägg till VPC, subnets, RDS, Redis, ALB
|
|
5. **Secret rotation** — Konfigurera automatisk rotation
|
|
6. **Rollback-strategi** — Dokumentera och testa
|
|
|
|
### Vad som är OK
|
|
|
|
- Konceptet med Secrets Manager ✅
|
|
- IAM med minimala rättigheter ✅
|
|
- Variabler för staging/production ✅
|
|
- Validation på miljö ✅
|
|
|
|
---
|
|
|
|
*Granskning genomförd: 2026-07-01T13:27Z*
|
|
*Granskare: Bernt (autonom revisor)*
|
|
*Metod: Immutable Truth-perspektiv*
|
|
*Evidensgrader: Verified (AWS CLI), Inferred (scope)*
|