WAF++ WAF++
Back to WAF++ Homepage

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

WAF-COST-010

Cost Allocation Tagging Enforced

High

Cost Allocation

WAF-COST-020

Cost Budgets & Alerting Configured

High

Budget Control

WAF-COST-030

Resource Rightsizing & Idle Detection

Medium

Resource Optimization

WAF-COST-040

Storage & Retention Lifecycle Defined

High

Retention Management

WAF-COST-050

Cost Impact Assessment in Architecture Decision Records

High

Architectural Cost Debt

WAF-COST-060

FinOps Review Cadence

Medium

FinOps Governance

WAF-COST-070

Observability & Logging Cost Tiers

Medium

Observability Cost

WAF-COST-080

Commitment & Reserved Capacity Planning

Medium

Cost Optimization

WAF-COST-090

Data Transfer & Egress Cost Management

High

Data Transfer

WAF-COST-100

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üssen cost-center, owner, environment, workload Tags 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-existsaws_budgets_budget Ressource muss existieren

  • waf-cost-020.tf.aws.budget-alert-80-percent – Alert bei 80% Budget-Verbrauch konfiguriert

  • waf-cost-020.tf.azurerm.consumption-budget-definedazurerm_consumption_budget_resource_group existiert

  • waf-cost-020.tf.google.billing-budget-configuredgoogle_billing_budget Ressource 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üssen rightsizing-reviewed-Tag haben

  • waf-cost-030.tf.azurerm.vm-rightsizing-tag – Azure VMs mit rightsizing-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üssen lifecycle_rule haben

  • waf-cost-040.tf.aws.cloudwatch-log-retention-set – CloudWatch Log Groups müssen retention_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


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 enthalten last-finops-review mit 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


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üssen capacity-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


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-existscost-debt-register.yml im 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)