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.