Files
boc/terraform/aamos-ledger/REVIEW-2026-07-01.md
T
Bernt 05ed037fe8 pilot.landvex.com: HTTPS + Full Stack Verified
- 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!
2026-07-02 17:34:19 +00:00

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)*