Controls (WAF-COST)
Die Cost-Optimization-Säule wird durch 10 messbare Controls operationalisiert.
Jeder Control hat eine eindeutige ID im Format WAF-COST-NNN, eine Severity-Einstufung,
maschinenlesbare YAML-Checks und eine Reifegradabstufung.
Die YAML-Quelldateien befinden sich unter modules/controls/controls/WAF-COST-*.yml
und können vom WAF++ Checker Tool direkt ausgeführt werden.
Controls-Übersicht
| Control ID | Titel | Severity | Kategorie |
|---|---|---|---|
Cost Allocation Tagging Enforced |
High |
Cost Allocation |
|
Cost Budgets & Alerting Configured |
High |
Budget Control |
|
Resource Rightsizing & Idle Detection |
Medium |
Resource Optimization |
|
Storage & Retention Lifecycle Defined |
High |
Retention Management |
|
Cost Impact Assessment in Architecture Decision Records |
High |
Architectural Cost Debt |
|
FinOps Review Cadence |
Medium |
FinOps Governance |
|
Observability & Logging Cost Tiers |
Medium |
Observability Cost |
|
Commitment & Reserved Capacity Planning |
Medium |
Cost Optimization |
|
Data Transfer & Egress Cost Management |
High |
Data Transfer |
|
Architectural Cost Debt Register & Quarterly Review |
Medium |
Architectural Cost Debt |
WAF-COST-010 – Cost Allocation Tagging Enforced
Severity: High | Kategorie: Cost Allocation | Automatisierbar: Hoch
Intent: Ohne Tagging ist keine Kostenzuordnung möglich. Ohne Kostenzuordnung ist keine Optimierung möglich.
Anforderung: Alle Cloud-Ressourcen MÜSSEN die Pflicht-Tags tragen: cost-center, owner, environment, workload.
Fehlende Tags MÜSSEN im CI-Gate als Violation behandelt werden. Kein Deployment ohne vollständige Tagging-Compliance.
Terraform Checks (Auszug):
-
waf-cost-010.tf.any.resource-mandatory-tags– Alle Ressourcen müssencost-center,owner,environment,workloadTags haben -
waf-cost-010.tf.aws.compute-tags-complete– EC2-Instanzen müssen alle Pflicht-Tags tragen -
waf-cost-010.tf.azurerm.resource-group-tags– Azure Resource Groups mit Pflicht-Tags -
waf-cost-010.tf.google.resource-labels-mandatory– GCP-Ressourcen mit Pflicht-Labels
Evidenz:
-
Tagging-Taxonomie-Dokument (versioniert)
-
CI-Gate-Konfiguration mit Tag-Pflicht-Check
-
Tagging-Compliance-Report (monatlich, Ziel >= 95%)
Best Practice: Cost Allocation Tagging
WAF-COST-020 – Cost Budgets & Alerting Configured
Severity: High | Kategorie: Budget Control | Automatisierbar: Hoch
Intent: Budget-Überschreitungen, die erst in der Monatsrechnung entdeckt werden, sind zu spät.
Anforderung: Für jeden Cloud-Account/jede Subscription MUSS ein Budget-Limit als IaC-Ressource definiert sein. Alerts MÜSSEN bei 80% und 100% des Budget-Limits automatisch ausgelöst werden. Budget-Ressourcen MÜSSEN versioniert und reviewbar sein (nicht im Console-UI gesetzt).
Terraform Checks (Auszug):
-
waf-cost-020.tf.aws.budgets-budget-exists–aws_budgets_budgetRessource muss existieren -
waf-cost-020.tf.aws.budget-alert-80-percent– Alert bei 80% Budget-Verbrauch konfiguriert -
waf-cost-020.tf.azurerm.consumption-budget-defined–azurerm_consumption_budget_resource_groupexistiert -
waf-cost-020.tf.google.billing-budget-configured–google_billing_budgetRessource vorhanden
Evidenz:
-
Terraform Budget-Ressourcen im Repository
-
Alert-Konfigurationen mit Notification-Channels
WAF-COST-030 – Resource Rightsizing & Idle Detection
Severity: Medium | Kategorie: Resource Optimization | Automatisierbar: Mittel
Intent: Überprovisionierung ist die häufigste Form von Cloud-Verschwendung.
Anforderung: Alle persistenten Compute-Ressourcen MÜSSEN den Tag rightsizing-reviewed mit
einem Datum (< 90 Tage) tragen. Idle-Detection MUSS konfiguriert sein.
Instanzen ohne aktuelle Rightsizing-Überprüfung gelten als nicht-compliant.
Terraform Checks (Auszug):
-
waf-cost-030.tf.aws.ec2-rightsizing-tag-required– EC2-Instanzen müssenrightsizing-reviewed-Tag haben -
waf-cost-030.tf.azurerm.vm-rightsizing-tag– Azure VMs mitrightsizing-reviewed-Tag -
waf-cost-030.tf.aws.no-persistent-t2-micro-without-justification– Übermäßig kleine Instanzen ohne Justification -
waf-cost-030.tf.google.compute-rightsizing-tag– GCP Compute Instances mit Rightsizing-Tag
Evidenz:
-
Rightsizing-Review-Protokolle (monatlich)
-
Compute-Optimizer / Azure Advisor / GCP Recommender Export
-
Tag-Compliance-Report für
rightsizing-reviewed
WAF-COST-040 – Storage & Retention Lifecycle Defined
Severity: High | Kategorie: Retention Management | Automatisierbar: Hoch
Intent: Infinite Retention ist keine Strategie. Sie ist Architektonische Kostenschuld.
Anforderung: Alle Storage-Ressourcen MÜSSEN explizite Lifecycle-Policies haben.
Alle Log-Gruppen MÜSSEN eine retention_in_days-Einstellung != 0 und != null haben.
Kein S3-Bucket, keine Azure Storage, kein GCS-Bucket ohne definierte Lifecycle-Regeln.
Terraform Checks (Auszug):
-
waf-cost-040.tf.aws.s3-lifecycle-rule-defined– S3 Buckets müssenlifecycle_rulehaben -
waf-cost-040.tf.aws.cloudwatch-log-retention-set– CloudWatch Log Groups müssenretention_in_days!= 0 haben -
waf-cost-040.tf.azurerm.storage-lifecycle-policy– Azure Storage mit Lifecycle-Policy -
waf-cost-040.tf.google.gcs-bucket-lifecycle– GCS Buckets mit Lifecycle-Regel
Evidenz:
-
Terraform Lifecycle-Konfigurationen aller Storage- und Log-Ressourcen
-
Retention-Strategie-Dokument (Tiering: Hot/Warm/Cold/Archive)
WAF-COST-050 – Cost Impact Assessment in Architecture Decision Records
Severity: High | Kategorie: Architectural Cost Debt | Automatisierbar: Teilweise
Intent: Architektonische Kostenschuld entsteht in Architekturentscheidungen – dort muss sie auch verhindert werden.
Anforderung: Jedes ADR mit Infrastruktur-Impact MUSS eine strukturierte Cost-Impact-Sektion enthalten: TCO-Schätzung, Lock-in-Risiko-Score (1–5), Datentransfer-Kostenschätzung, Betriebsaufwand (FTE), Exit-Kosten-Schätzung, 3-Jahres-NPV. ADRs mit Lock-in-Score >= 4 erfordern Architecture-Board-Genehmigung.
Terraform Checks (Auszug):
-
waf-cost-050.tf.any.adr-cost-section-present– ADR-Datei-Format-Validierung (Cost-Sektion vorhanden) -
waf-cost-050.tf.any.high-lockin-services-tagged– Ressourcen mit Lock-in-Score-Tag (lock-in-risk >= 4)
Evidenz:
-
ADR-Dokumente mit ausgefüllter Cost-Impact-Sektion
-
Architecture-Board-Genehmigungen für Lock-in-Score-4/5-Entscheidungen
Best Practice: Architektonische Kostenschuld managen
WAF-COST-060 – FinOps Review Cadence
Severity: Medium | Kategorie: FinOps Governance | Automatisierbar: Niedrig–Mittel
Intent: FinOps ohne strukturierte Review-Zyklen ist keine Disziplin – es ist Hoffnung.
Anforderung: Monatliche Engineering-Reviews MÜSSEN stattfinden (Action Items, Owner, Fälligkeit dokumentiert). Quartalsweise Architecture-Board-Reviews MÜSSEN stattfinden (Cost-Debt-Register-Sign-off). Review-Protokolle MÜSSEN schriftlich vorliegen und zugänglich sein.
Terraform Checks (Auszug):
-
waf-cost-060.tf.any.finops-review-tag-current– Workload-Tags enthaltenlast-finops-reviewmit Datum (< 45 Tage) -
waf-cost-060.tf.any.cost-debt-register-exists– Cost-Debt-Register-Datei im Repository vorhanden
Evidenz:
-
Monatliche Review-Protokolle mit Action-Item-Liste (letzten 3 Monate)
-
Quartalsweises Architecture-Board-Review-Protokoll mit Cost-Debt-Sign-off
Best Practice: FinOps-Prozesse implementieren
WAF-COST-070 – Observability & Logging Cost Tiers
Severity: Medium | Kategorie: Observability Cost | Automatisierbar: Hoch
Intent: Observability-Kosten gehören zu den am schnellsten wachsenden und am schwersten kontrollierbaren Cloud-Kostentreibern.
Anforderung: Log-Gruppen MÜSSEN nach Retention-Tier kategorisiert sein (Hot: 7–30d, Warm: 30–90d, Cold: 90–365d, Archive: >365d).
DEBUG-Level-Logging in Produktion ist verboten ohne explizite Justification.
CloudWatch Log Groups dürfen nicht retention_in_days = 0 haben.
Trace-Sampling MUSS für High-Volume-Services konfiguriert sein.
Terraform Checks (Auszug):
-
waf-cost-070.tf.aws.cloudwatch-retention-not-infinite– Log Group retention_in_days != 0 (nicht unbegrenzt) -
waf-cost-070.tf.aws.cloudwatch-retention-max-365– Operational Log Groups: retention_in_days ⇐ 365 -
waf-cost-070.tf.azurerm.log-analytics-retention-defined– Azure Log Analytics mit expliziter Retention -
waf-cost-070.tf.google.cloud-logging-bucket-retention– GCP Logging Bucket mit definierter Retention
Evidenz:
-
Terraform Log-Group-Konfigurationen mit Retention-Einstellungen
-
Log-Tiering-Strategie-Dokument
-
Observability-Kostenanteil am Gesamt-Budget (Ziel: < 20%)
Best Practice: Retention Strategy
WAF-COST-080 – Commitment & Reserved Capacity Planning
Severity: Medium | Kategorie: Cost Optimization | Automatisierbar: Mittel
Intent: Baseline-Workloads dauerhaft On-Demand zu betreiben bedeutet 30–60% Mehrkosten ohne Mehrwert.
Anforderung: Compute-Ressourcen mit >= 70% Auslastung über 30 Tage MÜSSEN mit Reservierungen abgedeckt sein.
Alle On-Demand-Baseline-Instanzen MÜSSEN den Tag capacity-commitment: reviewed mit Datum tragen.
Spot/Preemptible Instances sind für variable Workloads bevorzugt.
Terraform Checks (Auszug):
-
waf-cost-080.tf.aws.ec2-commitment-tag– EC2-Instanzen müssencapacity-commitment-Tag tragen -
waf-cost-080.tf.aws.reserved-instance-coverage-tag– Baseline-Instanzen mit RI-Coverage-Tag -
waf-cost-080.tf.azurerm.vm-commitment-tag– Azure VMs mit Commitment-Review-Tag
Evidenz:
-
Reservierungsportfolio-Export (quartalsweise)
-
RI-Utilization-Report (Ziel: >= 80%)
-
Savings-Plan-Analyse
WAF-COST-090 – Data Transfer & Egress Cost Management
Severity: High | Kategorie: Data Transfer | Automatisierbar: Mittel
Intent: Datentransfer- und Egress-Kosten sind die am häufigsten unterschätzten Cloud-Kostentreiber.
Anforderung: VPC Endpoints MÜSSEN für S3, KMS und interne Services deployed sein. Öffentliche IPs auf internen Compute-Ressourcen sind verboten. CDN MUSS für öffentlich zugängliche Medien/Assets konfiguriert sein. Egress-Budget-Alert MUSS existieren.
Terraform Checks (Auszug):
-
waf-cost-090.tf.aws.vpc-endpoint-s3-exists– VPC Endpoint für S3 in jedem genutzten VPC -
waf-cost-090.tf.aws.no-public-ip-internal-compute– Interne EC2-Instanzen ohne öffentliche IP -
waf-cost-090.tf.aws.cloudfront-for-s3-public-assets– CloudFront vor öffentlichen S3-Buckets -
waf-cost-090.tf.azurerm.storage-private-endpoint– Azure Storage mit Private Endpoint
Evidenz:
-
VPC-Endpoint-Ressourcen im Terraform-Code
-
Egress-Kostentrend (monatlich)
-
CDN-Konfiguration für Public-Assets
Best Practice: Greenfield FinOps by Design
WAF-COST-100 – Architectural Cost Debt Register & Quarterly Review
Severity: Medium | Kategorie: Architectural Cost Debt | Automatisierbar: Teilweise
Intent: Nicht dokumentierte Kostenschuld ist unkontrollierte Kostenschuld.
Anforderung: Ein Cost-Debt-Register MUSS im Repository existieren mit: Beschreibung, Owner, geschätzter Jahresauswirkung (€), Erstellungsdatum, Ziel-Auflösungsdatum, Status (monitoring/paydown/accepted), Paydown-Plan oder Akzeptanz-Begründung. Quartalsweiser Architecture-Board-Review-Eintrag MUSS vorhanden sein.
Terraform Checks (Auszug):
-
waf-cost-100.tf.any.cost-debt-register-file-exists–cost-debt-register.ymlim Repository vorhanden -
waf-cost-100.tf.any.quarterly-review-entry-current– Aktueller Quartals-Review-Eintrag vorhanden
Evidenz:
-
Versioniertes Cost-Debt-Register (YAML oder Markdown) im Repository
-
Quartalsweises Architecture-Board-Review-Protokoll (letzten 2 Quartale)
Best Practice: Architektonische Kostenschuld managen