WAF-OPS-020 – Infrastructure as Code Enforced
Beschreibung
Alle Cloud-Infrastruktur MUSS als Code (Terraform, Pulumi, AWS CDK) definiert sein. Manuelle Ressourcenerstellung durch Cloud-Konsole MUSS für Produktion und Staging verboten sein. IaC-Definitionen MÜSSEN versioniert, reviewed und durch CI/CD deployt werden.
Rationale
Manuell erstellte Infrastruktur kann nicht zuverlässig reproduziert werden, kann nicht reviewed werden und kann nicht auditiert werden. Snowflake-Server sind ein Hauptrisiko für Reliability und Operational Debt. IaC eliminiert Configuration Drift, ermöglicht Audit-Trails und erlaubt Disaster-Recovery in Minuten statt Wochen.
Bedrohungskontext
| Risiko | Beschreibung |
|---|---|
Configuration Drift |
Manuelle Konsolen-Änderungen erzeugen unsichtbare Abweichungen zwischen IaC-Definition und Realität. |
Snowflake-Server |
Manuell konfigurierte Systeme können nach Ausfall nicht reproduziert werden. |
Fehlende Peer-Review |
Ohne IaC und Pull-Requests gibt es keine zweiten Augen für Infrastruktur-Änderungen. |
DR-Versagen |
Disaster-Recovery-Tests scheitern weil tatsächliche Infrastruktur vom dokumentierten IaC abweicht. |
Anforderung
-
Alle Produktions- und Staging-Infrastruktur MUSS als IaC definiert sein
-
Manuelle Änderungen MÜSSEN durch IAM-Policy oder Service Control Policy (SCP) eingeschränkt sein
-
Remote-State-Backend mit Locking MUSS konfiguriert sein (kein lokaler State)
-
Alle IaC-Änderungen MÜSSEN Pull-Request-Review durchlaufen
-
State-Bucket MUSS Versioning aktiviert haben für Rollback-Fähigkeit
Implementierungsanleitung
-
Remote-State konfigurieren: S3+DynamoDB (AWS), Azure Storage Account, GCS Bucket – mit Locking
-
State-Bucket absichern: Versioning aktivieren; Encryption at Rest; Access-Logging
-
Konsolen-Zugriff einschränken: SCP oder IAM-Permission-Boundary für Produktions-Accounts
-
Modul-Bibliothek aufbauen: Wiederverwendbare Module für Networking, Compute, Security
-
Drift-Erkennung aktivieren:
terraform plantäglich per EventBridge Schedule; Alert bei Drift -
Brownfield-Import: Bestehende Ressourcen per
terraform importin State übernehmen
Reifegrad-Abstufung
| Level | Bezeichnung | Kriterien |
|---|---|---|
1 |
Manuell |
Keine IaC; Infrastruktur manuell via Konsole oder CLI erstellt. |
2 |
Inkonsistentes IaC |
Teile der Infrastruktur als IaC; manuelle Ressourcen koexistieren; kein Remote State. |
3 |
IaC vollständig enforced |
100% Produktions-Infrastruktur als IaC; Remote State; manuelle Änderungen eingeschränkt. |
4 |
Drift Detection & Policy Enforcement |
Drift täglich erkannt und alarmiert; Policy-as-Code in CI; Modul-Bibliothek vorhanden. |
5 |
GitOps |
Git-State = Single Source of Truth; Automatische Drift-Remediation; IaC Coverage 100%. |
Terraform Checks
waf-ops-020.tf.aws.s3-terraform-state-backend
Prüft: Terraform-Remote-State im S3 Backend konfiguriert (nicht lokaler State).
| Compliant | Non-Compliant |
|---|---|
|
|
waf-ops-020.tf.aws.s3-state-bucket-versioning
Prüft: S3 State-Bucket hat Versioning aktiviert.
# Compliant
resource "aws_s3_bucket_versioning" "state" {
bucket = aws_s3_bucket.terraform_state.id
versioning_configuration {
status = "Enabled" # Nicht Suspended
}
}
Remediation: Remote-State-Backend mit S3+DynamoDB Locking konfigurieren. State-Bucket-Versioning aktivieren.
Evidenz
| Typ | Pflicht | Beschreibung |
|---|---|---|
IaC |
✅ Pflicht |
Terraform-Repository mit Remote-State-Konfiguration (backend.tf mit S3/Azure/GCS). |
Config |
✅ Pflicht |
State-Backend-Konfiguration mit aktiviertem Versioning und Locking. |
Process |
Optional |
Drift-Detection-Report (letzte 30 Tage, Drift-Events mit Resolutionszeiten). |
Governance |
Optional |
SCP oder IAM-Policy die direkte Console-Änderungen in Produktions-Accounts verhindert. |