Zum Inhalt

Architektur

Diese Seite beschreibt das High-Level-Design des Portals. Es ist ein Referenzdesign: Dein Deployment kann sich in Namen, Netzwerk-Layout und der Menge der aktivierten Features unterscheiden.

Designprinzipien

Prinzip Bedeutung
Eine Code-Basis, ein Image pro Umgebung Jede Kundenumgebung führt denselben Code aus. Der Build erzeugt das Image einmal, und jede Umgebung erhält es (Deployment und Umgebungen).
Features per Konfiguration Eine Konfigurationsdatei und Feature-Flags entscheiden, welche Plugins geladen werden (Konfiguration).
Daten bleiben in der Umgebung Das Portal liest aus deinem Azure-Bestand und speichert seine Daten in einer Datenbank in deiner subscription.
Standardmäßig privat Datenbank, Key Vault und Container Registry haben im Referenzdesign keinen öffentlichen Zugriff, und die Web-App hat Private Endpoints. Öffentlicher Zugriff auf die Web-App ist eine Einstellung.

Systemkontext

flowchart LR
    user[Portal user]
    subgraph env["Portal environment (customer subscription)"]
        portal[Portal<br/>web app and backend]
    end
    entra[Microsoft Entra ID]
    azure[Azure: Resource Graph,<br/>Cost Management, Defender,<br/>Policy, Log Analytics]
    repos[Azure DevOps and GitHub<br/>repositories]
    models[Model endpoint<br/>Azure AI Foundry]
    mcp[MCP clients<br/>editors and agents]

    user -->|HTTPS| portal
    mcp -->|HTTPS| portal
    portal -->|sign-in, users, groups| entra
    portal -->|read| azure
    portal -->|read catalog files, pull requests| repos
    portal -->|chat completions| models

Komponenten

flowchart TB
    subgraph web["App Service (Linux container)"]
        fe[Frontend<br/>React, Backstage]
        be[Backend<br/>Node.js, Backstage]
        fe --> be
    end
    subgraph plugins["Backend plugins"]
        cat[Catalog and modules]
        ins[Insights:<br/>cost, network, security, compliance]
        ag[AI agents]
        mr[Module registry]
        act[MCP actions]
        perm[Permission policy]
    end
    be --- plugins
    pg[(PostgreSQL<br/>Flexible Server)]
    sql[(Azure SQL<br/>cost data)]
    be --> pg
    ins --> sql
    ag --> pg
Komponente Zweck
Frontend Single-Page-Webanwendung auf Basis von Backstage. Seiten: workloads, Domänen, Organisation, Docs, Create, KI-Agenten, Module Registry, MCP Inspector.
Backend Ein Node.js-Prozess, der alle Backend-Plugins, den MCP-Server und die Agent-Schleife hostet.
Catalog und Module Entity-Modell, Azure-Resource-Graph-Provider, Azure-DevOps-Provider, Zusammenführen von Fragmenten. Siehe Catalog und Entity-Modell.
Insights Kosten, Netzwerk, Security und Compliance. Siehe Insights.
KI-Agenten In-Process-Agent-Schleife, die einen Modell-Endpunkt und die eigenen Tools des Portals aufruft. Siehe KI-Agenten.
PostgreSQL Catalog, Plugin-Daten und Agent-Konversationen. Nur Entra-Authentifizierung.
Azure SQL Von Data Factory aufbereitete Kostendaten. Nur vorhanden, wenn Cost Insights aktiviert sind.

Azure-Ressourcen pro Umgebung

Die Terraform-Module erstellen die folgenden Ressourcen für eine Umgebung. Optionale Teile hängen von den Features ab, die du aktivierst.

Ressource Hinweise
Linux-Web-App mit Staging-Slot Container-Image aus der Registry, System- und User-Assigned Identities, nur HTTPS, minimal TLS 1.2, Health Check auf dem Liveness-Endpunkt, VNet-Integration
App Service Plan Die Referenzumgebung nutzt einen Premium-v3-P0v3-Plan. Dimensioniere ihn nach deiner Last.
PostgreSQL Flexible Server Version 16, standardmäßig Burstable B2s, 32 GB Storage, 7 Tage Backup, keine Geo-Redundanz, kein öffentlicher Zugriff, nur Entra-Authentifizierung, Extensions azure_storage, pg_cron und pg_stat_statements
Key Vault RBAC-Autorisierung, Purge Protection, 7 Tage Soft Delete, kein öffentlicher Zugriff
Container Registry Premium-SKU, kein öffentlicher Zugriff
Application Insights und Log Analytics Telemetrie und Logs
Private Endpoints Für Produktions- und Staging-Slot und für die unterstützenden Services
Cost Insights (optional) Data Factory, Storage, optionale Data-Lake-Gen2-Accounts, Azure SQL (standardmäßig S0), Managed Identities und Failure-Alert. Siehe Cost-Insights-Einrichtung.
AI Foundry (optional) AIServices-Account, Projekt, Modell-Deployments und Private Endpoint. Siehe KI-Einrichtung.
Alerting (optional) Ein PagerDuty-Service, über eine Azure-Monitor-Action-Group integriert

Bestehende landing zone

Das Portal wird in einen bestehenden spoke deployt. Ein reines Daten-Terraform-Modul liest die bestehende Spoke-Resource-Group, das virtuelle Netzwerk, die Subnets, den Key Vault und den Log-Analytics-workspace, statt sie zu erstellen. Siehe Spoke canvas.

Daten- und Netzwerkgrenzen

Zwei Entscheidungen prägen die Grenzen (Entscheidungen):

  • Die Umgebung ist privat. Web-App, Registry, Key Vault und Datenbank werden über Private Endpoints erreicht. Die Deployment-Runner des Anbieters erreichen sie über Private Endpoints, die der Kunde genehmigt, und der Kunde kann diese Verbindung widerrufen.
  • Daten werden in der Kundenumgebung verarbeitet. Kosten-, Security-, Netzwerk- und Compliance-Daten werden in der subscription des Kunden gelesen und gespeichert, sodass der Anbieter für diese Daten nicht als Auftragsverarbeiter auftritt.
flowchart LR
    subgraph prov["Provider platform network"]
        run[Deployment runners]
    end
    subgraph cust["Customer subscription"]
        subgraph vnet["Spoke VNet"]
            pe1[Private endpoints:<br/>storage, key vault,<br/>registry, SQL, web app,<br/>staging slot]
            app[Web app<br/>VNet integration]
            pg[(PostgreSQL<br/>delegated subnet)]
        end
    end
    run -->|manual connection,<br/>customer approves| pe1
    app --> pg
    app --> pe1

Der öffentliche Zugriff auf die Web-App hat im Terraform-Modul drei Werte: kein öffentlicher Zugriff, voller öffentlicher Zugriff (der Standard) oder ein eingeschränkter Wert für den Azure AI Agent Service. Nutze eine WAF oder eine Zugriffsbeschränkung vor der Web-App für den Benutzerverkehr (WAF und eigene Domain).

Ausgehendes HTTPS von der Web-App wird zu den Service-Tags AzureResourceManager, AzureActiveDirectory und AzureMonitor sowie zu graph.microsoft.com benötigt. Siehe Voraussetzungen.

Subnets im Referenzdesign

Subnet Zweck
default Private Endpoints
app service An die Web-App delegiert (VNet-Integration)
PostgreSQL An PostgreSQL Flexible Server delegiert
container app Nur genutzt, wenn KI-Agenten mit Bring-your-own-Ressourcen laufen

Kosten-Datenfluss

flowchart LR
    cm[Cost Management<br/>FOCUS export] -->|Parquet, Snappy| st[(Storage account /<br/>Data Lake)]
    st --> adf[Data Factory<br/>daily pipeline]
    adf --> sql[(Azure SQL<br/>views)]
    sql --> be[Portal backend]

Das Portal erstellt die Kosten-Exporte selbst. Siehe Cost-Insights-Einrichtung.