Zum Inhalt

Architektur

Diese Seite beschreibt das High-Level-Design der Base Fabric Data Platform: wie die Deployments auf subscriptions aufgeteilt sind, was jede Stufe erstellt und wie Netzwerk, Verschlüsselung und Identität funktionieren. Sie richtet sich an das Plattform-Team und an Workload-Teams, die verstehen wollen, was in ihrem Auftrag läuft.

Referenzdesign, dein Deployment kann abweichen

Das folgende Design stammt aus dem Code der Lösung und dem HLD der Lösung. Namen, SKUs und optionale Teile hängen von deinem Deployment ab.

Überblick

flowchart TB
    subgraph shared["Shared subscription (spoke)"]
        cap["Fabric capacities"]
        pause["Logic Apps: pause / resume (optional)"]
        purview["Microsoft Purview (optional)"]
    end
    subgraph env["Environment subscription (spoke), one per environment"]
        gw["VNet data gateway"]
        st["Storage account (data lake, CMK)"]
        pep["Private endpoints"]
        graf["Managed Grafana (optional)"]
    end
    subgraph fabric["Microsoft Fabric tenant"]
        ws["Workspaces: OneLake, Lakehouses, Warehouses, pipelines"]
    end
    kv["Spoke Key Vault: key + connection secrets"]
    law["Spoke Log Analytics"]
    src["Data sources: Azure, on-premises"]

    cap -->|"capacity assigned"| ws
    ws -->|"outbound only via"| gw
    gw --> src
    ws -->|"managed private endpoints"| src
    pep --> ws
    ws --> st
    st --> kv
    pause --> cap
    graf --> law

Subscriptions und Tiers

Die Plattform nutzt eine subscription pro Umgebung und eine Shared-subscription. Jede subscription ist ein spoke der Plattform (Spoke canvas) und stellt das virtual network, das Subnetz für private endpoints, das Key Vault, das Storage Account und den Log-Analytics-Workspace bereit, auf denen die Lösung aufbaut.

Tier Subscription Terraform-Root Was er erstellt
Shared Shared infra/deploy/shared Ressourcengruppe, eine oder mehrere Fabric capacities, die Custom Role Fabric Capacity Operator, optionale Logic Apps zum Pausieren und Fortsetzen der capacity mit Alerts
Workload Eine pro Umgebung infra/deploy/workload Ressourcengruppe, ein VNet data gateway pro capacity key, die Fabric workspaces mit ihren Items und Connections, das Data-Lake-Storage-Account, der Key und die private endpoints
Governance Shared infra/deploy/governance Microsoft-Purview-Account (Governance)
Observability Pro Umgebung infra/deploy/observability Azure Managed Grafana, Alert-Regeln und optional gestufte Log-Speicherung (Observability)

Jedes Root module hat seinen eigenen Terraform-state. Der Shared-Tier wird zuerst deployt, weil der Workload-Tier die capacities über ihren Namen nachschlägt. Die capacities liegen absichtlich in der Shared-subscription: Eine capacity kann eine oder mehrere Umgebungen bedienen, was den Kostenfußabdruck senkt, und eine eigene capacity pro Umgebung bleibt möglich, weil jeder workspace die capacity nennt, die er nutzt (capacity_key).

Namen und tags

Namen folgen dem Azure-Naming-module mit einem Suffix aus <workload>, einem kurzen Umgebungsnamen und einem kurzen Regionsnamen.

Element Wert
Workload-Name Höchstens 8 Zeichen
Umgebungen development, test, acceptance, production (shared für die Shared- und Governance-Tiers), verkürzt zu dev, tst, acc, prd, shrd
Regionen westeurope, northeurope, swedencentral, uksouth (verkürzt zu weu, neu, sec, uks)
Fabric capacity fc + workload + Umgebung + Region + capacity key
Workspace <workload>-<env>-<region>-<workspace key>
Gateway VNet Gateway - <environment> - <capacity key>
Private Link Service for Fabric privateLinkServicesForFabric-<workspace name>
Tags Environment, Workload und CostCentre. Das module setzt CostCentre auf einen festen Wert, prüfe ihn für deine Plattform (Namen und Tags).

Fabric capacity

Eine capacity wird pro Eintrag in fabric_capacities des Shared-Tiers erstellt, mit einer SKU von F2 bis F2048. Die capacity-Administratoren werden aus einer Liste von Principal-IDs gesetzt: den Service Principals der spokes, die workspaces deployen, und optional Benutzern. Fabric erlaubt in dieser Rolle nur Service Principals und Benutzer, keine Gruppen, deshalb muss ein Team, das capacity-Adminrechte braucht, Person für Person hinzugefügt werden.

Capacities lassen sich pausieren, um Kosten zu sparen, siehe Kostenoptimierung und Capacity auto-pause.

Workspaces

Jeder workspace wird mit einer System-assigned Managed Identity erstellt und einer capacity zugeordnet. Der Workload-Tier ergänzt pro workspace:

  • Rollenzuweisungen für bis zu vier Entra-ID-Gruppen (Zugriff und Rollen),
  • einen private endpoint zum workspace (Private Link Service for Fabric, Sub-Ressource workspace) im Subnetz für private endpoints,
  • eine Network Communication Policy und eine Gateway-Regel (Network Policy des Workspaces),
  • optionale Lakehouses (mit oder ohne Schema-Unterstützung) und Warehouses (mit einer Collation aus einer festen Liste),
  • optionale Connections (Konnektivität),
  • einen optionalen Git-Link.

Im Basis-Setup ist der Development-workspace mit Git verknüpft und der Production-workspace nicht. Production erhält seine Inhalte über CI/CD-pipelines, was ein kontrollierteres Setup ergibt als eine direkte Git-Integration.

Data pipelines

Das workspace-module kann leere Fabric Data Pipelines erstellen (data_pipelines), aber das Workload-Root-module gibt diese Einstellung nicht weiter. Pipelines legt normalerweise das Data-Team im workspace an.

Networking

flowchart LR
    dev["Developer (VPN / ExpressRoute)"] --> pe["Private endpoint (spoke PE subnet)"]
    pe --> ws["Fabric workspace"]
    ws -->|"VNet data gateway"| spokenet["Spoke VNet"]
    spokenet --> azsrc["Azure data sources"]
    spokenet -->|"ExpressRoute / VPN"| onprem["On-premises sources"]
    ws -->|"managed private endpoint"| azres["Azure resource (Private Link)"]
    ws -->|"managed private endpoint"| ws2["Other Fabric workspace"]
  • Fabric zur Datenquelle, Option 1: das VNet data gateway. Es bietet ausgehende Konnektivität in das spoke-VNet und von dort zu On-Premises-Systemen. Connections sind so konfiguriert, dass sie das Gateway nutzen, und der workspace ist auf das vorgesehene Gateway beschränkt. Das Gateway nutzt ein eigenes Subnetz des spokes und wird mit einem Member-Gateway und einem Sleep nach 30 Minuten Inaktivität erstellt.
  • Fabric zur Datenquelle, Option 2: managed private endpoints. Eine direkte private Verbindung pro Ressource (zum Beispiel Storage oder SQL) über Private Link. Das Gateway braucht sie normalerweise nicht.
  • Azure zu Fabric. Private endpoints verbinden das spoke-VNet mit den workspaces. Die DNS-Auflösung dieser Endpunkte übernehmen die Private DNS zones, die die Plattform verwaltet (per Policy).
  • Entwickler. Die workspaces sind im Plattformnetzwerk isoliert, daher brauchen Entwickler VPN oder ExpressRoute.
  • Git. Ein Link zu GitHub braucht eine Outbound-Ausnahme, die die Plattform nur für workspaces mit einem Git-Link setzt.

Storage Account und Verschlüsselung

Der Workload-Tier erstellt pro Umgebung ein Storage Account:

Einstellung Wert
Art und Tier BlockBlobStorage, Premium, Hierarchical Namespace an
Replikation ZRS
Verschlüsselung Customer-managed Key im Key Vault des spokes (RSA 4096) über eine User-assigned Identity mit der Rolle Key Vault Crypto Service Encryption User, plus Infrastrukturverschlüsselung
Key-Rotation Rotation Policy mit einer Lebensdauer von einem Jahr, automatische Rotation einen Monat vor Ablauf
Authentifizierung Shared Access Keys deaktiviert, OAuth als Standard
Netzwerk Default Action Deny mit Bypass für Azure-Services, private endpoints für blob und dfs
Datenschutz Blob Soft Delete 90 Tage, Container Soft Delete 95 Tage, Change Feed an, Versionierung aus
Container Ein privater Container pro ADLS-Connection

Flag für den öffentlichen Netzwerkzugriff

Der Code setzt public_network_access_enabled = true auf dem Storage Account zusammen mit einer Default-Action Deny der firewall. In der Praxis blockiert die firewall den öffentlichen Pfad, aber prüfe, was deine Plattform-Policy erwartet.

Identität

  • Workspace-Zugriff läuft über Entra-ID-Gruppen pro Rolle. Siehe Zugriff und Rollen.
  • Deployment-Identität: Der Service Principal des spokes deployt die Lösung. Er braucht unter anderem Rechte, um Keys zu erstellen und Secrets im Key Vault des spokes zu lesen, und die Rolle Storage Blob Data Contributor auf dem Data Lake (das module weist sie dem aktuellen Aufrufer zu). Für die capacity-Administratoren braucht er Microsoft-Graph-Anwendungsberechtigungen, siehe Voraussetzungen.
  • Zugriff auf Datenquellen: Für Quellen mit Entra-ID-Authentifizierung (Azure Storage, SQL) wird ein Service Principal verwendet. Standardmäßig ist es der Service Principal des spokes, aber es kann ein eigener referenziert werden. Er bekommt Zugriff auf die Quelle außerhalb dieser Lösung. Für Quellen ohne Entra-ID-Authentifizierung werden Basic Credentials oder Keys im Key Vault gespeichert und per Name referenziert.
  • Automatisierungs-Identitäten: Die Logic Apps zum Pausieren und Fortsetzen nutzen eine Managed Identity mit der Custom Role Fabric Capacity Operator. Siehe Entscheidungen.

Reihenfolge des Deployments

  1. Voraussetzungen und Tenant-Einstellungen (Plattformkonfiguration).
  2. Shared-Tier (capacities, optional auto-pause).
  3. Governance-Tier (optional). Er braucht nur den Log-Analytics-Workspace und das Storage Account des spokes, kann also vor oder parallel zum Workload-Tier laufen.
  4. Workload-Tier pro Umgebung (Gateway, workspaces, Connections, Storage).
  5. Observability-Tier pro Umgebung (optional).