OSIRIS JSON-Producer für Microsoft Azure
Der Azure-Producer für OSIRIS JSON stellt über die Azure CLI (az) eine Verbindung zu Microsoft Azure her und erzeugt OSIRIS-JSON-Snapshots Ihrer Abonnementtopologie. Seit v0.4.0 deckt der Producer die Ebenen Netzwerk, Compute, Storage, Identität, Datenbanken, Container, Integration, Observability und Backup ab, einschließlich ihrer ressourcenübergreifenden Abhängigkeitskanten (Private Endpoint zu PaaS-Zielen, App Service zu App Insights, Log Analytics, RSV, Backup Vault zu geschützten Elementen, AKS zu Subnetzen und Node Pools usw.).
Um OSIRIS JSON für Microsoft Azure zu verwenden, installieren Sie den Core-Dispatcher und den OSIRIS JSON-Producer für Microsoft Azure:
go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-azure@latest
Mit dem Core-Dispatcher können Sie osirisjson-producer azure ... ausführen. Ohne ihn rufen Sie die Hersteller-Binärdatei direkt als osirisjson-producer-azure ... auf.
Stellen Sie sicher, dass $GOPATH/bin (oder $HOME/go/bin) in Ihrem PATH enthalten ist. Weitere Installationsoptionen finden Sie auf der Seite Erste Schritte.
Voraussetzungen
- Installieren Sie die Azure CLI
- Authentifizieren Sie sich:
az login - Der authentifizierte Benutzer muss auf dem oder den Zielabonnements die Rolle Reader (oder eine gleichwertige Leseberechtigung) besitzen. Für die vollständige Datenerfassung einschließlich effektiver Routen benötigt der Benutzer außerdem die Berechtigung
Microsoft.Network/networkInterfaces/effectiveRouteTable/action(enthalten in Network Contributor und höher). Fehlt diese Berechtigung, überspringt der Producer die Erfassung effektiver Routen mit einem INFO-Log und läuft normal weiter.
Sie können den Producer auf Ihrem lokalen Rechner ausführen oder ihn per geplantem Job mit einem Service Account auf der Plattform Ihrer Wahl aufrufen.
CLI-Verwendung
osirisjson-producer azure [flags]
osirisjson-producer azure template --generate
Einzelmodus
Beginnen Sie mit der Erfassung eines Abonnements, das automatisch als microsoft-azure-<timestamp>-<name>.json gespeichert wird:
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890
Interaktiver Modus
Führen Sie den Producer ohne Flags aus, um eine interaktive Abonnementauswahl zu erhalten:
osirisjson-producer azure
Der Producer erkennt alle zugänglichen Abonnements und zeigt eine nummerierte Liste an. Wählen Sie über einzelne Nummern (1,3,5), Bereiche (30-55), Kombinationen (1,3,30-55) oder geben Sie all ein.
Multi-Abonnement-Modus
Erfassen Sie mehrere Abonnements in ein Ausgabeverzeichnis:
# Bestimmte Abonnements
osirisjson-producer azure -S sub-id-1,sub-id-2,sub-id-3 -o ./output
# Alle zugänglichen Abonnements (automatische Erkennung)
osirisjson-producer azure --all -o ./output
# Alle Abonnements in einem bestimmten Tenant
osirisjson-producer azure --all --tenant f1e2d3c4-b5a6-9078-fedc-ba9876543210 -o ./output
Batch-Modus (CSV)
Erzeugen Sie eine CSV-Vorlage:
osirisjson-producer azure template --generate
Erfassen Sie aus einer CSV-Datei:
osirisjson-producer azure -s subscriptions.csv -o ./output
Die CSV-Vorlage verwendet diese Spalten:
| Spalte | Erforderlich | Beschreibung |
|---|---|---|
subscription_id | ja | UUID des Azure-Abonnements |
subscription_name | ja | Menschenlesbare Bezeichnung (wird als Name der Ausgabedatei verwendet) |
tenant_id | UUID des Azure-AD- / Entra-ID-Tenants | |
environment | Bereitstellungsstufe: dv, np, pr (Entwicklung, Nicht-Produktion, Produktion) | |
region | Auf Azure-Region filtern (leer = alle Regionen) | |
notes | Freitextnotizen (werden vom Producer ignoriert) |
Ausgabehierarchie
Einzelmodus: speichert in microsoft-azure-<timestamp>-<name>.json im aktuellen Verzeichnis.
Multi-/Batch-/Alle-Modi: nach Tenant und Zeitstempel organisiert:
output/
<TenantID>/
<timestamp>/
<SubscriptionName>.json
Jedes Abonnement erzeugt ein in sich geschlossenes OSIRIS-Dokument. Abonnementübergreifende Referenzen (z. B. VNet-Peerings oder ExpressRoute-Verbindungen zu entfernten Abonnements) werden als Stub-Ressourcen mit provider.subscription, gesetzt auf die ID des entfernten Abonnements, ausgegeben, sodass die Topologiekante die Grenze überlebt und das Dokument dennoch gültig bleibt.
Multi-Tenant-Umgebungen
Führen Sie den Producer einmal pro Tenant aus. Jedes az login authentifiziert sich bei genau einem Tenant. Verwenden Sie az login --tenant <tenant-id>, um zu wechseln. Die Ausgabehierarchie gruppiert Dokumente automatisch nach Tenant.
Flag-Referenz
| Flag | Kurz | Beschreibung |
|---|---|---|
--subscription | -S | Azure-Abonnement-ID(s), kommagetrennt |
--all | Alle zugänglichen Abonnements automatisch erkennen | |
--source | -s | CSV-Datei mit Abonnementzielen |
--output | -o | Ausgabeverzeichnis (für Multi-/Alle-/CSV-Modus erforderlich) |
--tenant | Azure-AD- / Entra-ID-Tenant-ID (optional) | |
--region | Auf eine bestimmte Azure-Region filtern (optional) | |
--purpose | Detaillierungsgrad der Ausgabe: documentation (Standard) oder audit. Siehe Zweck unten | |
--safe-failure-mode | Umgang mit Geheimnissen: fail-closed (Standard), log-and-redact, off | |
--version / -v | Version anzeigen und beenden | |
--help | Hilfe anzeigen und beenden |
Zweck
Das Flag --purpose implementiert OSIRIS-JSON-Spezifikationskapitel 13.1.3 (Datenminimierung). Die Erfassung ist immer vollständig; die Ausgabe wird durch den angegebenen Zweck geformt, sodass derselbe Producer-Lauf sowohl für leichtgewichtige Visualisierungsszenarien als auch für Audit- / Compliance-Anwendungsfälle verwendet werden kann.
| Wert | Verhalten |
|---|---|
documentation (Standard) | Minimale Felder: Identität, Typ, Provider-Nachvollziehbarkeit, Namen, Tags und Beziehungen auf hoher Ebene. Die properties- und extensions-Maps pro Ressource werden entfernt. Geeignet für Diagramme, Inventar-Dashboards und Dokumentation auf hoher Ebene. |
audit | Jedes lesbare Feld nach der Schwärzung sensibler Felder. Vollständige properties- und extensions-Maps für jede Ressource, Verbindung und Gruppe. Geeignet für Compliance-Reviews, Audits, Konfigurationsdrift oder tiefgehende Dokumentation und präzises Topologiedesign. |
Der ausgewählte Wert wird im Dokument unter metadata.scope.purpose erfasst, damit Consumer erkennen können, welchen Detailgrad sie lesen.
[!IMPORTANT] Geheimnisse werden unabhängig vom Zweck immer geschwärzt. Die Audit-Projektion fügt Details hinzu (IP-Adressen, NSG-Regeln, SKU-Unterfelder, BGP-Details usw.); sie fügt niemals Authentifizierungsmaterial hinzu. Datenbank-Admin-Passwörter, Zugriffsschlüssel für Cosmos / Redis / Service Bus / Event Hubs, App-Insights-Instrumentierungsschlüssel und gemeinsam genutzte Schlüssel von Log Analytics werden nie erfasst.
# Standard: documentation (minimale Projektion)
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890
# Audit: vollständige ARM-Treue
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890 --purpose audit
Was der OSIRIS JSON-Producer für Microsoft Azure erfasst
Der OSIRIS JSON-Producer für Microsoft Azure erfasst bei jedem Lauf über die Azure CLI ein vollständiges Inventar der unterstützten Ressourcentypen. Die folgende Tabelle gruppiert die abgefragten Daten.
Netzwerk
| Microsoft-Azure-Ressource | OSIRIS-JSON-Typ |
|---|---|
| Virtuelle Netzwerke | network.vpc |
| Subnetze | network.subnet |
| Netzwerkschnittstellen | network.interface |
| Netzwerksicherheitsgruppen | network.security.group |
| Anwendungssicherheitsgruppen | osiris.azure.asg |
| Routingtabellen | osiris.azure.routetable |
| Öffentliche IP-Adressen | osiris.azure.publicip |
| Load Balancers (L4) | network.loadbalancer |
| Application Gateways (L7) | network.loadbalancer |
| Azure Firewalls | network.firewall |
| NAT Gateways | osiris.azure.gateway.nat |
| VNet Gateways (VPN / ExpressRoute) | osiris.azure.gateway.vnet |
| ExpressRoute Circuits | osiris.azure.expressroute |
| Private Endpoints | osiris.azure.privateendpoint |
| DNS-Zonen | osiris.azure.dns.zone |
| Private DNS-Zonen | osiris.azure.dns.privatezone |
Compute und Speicher
| Microsoft-Azure-Ressource | OSIRIS-JSON-Typ |
|---|---|
| Virtuelle Maschinen | compute.vm |
| Verwaltete Datenträger | osiris.azure.disk |
| Verwaltete Snapshots | osiris.azure.snapshot |
| Storage Accounts | osiris.azure.storageaccount |
App Service / Web-Tier
| Microsoft-Azure-Ressource | OSIRIS-JSON-Typ |
|---|---|
| App Service Plan | osiris.azure.appserviceplan |
| Web App | osiris.azure.webapp |
| Function App | osiris.azure.functionapp |
App-Service-Routing: Sites, deren kind functionapp enthält, werden als osiris.azure.functionapp ausgegeben; alle anderen Sites werden als osiris.azure.webapp ausgegeben.
Identität und Sicherheit
| Microsoft-Azure-Ressource | OSIRIS-JSON-Typ |
|---|---|
| Key Vault | osiris.azure.keyvault |
| Container Registry | osiris.azure.containerregistry |
| User-Assigned Managed Identity | osiris.azure.managedidentity |
Backup und Disaster Recovery
| Microsoft-Azure-Ressource | OSIRIS-JSON-Typ |
|---|---|
| Recovery Services Vault | osiris.azure.recoveryvault |
| Backup Vault (Azure Backup) | osiris.azure.backupvault |
Datenbanken
| Microsoft-Azure-Ressource | OSIRIS-JSON-Typ |
|---|---|
| SQL Server | osiris.azure.sqlserver |
| SQL Database | osiris.azure.sqldatabase |
| PostgreSQL Flexible Server | osiris.azure.postgresqlserver |
| MySQL Flexible Server | osiris.azure.mysqlserver |
| Cosmos-DB-Konto | osiris.azure.cosmosaccount |
| Redis Cache | osiris.azure.redis |
Container und Integration
| Microsoft-Azure-Ressource | OSIRIS-JSON-Typ |
|---|---|
| AKS Cluster | osiris.azure.aks.cluster |
| AKS Agent Pool | osiris.azure.aks.nodepool |
| Container App Managed Environment | osiris.azure.containerapp.environment |
| Container App | osiris.azure.containerapp |
| Container Group / ACI | osiris.azure.containergroup |
| Service Bus Namespace | osiris.azure.servicebus.namespace |
| Event Hubs Namespace | osiris.azure.eventhubs.namespace |
| API Management Service | osiris.azure.apim |
| Front Door (Standard / Premium) | osiris.azure.frontdoor.profile |
Observability
| Microsoft-Azure-Ressource | OSIRIS-JSON-Typ |
|---|---|
| Application Insights | osiris.azure.applicationinsights |
| Log Analytics Workspace | osiris.azure.loganalytics |
Containment
| Microsoft-Azure-Ressource | OSIRIS-JSON-Typ |
|---|---|
| Resource Groups | container.resourcegroup |
Was absichtlich nicht erfasst wird
OSIRIS JSON definiert ein herstellerneutrales JSON-Format zur Beschreibung von Infrastrukturressourcen, ihrer Eigenschaften und ihrer topologischen Beziehungen; es ist kein Infrastructure-as-Code- oder ähnliches Format. Mehr dazu finden Sie hier: Was ist OSIRIS JSON. Das Folgende ist bewusst außerhalb des Umfangs:
- Monitoring-Richtlinien: alert rules, action groups, metric alerts, scheduled query rules.
- Backup- / Aufbewahrungsrichtlinien innerhalb von Recovery Services Vault und Backup Vault (die Vaults und die Kanten zu geschützten Elementen werden ausgegeben; die Richtlinieninhalte nicht).
- Richtlinien auf Datenbankebene: SQL auditing, threat-detection, TDE, firewall rules, security-alert-policy.
- API-Management-Richtlinien, Produkte, Operationen und named values.
- Front-Door-Routen, rule sets, Endpoints und WAF-Richtlinienzuordnungen (das Profil wird ausgegeben; das Routing nicht).
- Container-App-Secrets und ACI-Umgebungsvariablen.
- Diagnostic-Settings-Aufzählung pro Ressource (würde einen
az-Aufruf pro Ressource hinzufügen). - Klassisches Azure Front Door (
Microsoft.Network/frontDoors, veraltet). - Veraltetes
Microsoft.DBforPostgreSQL/servers(Single Server, End-of-Life auf Azure-Roadmap).
OSIRIS-JSON-Ausgabestruktur für Microsoft Azure
{
"$schema": "https://osirisjson.org/schema/v1.0/osiris.schema.json",
"version": "1.0.0",
"metadata": {
"generator": {
"name": "osirisjson-producer-azure",
"version": "0.4.0",
"url": "https://osirisjson.org"
},
"scope": {
"name": "<subscription-id> - <subscription-name>",
"purpose": "documentation",
"providers": ["azure"],
"accounts": ["<tenant-id>"],
"subscriptions": ["<subscription-id>"],
"regions": ["westeurope", "eastus2"]
}
},
"topology": {
"resources": [ ... ],
"connections": [ ... ],
"groups": [ ... ]
}
}
Verbindungstypen
Verbindungskanten verwenden die Standard-Subtypen von OSIRIS JSON v1.0 gemäß Spezifikationskapitel 5.2.3, damit Consumer Topologieebenen voneinander unterscheiden können.
| OSIRIS-JSON-Verbindungstyp | Verwendet für |
|---|---|
contains | Containment (Subnet innerhalb eines VNet, App Service Plan innerhalb einer Site, AKS Cluster innerhalb eines Node Pools, RG innerhalb eines Abonnements, SQL Server innerhalb einer SQL Database, Quelldatenträger innerhalb eines Snapshots, VM innerhalb eines angehängten Datenträgers) |
network | Generische Netzwerkkonnektivität (NIC zu Subnetz, NSG-Zuordnungen, DNS-Links, Gateway-Verbindungen, App Insights zu Workspace, Web App zu App Insights, AKS / Redis / ACI zu Subnetz, APIM zu Subnetz) |
network.peering | VNet-Peerings |
network.vpn | VPN-Gateway-Verbindungen |
network.bgp | ExpressRoute-Circuit-Verbindungen |
dependency | Private Endpoint zu einem PaaS-Ziel (Web App, Function App, Key Vault, Container Registry, Recovery Services Vault, AKS Cluster, Service Bus, Event Hubs, APIM) |
dependency.storage | Private Endpoint zu Storage Account |
dependency.database | Private Endpoint zu Datenbank (SQL Server, Cosmos DB, Redis) |
Gruppentypen
| OSIRIS-JSON-Gruppentyp | Verwendet für |
|---|---|
logical.subscription | Abonnementgruppe auf oberster Ebene |
logical.resourcegroup | Resource-Group-Gruppen (Kinder des Abonnements) |
container.region | Eine Gruppe pro eindeutigem provider.region, der im Abonnement beobachtet wird; jede Ressource dieser Region wird Mitglied. Die Region global und Ressourcen ohne Region werden übersprungen (sie sind nicht geografisch abgegrenzt). Das Grenz-Token ist <subscription-id>/<region>, daher kollidieren Gruppen nie zwischen Abonnements. |
Ressourcentypen
Ressourcentypen folgen der OSIRIS JSON v1.0-Spezifikation. Standardtypen werden dort verwendet, wo sie definiert sind; Azure-spezifische Typen verwenden den Namespace osiris.azure.*.
Standardtypen:
container.resourcegroup- Resource Groupsnetwork.vpc- Virtuelle Netzwerkenetwork.subnet- Subnetzenetwork.interface- Netzwerkschnittstellennetwork.security.group- Netzwerksicherheitsgruppennetwork.loadbalancer- Load Balancers (L4 und L7 / Application Gateway)network.firewall- Azure Firewallscompute.vm- Virtuelle Maschinen
Erweiterungen (osiris.azure)
Azure-spezifische Daten, die nicht auf portable OSIRIS-JSON-Eigenschaften abgebildet werden, werden unter dem Erweiterungs-Namespace osiris.azure ausgegeben. Dies folgt der OSIRIS-JSON-Spezifikation: properties enthält gemeinsame / portable Daten, extensions enthält herstellerspezifische Tiefendaten. Erweiterungen werden nur unter --purpose audit ausgegeben.
Repräsentative Erweiterungen umfassen:
| OSIRIS-JSON-Ressourcentyp | Ausgewählte Erweiterungsfelder |
|---|---|
network.interface | enable_accelerated_networking, effective_routes[] |
network.security.group | security_rules[], default_security_rules[] |
osiris.azure.expressroute | sku, sku_tier, service_provider, peerings[] (BGP-Peering-Typ, Status, Peer-ASN, VLAN-ID, Adresspräfixe) |
osiris.azure.webapp / osiris.azure.functionapp | managed_identity, outbound_vnet_routing, private_endpoint_connection_ids[], app_insights_id |
osiris.azure.storageaccount / osiris.azure.keyvault / osiris.azure.containerregistry / osiris.azure.recoveryvault / osiris.azure.sqlserver / osiris.azure.cosmosaccount | private_endpoint_connection_ids[] |
osiris.azure.applicationinsights | workspace_resource_id (gebundener Log-Analytics-Workspace) |
osiris.azure.loganalytics | customer_id (vom KQL verwendete Workspace-UUID; kein Geheimnis) |
Provider-Metadaten
Jede Ressource enthält provider.type mit dem nativen ARM-Ressourcentyp (z. B. Microsoft.Network/virtualNetworks, Microsoft.Compute/virtualMachines). Abonnementübergreifende Stubs enthalten provider.subscription mit der ID des entfernten Abonnements. Alle Ressourcen enthalten provider.source mit dem Wert azure-cli.
Ressourcen-IDs
Azure-Ressourcen-IDs folgen dem Muster azure::<ARM-resource-id> und verwenden die vollständige ARM-Ressourcen-ID als nativen Bezeichner. Das gewährleistet global eindeutige, deterministische IDs, die eine abonnementübergreifende Korrelation überstehen.
Region-Kanonisierung
provider.region und metadata.scope.regions werden in die Azure-Slug-Form kanonisiert (kleingeschrieben, ohne Leerzeichen). Die az-CLI gibt location je nach Ressourcentyp inkonsistent zurück: Die meisten ARM-Ressourcen verwenden westeurope / eastus2, während App Service Plans und Web Apps die Anzeigeform (West Europe) liefern. Der Producer normalisiert auf den Slug, damit ein Abonnement mit nur einer Region nicht als zwei Regionen in metadata.scope.regions erscheint.
RBAC-Anforderungen
| Berechtigungsstufe | Was erfasst wird |
|---|---|
| Reader | Alle Ressourcentypen, Eigenschaften und Erweiterungen (NSG-Regeln, ER-Peerings, Gateway-Verbindungen, VNet-Peerings, DNS-Links, Private-Endpoint-zu-Ziel-Kanten, App Service zu App Insights, AKS-, Container-, Datenbank-, Messaging- und Observability-Ressourcen) |
Reader + effectiveRouteTable/action | Alles oben Genannte + effektive NIC-Routen |
| Network Contributor / Owner | Vollständiger Datensatz ohne Einschränkungen |
Der Producer prüft die Berechtigung an der ersten NIC und überspringt die Erfassung effektiver Routen kontrolliert, wenn die Berechtigung verweigert wird. Alle anderen Daten werden unabhängig davon erfasst.
Beispiele
Einzelnes Abonnement
Wir werden ein einzelnes Abonnement in unserem Tenant untersuchen und daraus in Microsoft Azure ein OSIRIS-JSON-Dokument erzeugen.
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890 --purpose audit
OSIRIS-JSON-Ausgabedokument (gekürzt, --purpose audit):
{
"$schema": "https://osirisjson.org/schema/v1.0/osiris.schema.json",
"version": "1.0.0",
"metadata": {
"generator": {
"name": "osirisjson-producer-azure",
"version": "0.4.0",
"url": "https://osirisjson.org"
},
"scope": {
"name": "a1b2c3d4-e5f6-7890-abcd-ef1234567890 - my-nonprod-subscription",
"purpose": "audit",
"providers": ["azure"],
"accounts": ["f1e2d3c4-b5a6-9078-fedc-ba9876543210"],
"subscriptions": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"],
"regions": ["westeurope"]
}
},
"topology": {
"resources": [
{
"id": "azure::/subscriptions/a1b2c3d4/resourceGroups/network-rg/providers/Microsoft.Network/virtualNetworks/hub-vnet",
"type": "network.vpc",
"name": "hub-vnet",
"status": "active",
"provider": {
"name": "azure",
"native_id": "/subscriptions/a1b2c3d4/resourceGroups/network-rg/providers/Microsoft.Network/virtualNetworks/hub-vnet",
"type": "Microsoft.Network/virtualNetworks",
"region": "westeurope",
"source": "azure-cli",
"subscription": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tenant": "f1e2d3c4-b5a6-9078-fedc-ba9876543210"
},
"properties": {
"resource_group": "network-rg",
"address_space": ["10.0.0.0/16"],
"dns_servers": ["10.0.0.4"],
"subnet_count": 4,
"enable_ddos_protection": false,
"peerings": [
{
"name": "hub-to-spoke",
"peering_state": "Connected",
"remote_vnet_id": "/subscriptions/a1b2c3d4/.../spoke-vnet",
"allow_gateway_transit": true,
"allow_forwarded_traffic": true
}
]
}
},
{
"id": "azure::/subscriptions/a1b2c3d4/resourceGroups/data-rg/providers/Microsoft.Storage/storageAccounts/mystg",
"type": "osiris.azure.storageaccount",
"name": "mystg",
"status": "active",
"provider": {
"name": "azure",
"native_id": "/subscriptions/a1b2c3d4/resourceGroups/data-rg/providers/Microsoft.Storage/storageAccounts/mystg",
"type": "Microsoft.Storage/storageAccounts",
"region": "westeurope",
"source": "azure-cli",
"subscription": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tenant": "f1e2d3c4-b5a6-9078-fedc-ba9876543210"
},
"properties": {
"resource_group": "data-rg",
"sku_tier": "Standard",
"sku_name": "Standard_LRS",
"kind": "StorageV2",
"access_tier": "Hot",
"https_only": true,
"min_tls_version": "TLS1_2",
"public_network_access": "Disabled",
"allow_blob_public_access": false
},
"extensions": {
"osiris.azure": {
"private_endpoint_connection_ids": [
"/subscriptions/a1b2c3d4/.../privateEndpoints/pe-mystg"
]
}
}
}
],
"connections": [
{
"source": "azure::/subscriptions/a1b2c3d4/.../subnets/default",
"target": "azure::/subscriptions/a1b2c3d4/.../virtualNetworks/hub-vnet",
"type": "contains",
"direction": "forward"
},
{
"source": "azure::/subscriptions/a1b2c3d4/.../privateEndpoints/pe-mystg",
"target": "azure::/subscriptions/a1b2c3d4/.../storageAccounts/mystg",
"type": "dependency.storage",
"direction": "forward"
}
],
"groups": [
{
"id": "azure::subscription::a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "logical.subscription",
"name": "my-nonprod-subscription",
"children": [
"azure::resourcegroup::network-rg",
"azure::resourcegroup::data-rg"
]
},
{
"id": "azure::region::a1b2c3d4-e5f6-7890-abcd-ef1234567890/westeurope",
"type": "container.region",
"name": "westeurope",
"members": [
"azure::/subscriptions/a1b2c3d4/.../virtualNetworks/hub-vnet",
"azure::/subscriptions/a1b2c3d4/.../storageAccounts/mystg"
]
}
]
}
}
Der gleiche Lauf mit dem Standardwert --purpose documentation gibt denselben Ressourcengraphen zurück, jedoch mit entfernten properties- und extensions-Maps für jede Ressource, Verbindung und Gruppe. Dadurch eignet er sich für Topologieansichten auf hoher Ebene und Dokumentation.