OSIRIS JSON Producer für Microsoft Azure
Der OSIRIS JSON Azure Producer verbindet sich über die Azure CLI (az) mit Microsoft Azure und erzeugt OSIRIS-JSON-Snapshots Ihrer Abonnement-Topologie - virtuelle Netzwerke, Subnetze, NICs, NSGs, Load Balancer, Firewalls, VMs und mehr.
Um OSIRIS JSON für Microsoft Azure zu verwenden, installieren Sie den Core-Dispatcher und den Azure Producer:
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 Anbieter-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 über eine Leseberechtigung für ein oder mehrere Ziel-Abonnements verfügen. Sie können den Producer auf Ihrem lokalen Rechner ausführen oder ihn per geplantem Job mit einem Servicekonto über Ihre bevorzugte Software oder Plattform aufrufen.
CLI-Verwendung
osirisjson-producer azure [flags]
osirisjson-producer azure template --generate
Einzelmodus
Beginnen Sie mit dem Erfassen 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 Befehl ohne Flags aus, um eine interaktive Auswahl für Abonnements zu erhalten:
osirisjson-producer azure
Der Producer erkennt alle zugänglichen Abonnements und zeigt eine nummerierte Liste an. Wählen Sie eines oder mehrere aus (durch Kommas getrennt) oder geben Sie all ein.
Mehrfach-Abonnement-Modus
Erfassen Sie mehrere Abonnements in einem Ausgabeverzeichnis:
# Specific subscriptions
osirisjson-producer azure -S sub-id-1,sub-id-2,sub-id-3 -o ./output
# All accessible subscriptions (auto-discover)
osirisjson-producer azure --all -o ./output
# All subscriptions in a specific 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 Daten 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 Ausgabedateiname verwendet) |
tenant_id | UUID des Azure AD / Entra ID Tenants | |
environment | Bereitstellungsstufe: dv, np, pr (Entwicklung, Nicht-Produktion, Produktion) | |
region | Nach Azure-Region filtern (leer = alle Regionen) | |
notes | Freitextnotizen (werden vom Producer ignoriert) |
Ausgabehierarchie
Einzelmodus: speichert als microsoft-azure-<timestamp>-<name>.json im aktuellen Verzeichnis.
Multi-/Batch-/All-Modi: nach Tenant und Zeitstempel organisiert:
output/
<TenantID>/
<timestamp>/
<SubscriptionName>.json
Jedes Abonnement erzeugt ein eigenständiges OSIRIS-Dokument. Abonnementübergreifende Referenzen (z. B. VNet-Peerings zu entfernten Abonnements) verwenden deterministische Ressourcen-IDs, die von Konsumenten über Dokumente hinweg korreliert werden können.
Multi-Tenant-Umgebungen
Führen Sie den Producer einmal pro Tenant aus. Jede az login-Anmeldung authentifiziert sich für einen Tenant. Verwenden Sie az login --tenant <tenant-id>, um zu wechseln. Die Ausgabehierarchie gruppiert Dokumente automatisch nach Tenant.
Flag-Referenz
| Flag | Kurzform | Beschreibung |
|---|---|---|
--subscription | -S | Azure-Abonnement-ID(s), durch Kommas getrennt |
--all | Alle zugänglichen Abonnements automatisch erkennen | |
--source | -s | CSV-Datei mit Abonnement-Zielen |
--output | -o | Ausgabeverzeichnis (erforderlich für Multi-/All-/CSV-Modus) |
--tenant | Azure AD / Entra ID Tenant-ID (optional) | |
--region | Nach einer bestimmten Azure-Region filtern (optional) | |
--detail | Detailgrad: minimal (Standard) oder detailed | |
--safe-failure-mode | Umgang mit Geheimnissen: fail-closed (Standard), log-and-redact, off | |
--version / -v | Version anzeigen und beenden | |
--help | Hilfe anzeigen und beenden |
Was er erfasst
Der Azure Producer fragt über die Azure CLI die folgenden Ressourcentypen ab:
Minimalmodus:
| Azure-Ressourcentyp | OSIRIS-Typ | Beschreibung |
|---|---|---|
| Virtual Networks | network.vpc | VNets mit Adressraum, DNS und Peerings |
| Subnets | network.subnet | Subnetze mit Adresspräfixen und Service Endpoints |
| Network Interfaces | network.interface | NICs mit IP-Konfigurationen |
| Network Security Groups | network.security.group | NSGs mit Regelzusammenfassungen |
| Route Tables | osiris.azure.routetable | UDRs mit Anzahl der Routen |
| Public IP Addresses | osiris.azure.publicip | Öffentliche IPs mit Zuweisungsmethode |
| Load Balancers | network.loadbalancer | L4-Load-Balancer |
| Application Gateways | network.loadbalancer | L7-Load-Balancer (Application Gateways) |
| Private Endpoints | osiris.azure.privateendpoint | Private-Link-Endpunkte |
| VNet Gateways | osiris.azure.gateway.vnet | ExpressRoute- / VPN-Gateways |
| NAT Gateways | osiris.azure.gateway.nat | Ausgehende NAT-Gateways |
| Azure Firewalls | network.firewall | Azure-Firewall-Instanzen |
| DNS Zones | osiris.azure.dns.zone | Öffentliche DNS-Zonen |
| Private DNS Zones | osiris.azure.dns.privatezone | Private DNS-Zonen mit VNet-Links |
| ExpressRoute Circuits | osiris.azure.expressroute | ExpressRoute-Circuits |
| Virtual Machines | compute.vm | VMs mit Größe und Energiezustand |
| Resource Groups | container.resourcegroup | Ressourcengruppen als Container-Ressourcen |
Der detaillierte Modus ergänzt Details zu Routen in Routentabellen, Load-Balancer-Regeln und erweiterten Eigenschaften.
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.1.0"
},
"scope": {
"providers": ["azure"],
"accounts": ["<tenant-id>"],
"subscriptions": ["<subscription-id>"],
"regions": ["westeurope", "eastus"]
}
},
"topology": {
"resources": [ ... ],
"connections": [ ... ],
"groups": [ ... ]
}
}
Ressourcentypen
Die Ressourcentypen folgen der OSIRIS JSON v1.0-Spezifikation. Standardtypen werden verwendet, sofern definiert; Azure-spezifische Typen verwenden den Namespace osiris.azure.*.
Standardtypen:
container.resourcegroup- Ressourcengruppennetwork.vpc- Virtuelle Netzwerkenetwork.subnet- Subnetzenetwork.interface- Netzwerkschnittstellennetwork.security.group- Netzwerksicherheitsgruppennetwork.loadbalancer- Load Balancer (L4 und L7)network.firewall- Azure Firewallscompute.vm- Virtuelle Maschinen
Benutzerdefinierte Typen (osiris.azure.*):
osiris.azure.routetable- Routentabellenosiris.azure.publicip- Öffentliche IP-Adressenosiris.azure.privateendpoint- Private Endpunkteosiris.azure.gateway.vnet- VNet-Gateways (VPN/ExpressRoute)osiris.azure.gateway.nat- NAT-Gatewaysosiris.azure.dns.zone- DNS-Zonenosiris.azure.dns.privatezone- Private DNS-Zonenosiris.azure.expressroute- ExpressRoute-Circuits
Verbindungstypen
network- Netzwerkkonnektivität (VNet-Peerings, NIC-zu-Subnetz, NSG-Zuordnungen, DNS-Links, Gateway-Verbindungen)contains- Enthaltensein (Zugehörigkeit von Subnetz zu VNet)
Gruppentypen
logical.subscription- Abonnementgruppe auf oberster Ebenelogical.resourcegroup- Ressourcengruppengruppen (untergeordnete Elemente des Abonnements)
Anbieter-Metadaten
Jede Ressource enthält provider.type mit dem nativen ARM-Ressourcentyp (z. B. Microsoft.Network/virtualNetworks, Microsoft.Compute/virtualMachines). Abonnementübergreifende Peering-Stubs enthalten provider.subscription mit der ID des entfernten Abonnements.
Ressourcen-IDs
Azure-Ressourcen-IDs folgen dem Muster azure::<ARM-resource-id> und verwenden die vollständige ARM-Ressourcen-ID als nativen Bezeichner. Dies stellt global eindeutige, deterministische IDs sicher.
Beispiele
Einzelnes Abonnement
Wir werden ein einzelnes Abonnement in unserem Tenant untersuchen und aus Microsoft Azure ein OSIRIS-JSON-Dokument erzeugen.
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890
OSIRIS JSON-Ausgabedokument (gekürzt):
{
"$schema": "https://osirisjson.org/schema/v1.0/osiris.schema.json",
"version": "1.0.0",
"metadata": {
"generator": {
"name": "osirisjson-producer-azure",
"version": "0.1.0"
},
"scope": {
"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",
"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"]
}
},
{
"id": "azure::/subscriptions/a1b2c3d4/resourceGroups/compute-rg/providers/Microsoft.Compute/virtualMachines/web-vm-01",
"type": "compute.vm",
"name": "web-vm-01",
"status": "active",
"provider": {
"name": "azure",
"native_id": "/subscriptions/a1b2c3d4/resourceGroups/compute-rg/providers/Microsoft.Compute/virtualMachines/web-vm-01",
"type": "Microsoft.Compute/virtualMachines",
"region": "westeurope",
"subscription": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tenant": "f1e2d3c4-b5a6-9078-fedc-ba9876543210"
},
"properties": {
"resource_group": "compute-rg",
"vm_size": "Standard_D2s_v3",
"power_state": "VM running"
}
}
],
"connections": [
{
"source": "azure::/subscriptions/a1b2c3d4/.../subnets/default",
"target": "azure::/subscriptions/a1b2c3d4/.../virtualNetworks/hub-vnet",
"type": "contains",
"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::compute-rg"
]
},
{
"id": "azure::resourcegroup::network-rg",
"type": "logical.resourcegroup",
"name": "network-rg",
"members": [
"azure::/subscriptions/a1b2c3d4/.../virtualNetworks/hub-vnet"
]
}
]
}
}