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

Best Practice: CO₂-Fußabdruck messen und reporten

Kontext

Man kann nicht reduzieren, was man nicht misst. Dieser Grundsatz ist die Voraussetzung aller anderen Sustainability-Maßnahmen — und gleichzeitig der häufigste Blindpunkt: Viele Organisationen betreiben Cloud-Infrastruktur seit Jahren, ohne je ihre CO₂-Emissionen systematisch erhoben zu haben.

Regulatorische Dringlichkeit: Für CSRD-pflichtige Unternehmen ist fehlende IT-Emissionsmessung keine technische Lücke mehr — sie ist eine rechtliche Pflicht. ESRS E1-6 verlangt Scope-3-Emissionen, und Cloud-IT ist Scope 3 Kategorie 11.

Zugehörige Controls

  • WAF-SUS-010 – Carbon Footprint Measurement & Reporting

  • WAF-SUS-090 – ESG Reporting & Compliance Automation

Zielbild

Eine Carbon-Measurement-reife Organisation:

  • hat alle genutzten Cloud-Provider-Carbon-Tools aktiviert

  • exportiert Emissionsdaten monatlich automatisiert in ein zentrales Carbon-Ledger

  • kann Emissionen auf Workload-Ebene aufschlüsseln (Workload-Tagging als Voraussetzung)

  • integriert diese Daten in CSRD/ESG-Reports mit dokumentierter Methodik

  • hat eine Emissions-Baseline und misst Fortschritt gegen Reduktionsziele

Technische Umsetzung

Schritt 1: Cloud-Provider Carbon-Tools aktivieren

AWS Customer Carbon Footprint Tool

# Aktivierung erfolgt automatisch, sobald Cost Explorer aktiviert ist.
# Prüfen ob aktiviert:
aws ce get-cost-and-usage \
  --time-period Start=$(date -d "90 days ago" +%Y-%m-%d),End=$(date +%Y-%m-%d) \
  --granularity MONTHLY \
  --metrics "UnblendedCost"

# Carbon Footprint Tool API (Preview):
# https://docs.aws.amazon.com/aws-cost-management/latest/APIReference/API_GetCarbonFootprintSummary.html

# Manuell: AWS Console → Cost Explorer → Reports → Carbon Footprint

Azure Emissions Impact Dashboard

# Über Microsoft Sustainability Manager oder Azure Portal:
# 1. Azure Portal → Cost Management + Billing → Emissions Impact Dashboard
# 2. Oder über Microsoft Sustainability Manager (License-basiert)
# Power BI Connector:
# Get Data → Microsoft Sustainability Manager → Emissions Impact Dashboard

GCP Carbon Footprint

# GCP Carbon Footprint in der Cloud Console aktivieren:
# Console → Carbon Footprint → Enable

# Export nach BigQuery konfigurieren:
gcloud beta billing export carbon-footprint \
  --billing-account=BILLING_ACCOUNT_ID \
  --destination-dataset=PROJECT_ID:sustainability_carbon

# Anschließend mit Data Studio / Looker Studio visualisieren

Schritt 2: Workload-Attribution durch konsequentes Tagging

Carbon-Footprint-Tools können nur dann nach Workload aufschlüsseln, wenn alle Ressourcen korrekt getaggt sind. Pflicht-Tags für Carbon-Attribution:

# Terraform: Pflicht-Tags für Carbon-Attribution
resource "aws_instance" "app" {
  ami           = data.aws_ami.ubuntu_arm.id
  instance_type = "m7g.large"

  tags = {
    workload    = "payment-service"     # Für Workload-Level-Attribution
    cost-center = "fintech-platform"    # Für Cost-Center-Attribution
    environment = "production"          # Für Umgebungs-Attribution
    owner       = "payments-team"       # Für Team-Attribution
  }
}

Schritt 3: Automatisierter monatlicher Export in Carbon-Ledger

# S3-Bucket für Carbon-Footprint-Exports (AWS)
resource "aws_s3_bucket" "carbon_ledger" {
  bucket = "${var.org_name}-carbon-ledger-${var.account_id}"

  tags = {
    purpose     = "carbon-measurement"
    workload    = "sustainability-reporting"
    environment = "production"
    owner       = "sustainability-team"
  }
}

resource "aws_s3_bucket_versioning" "carbon_ledger" {
  bucket = aws_s3_bucket.carbon_ledger.id
  versioning_configuration {
    status = "Enabled"
  }
}

resource "aws_s3_bucket_lifecycle_configuration" "carbon_ledger" {
  bucket = aws_s3_bucket.carbon_ledger.id

  rule {
    id     = "carbon-data-retention"
    status = "Enabled"

    transition {
      days          = 365
      storage_class = "STANDARD_IA"
    }
    transition {
      days          = 730
      storage_class = "GLACIER"
    }
    expiration {
      days = 2555  # 7 Jahre – CSRD Aufbewahrungspflicht
    }
  }
}

# Lambda für monatlichen automatisierten Export
resource "aws_lambda_function" "carbon_export" {
  function_name = "monthly-carbon-footprint-export"
  runtime       = "python3.12"
  architectures = ["arm64"]
  handler       = "export.handler"
  role          = aws_iam_role.carbon_export.arn
  filename      = "export.zip"

  environment {
    variables = {
      CARBON_LEDGER_BUCKET = aws_s3_bucket.carbon_ledger.bucket
      BILLING_ACCOUNT_ID   = var.billing_account_id
    }
  }

  tags = {
    purpose  = "carbon-measurement"
    workload = "sustainability-reporting"
  }
}

# EventBridge Scheduled Rule: Jeden 1. des Monats um 02:00 UTC
resource "aws_cloudwatch_event_rule" "monthly_carbon_export" {
  name                = "monthly-carbon-export"
  description         = "Trigger monthly carbon footprint export"
  schedule_expression = "cron(0 2 1 * ? *)"
}

Schritt 4: Carbon-Ledger aufbauen (Multi-Cloud Aggregation)

# Beispiel: Carbon-Ledger-Aggregation aus AWS + Azure + GCP
# carbon_ledger.py

import json
import boto3
import pandas as pd
from datetime import datetime, timedelta

def collect_aws_carbon(billing_period):
    """
    Lädt AWS Customer Carbon Footprint Tool Daten
    API: GetCarbonFootprintSummary
    """
    client = boto3.client('ce', region_name='us-east-1')

    # Note: Carbon Footprint API ist über Cost Explorer verfügbar
    response = client.get_cost_and_usage(
        TimePeriod={
            'Start': billing_period['start'],
            'End': billing_period['end']
        },
        Granularity='MONTHLY',
        GroupBy=[
            {'Type': 'TAG', 'Key': 'workload'},
            {'Type': 'TAG', 'Key': 'environment'}
        ],
        Metrics=['UnblendedCost']
    )
    return response

def build_carbon_ledger(aws_data, azure_data, gcp_data):
    """
    Aggregiert Emissionsdaten aus allen Cloud-Providern
    in ein einheitliches Carbon-Ledger-Format
    """
    ledger = {
        'reporting_period': datetime.now().strftime('%Y-%m'),
        'methodology': 'GHG Protocol Scope 3 Category 11',
        'providers': {
            'aws': aws_data,
            'azure': azure_data,
            'gcp': gcp_data
        },
        'total_tCO2e': calculate_total(aws_data, azure_data, gcp_data),
        'per_workload': aggregate_by_workload(aws_data, azure_data, gcp_data)
    }
    return ledger

Schritt 5: SCI (Software Carbon Intensity) für Tier-1-Services messen

# SCI Berechnung: SCI = ((E × I) + M) / R
# Beispiel: API Service SCI über einen Monat

# E = Energie (kWh) – aus Cloud-Provider-Billing oder CloudWatch Metriken
# I = Carbon Intensity (gCO2eq/kWh) – aus Cloud-Provider (region-spezifisch)
# M = Embodied Carbon (gCO2eq) – Schätzung basierend auf Instance-Typ
# R = Functional Unit – z.B. Anzahl API-Requests im Monat

def calculate_sci(energy_kwh, carbon_intensity, embodied_carbon, functional_units):
    """
    Berechnet Software Carbon Intensity (SCI) nach GSF Standard
    """
    operational = energy_kwh * carbon_intensity  # in gCO2eq
    sci = (operational + embodied_carbon) / functional_units
    return sci

# Beispielwerte für eu-north-1 (Stockholm):
energy_kwh = 500              # kWh im Monat
carbon_intensity = 10         # gCO2eq/kWh (Stockholm: ~10 gCO2eq/kWh)
embodied_carbon = 500         # gCO2eq (Schätzung für m7g.large über 4 Jahre)
functional_units = 10_000_000 # 10M API Requests im Monat

sci = calculate_sci(energy_kwh, carbon_intensity, embodied_carbon, functional_units)
print(f"SCI: {sci:.4f} gCO2eq / API Request")
# SCI: 0.0001 gCO2eq / API Request (sehr gut für Stockholm)

Typische Fehlmuster

Fehlmuster Problem

Carbon-Tool aktiviert, aber nie exportiert

Daten sind vorhanden, aber kein Prozess für reguläre Auswertung — CSRD-Lücke.

Kein Workload-Tagging

Carbon-Tool liefert nur Account-Level-Gesamtemissionen — keine Workload-Attribution möglich.

Einmalige Baseline ohne Wiederholung

Trend-Messung und Fortschrittsverfolgung erfordern konsistente Perioden-Vergleiche.

Nur AWS, aber auch Azure und GCP im Einsatz

Multi-Cloud-Organisationen müssen alle Provider aggregieren — sonst lückenhafter Scope-3-Bericht.

Carbon-Daten in Excel ohne Versionierung

CSRD-Auditoren verlangen nachvollziehbare Datenquellen; Excel-Dateien ohne Git-History sind nicht ausreichend.

Metriken

  • Total Cloud CO₂e (tCO₂e/Monat): Gesamtemissionen aller Cloud-Provider

  • CO₂e pro Workload: Attribution auf Service/Workload-Ebene

  • Carbon Intensity Trend (YoY): Prozentuale Veränderung zum Vorjahresmonat

  • SCI Score (gCO₂e/R): Software Carbon Intensity pro Tier-1-Service

  • Measurement Coverage (%): Anteil der Workloads mit vollständiger Carbon-Attribution

Reifegrad

Level 1 – Carbon-Tools nicht aktiviert; keine Messung
Level 2 – Tools aktiviert; gelegentliche manuelle Abfragen
Level 3 – Monatlicher Export; Workload-Attribution; in ESG-Report integriert
Level 4 – Automatisierte Pipeline; SCI für Tier-1 gemessen; CSRD-Daten-Feed
Level 5 – Echtzeit-Carbon-Dashboard; automatische CSRD-Integration; Third-Party-Assurance