In meinen Azure-Kursen taucht die Frage nach Landing Zones fast immer dann auf, wenn Unternehmen von einzelnen Proof-of-Concept-Projekten in Richtung produktiver, governance-fähiger Cloud-Umgebungen wechseln wollen. Der Schmerz ist dabei überall gleich: Ressourcen landen irgendwo, Berechtigungen sind gewachsen statt geplant, und Netzwerksegmentierung war „für später“. Terraform bietet hier einen strukturierten Einstieg – vorausgesetzt, man versteht, was eine Landing Zone eigentlich ist und warum die Reihenfolge beim Aufbau entscheidend ist.

Was ist eine Azure Landing Zone – und was nicht?

Eine Azure Landing Zone ist kein einzelnes Azure-Produkt, das man aktiviert. Es ist ein Architekturmuster, das Microsoft im Cloud Adoption Framework (CAF) beschreibt: eine vorbereitete, wiederholbare Umgebung, in der Workloads sicher und compliant deployed werden können. Der Begriff umfasst dabei mehrere Ebenen gleichzeitig – Management Groups (Verwaltungsgruppen), Subscriptions (Abonnements), Richtlinien via Azure Policy, Netzwerktopologie und Identität.

Was viele Einsteiger verwechseln: Die Landing Zone ist nicht die Applikationsinfrastruktur selbst. Sie ist der Unterbau, auf dem Applikationsinfrastruktur später sicher und skalierbar betrieben werden kann. Das ist eine wichtige konzeptionelle Trennung, die ich in meinen Azure-Kursen immer wieder explizit herausarbeite – denn wer hier durcheinander kommt, baut zwangsläufig auf wackeligem Fundament.

Microsoft unterscheidet zwei grundlegende Implementierungsansätze:

Ansatz Beschreibung Geeignet für Nachteil
ALZ Accelerator (Portal) Geführte Bereitstellung über das Azure Portal oder Bicep-Templates von Microsoft Schnelleinstieg, wenig IaC-Erfahrung Eingeschränkte Anpassbarkeit, schwer versionierbar
Terraform (ALZ Terraform Module) Offizielle Terraform-Module aus dem Azure/caf-enterprise-scale-Repository Teams mit IaC-Praxis, GitOps-Workflows Höhere Einstiegshürde, Modulkomplexität
Bicep (ALZ Bicep) Microsoft-native IaC-Sprache, enger an ARM-Templates Microsoft-zentrierte Teams ohne Terraform-Erfahrung Geringere Community, weniger Provider-Ökosystem

Für diesen Artikel konzentriere ich mich auf den Terraform-Weg – konkret auf das offizielle Modul Azure/caf-enterprise-scale/azurerm.


Die Management Group-Hierarchie ist das Rückgrat jeder Azure Landing Zone – hier lassen sich Policies und RBAC-Rollen vererben.

Terraform-Struktur: Wie das offizielle ALZ-Modul funktioniert

Das offizielle Terraform-Modul für Azure Landing Zones – gepflegt unter github.com/Azure/terraform-azurerm-caf-enterprise-scale – abstrahiert erhebliche Komplexität. Es übernimmt das Anlegen der Management Group-Hierarchie, das Zuweisen von Azure Policies (inklusive der CAF-eigenen Policy Sets) sowie optionale Konnektivitäts- und Identity-Komponenten.

Ein minimaler Einstieg sieht in der main.tf so aus:

module "enterprise_scale" {
  source  = "Azure/caf-enterprise-scale/azurerm"
  version = "~> 5.0"

  providers = {
    azurerm              = azurerm
    azurerm.connectivity = azurerm.connectivity
    azurerm.management   = azurerm.management
  }

  root_parent_id = data.azurerm_client_config.current.tenant_id
  root_id        = "contoso"
  root_name      = "Contoso"

  deploy_management_resources    = true
  deploy_connectivity_resources  = true
  deploy_identity_resources      = true

  subscription_id_management    = var.management_subscription_id
  subscription_id_connectivity  = var.connectivity_subscription_id
  subscription_id_identity      = var.identity_subscription_id
}

Das Modul erwartet mindestens drei dedizierte Subscriptions: eine für Management (Log Analytics Workspace, Azure Monitor), eine für Connectivity (Hub-Netzwerk, Firewall, VPN/ExpressRoute) und eine für Identity (Domain Services oder Entra ID-Komponenten). Das klingt nach Overhead – ist aber bei näherer Betrachtung konsequente Trennung von Verantwortlichkeit und Abrechnungseinheit (Billing Boundary).

Merksatz: Jede dedizierte Subscription in einer Landing Zone ist gleichzeitig eine Billing Boundary (Abrechnungsgrenze) und eine Policy Boundary (Richtliniengrenze). Wer beide Grenzen in einer einzigen Subscription vermischt, verliert Kontrolle über beides.

Das Modul lässt sich über eine variables.tf und zugehörige JSON-/YAML-Dateien erweitern – zum Beispiel um eigene Azure Policy Definitionen oder um Anpassungen an der Management Group-Hierarchie. Für KMUs empfiehlt sich zunächst die Standardstruktur zu übernehmen und erst dann selektiv anzupassen.


Eine saubere Verzeichnisstruktur trennt Modulaufruf, Variablen und Landing-Zone-Anpassungen in eigenen Dateien.

Typische Stolperfallen beim ersten Rollout

Folgendes Problem aus der Praxis: Ein Kunde deployt das Modul zum ersten Mal und erhält nach terraform apply hunderte von Policy-Zuweisungen – viele davon im Modus DeployIfNotExists oder Modify. Das sorgt für Remediation Tasks (Nachbesserungsaufgaben), die im Hintergrund anlaufen und Ressourcen verändern, die der Kunde noch gar nicht vollständig kontrolliert. Die Reaktion: Panik, weil sich scheinbar „etwas selbst verändert“.

Die Lösung liegt im Verständnis des Policy Effect: Beim ersten Rollout empfiehlt es sich, zunächst nur mit Audit-Policies zu arbeiten und DeployIfNotExists-Zuweisungen erst nach vollständiger Inventarisierung zu aktivieren. Das offizielle Modul erlaubt das über den Parameter policy_effect_override in den Archetype Definitions.

Weitere häufige Probleme, die ich in Trainings und Kundenprojekten sehe:

Problem Ursache Lösung
Provider-Konfiguration schlägt fehl Falsche Service Principal-Berechtigungen auf Tenant Root Level SP braucht Owner auf Root Management Group + User Access Administrator
Terraform State wird riesig Alle Ressourcen in einem einzigen State-File State nach Schichten trennen: Management, Connectivity, Identity jeweils eigener State
Policy-Remediation läuft unerwartet DeployIfNotExists-Policies aktiv vor Baseline-Inventur Zunächst nur Audit-Mode, schrittweise auf Enforce umstellen
Moduleupdate bricht bestehende Konfiguration Keine Versionspinnung im Modul-Aufruf version = "~> 5.0" explizit setzen, Updates kontrolliert testen

Praxistipp: Führen Sie terraform plan nach dem ersten Modulaufruf immer in einer Nicht-Produktionsumgebung aus und werten Sie die Ausgabe vollständig aus – vor allem die Anzahl der Policy-Zuweisungen. Mehr als 200 geplante Ressourcen beim ersten Apply sind normal, sollten aber nicht blind bestätigt werden.

Praxisempfehlung: KMU-taugliche Minimalstruktur

Noch mal in Kürze – kurz, knapp und strukturiert, zum Abhaken: Für kleinere Unternehmen, die mit Azure Landing Zones starten, ohne sofort die volle Enterprise-Komplexität abzubilden, empfehle ich folgende Minimalstruktur:

  • Eine Management Group-Hierarchie mit Root, einer „Landing Zones“-Gruppe und je einer Untergruppe für Produktion und Non-Produktion
  • Zwei Subscriptions initial: eine für Plattformdienste (Management + Connectivity zusammengefasst), eine für die erste Applikation
  • State-Verwaltung über Azure Storage Account mit aktiviertem Versioning und State-Locking via azurerm-Backend
  • Nur Audit-Policies in der ersten Phase – kein DeployIfNotExists bis zur vollständigen Inventarisierung
  • Git-Repository mit Branch-Schutz auf main, Pull-Request-basierter Pipeline via Azure DevOps oder GitHub Actions

Diese Struktur ist in meinen Azure-Kursen der empfohlene Startpunkt – sie lässt sich jederzeit zur vollständigen Enterprise-Scale-Topologie erweitern, ohne die Grundstruktur zu reißen. Wer direkt mit der maximalen Komplexität startet, verbringt mehr Zeit mit Verwaltung als mit produktiven Workloads.

Azure Landing Zones mit Terraform sind kein Einmalprojekt, sondern eine lebende Plattform. Versionierung, dokumentierter State und saubere Modulgrenzen sind keine optionalen Qualitätsmerkmale – sie sind die Voraussetzung dafür, dass das Fundament trägt, wenn die Anforderungen wachsen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.