Producer OSIRIS JSON per Microsoft Azure
Il producer OSIRIS JSON per Azure si connette a Microsoft Azure tramite Azure CLI (az) e genera snapshot OSIRIS JSON della topologia delle tue sottoscrizioni: reti virtuali, subnet, NIC, NSG, bilanciatori di carico, firewall, VM e altro.
Per iniziare a usare OSIRIS JSON per Microsoft Azure, installa il core dispatcher e il producer Azure:
go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-azure@latest
Il core dispatcher ti consente di eseguire osirisjson-producer azure .... Senza di esso, invoca direttamente il binario del vendor come osirisjson-producer-azure ....
Assicurati che $GOPATH/bin (o $HOME/go/bin) sia nel tuo PATH. Consulta la pagina Introduzione per altre opzioni di installazione.
Prerequisiti
- Installa Azure CLI
- Autenticati:
az login - L’utente autenticato deve avere un permesso di lettura su una o più sottoscrizioni di destinazione; puoi eseguire il producer sulla tua macchina locale oppure decidere di invocarlo tramite un job pianificato usando un account di servizio con il software o la piattaforma che preferisci.
Utilizzo della CLI
osirisjson-producer azure [flags]
osirisjson-producer azure template --generate
Modalità singola
Inizia raccogliendo una sottoscrizione che verrà salvata automaticamente come microsoft-azure-<timestamp>-<name>.json:
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890
Modalità interattiva
Esegui senza flag per ottenere un selettore interattivo delle sottoscrizioni:
osirisjson-producer azure
Il producer rileva tutte le sottoscrizioni accessibili e presenta un elenco numerato. Selezionane una o più (separate da virgole) oppure digita all.
Modalità multi-sottoscrizione
Raccogli più sottoscrizioni in una directory di output:
# 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
Modalità batch (CSV)
Genera un template CSV:
osirisjson-producer azure template --generate
Raccogli da un file CSV:
osirisjson-producer azure -s subscriptions.csv -o ./output
Il template CSV usa queste colonne:
| Colonna | Obbligatorio | Descrizione |
|---|---|---|
subscription_id | sì | UUID della sottoscrizione Azure |
subscription_name | sì | Etichetta leggibile (usata come nome del file di output) |
tenant_id | UUID del tenant Azure AD / Entra ID | |
environment | Fase di deployment: dv, np, pr (development, non-production, production) | |
region | Filtra per regione Azure (vuoto = tutte le regioni) | |
notes | Note in testo libero (ignorate dal producer) |
Gerarchia di output
Modalità singola: salva in microsoft-azure-<timestamp>-<name>.json nella directory corrente.
Modalità multi/batch/all: organizzate per tenant e timestamp:
output/
<TenantID>/
<timestamp>/
<SubscriptionName>.json
Ogni sottoscrizione produce un documento OSIRIS autonomo. I riferimenti tra sottoscrizioni (ad esempio, i peering VNet verso sottoscrizioni remote) usano ID risorsa deterministici che i consumer possono correlare tra documenti diversi.
Ambienti multi-tenant
Esegui il producer una volta per tenant. Ogni az login autentica verso un tenant. Usa az login --tenant <tenant-id> per cambiare. La gerarchia di output raggruppa automaticamente i documenti per tenant.
Riferimento dei flag
| Flag | Forma breve | Descrizione |
|---|---|---|
--subscription | -S | ID delle sottoscrizioni Azure, separati da virgole |
--all | Rileva automaticamente tutte le sottoscrizioni accessibili | |
--source | -s | File CSV con gli obiettivi di sottoscrizione |
--output | -o | Directory di output (obbligatoria per la modalità multi/all/CSV) |
--tenant | ID del tenant Azure AD / Entra ID (opzionale) | |
--region | Filtra per una specifica regione Azure (opzionale) | |
--detail | Livello di dettaglio: minimal (predefinito) o detailed | |
--safe-failure-mode | Gestione dei segreti: fail-closed (predefinito), log-and-redact, off | |
--version / -v | Mostra la versione ed esce | |
--help | Mostra l’aiuto ed esce |
Cosa raccoglie
Il producer Azure interroga i seguenti tipi di risorse tramite Azure CLI:
Modalità minimale:
| Tipo di risorsa Azure | Tipo OSIRIS | Descrizione |
|---|---|---|
| Virtual Networks | network.vpc | VNet con spazio di indirizzamento, DNS e peering |
| Subnets | network.subnet | Subnet con prefissi di indirizzi e service endpoint |
| Network Interfaces | network.interface | NIC con configurazioni IP |
| Network Security Groups | network.security.group | NSG con riepiloghi delle regole |
| Route Tables | osiris.azure.routetable | UDR con conteggio delle rotte |
| Public IP Addresses | osiris.azure.publicip | IP pubblici con metodo di allocazione |
| Load Balancers | network.loadbalancer | Bilanciatori di carico L4 |
| Application Gateways | network.loadbalancer | Bilanciatori di carico L7 (application gateway) |
| Private Endpoints | osiris.azure.privateendpoint | Endpoint private link |
| VNet Gateways | osiris.azure.gateway.vnet | Gateway ExpressRoute / VPN |
| NAT Gateways | osiris.azure.gateway.nat | Gateway NAT in uscita |
| Azure Firewalls | network.firewall | Istanze di Azure Firewall |
| DNS Zones | osiris.azure.dns.zone | Zone DNS pubbliche |
| Private DNS Zones | osiris.azure.dns.privatezone | Zone DNS private con link VNet |
| ExpressRoute Circuits | osiris.azure.expressroute | Circuiti ExpressRoute |
| Virtual Machines | compute.vm | VM con dimensione e stato di alimentazione |
| Resource Groups | container.resourcegroup | Gruppi di risorse come risorse contenitore |
La modalità dettagliata aggiunge dettagli delle rotte delle route table, regole dei bilanciatori di carico e proprietà estese.
Struttura di output OSIRIS JSON per 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": [ ... ]
}
}
Tipi di risorsa
I tipi di risorsa seguono la specifica OSIRIS JSON v1.0. I tipi standard vengono usati dove definiti; i tipi specifici di Azure usano il namespace osiris.azure.*.
Tipi standard:
container.resourcegroup- Gruppi di risorsenetwork.vpc- Reti virtualinetwork.subnet- Subnetnetwork.interface- Interfacce di retenetwork.security.group- Gruppi di sicurezza di retenetwork.loadbalancer- Bilanciatori di carico (L4 e L7)network.firewall- Azure Firewallcompute.vm- Macchine virtuali
Tipi personalizzati (osiris.azure.*):
osiris.azure.routetable- Route tableosiris.azure.publicip- Indirizzi IP pubbliciosiris.azure.privateendpoint- Endpoint privatiosiris.azure.gateway.vnet- Gateway VNet (VPN/ExpressRoute)osiris.azure.gateway.nat- Gateway NATosiris.azure.dns.zone- Zone DNSosiris.azure.dns.privatezone- Zone DNS privateosiris.azure.expressroute- Circuiti ExpressRoute
Tipi di connessione
network- Connettività di rete (peering VNet, NIC-to-subnet, associazioni NSG, link DNS, connessioni gateway)contains- Contenimento (appartenenza della subnet alla VNet)
Tipi di gruppi
logical.subscription- Gruppo di sottoscrizione di primo livellological.resourcegroup- Gruppi di resource group (figli della sottoscrizione)
Metadati del provider
Ogni risorsa include provider.type con il tipo di risorsa ARM nativo (ad esempio Microsoft.Network/virtualNetworks, Microsoft.Compute/virtualMachines). Gli stub di peering cross-subscription includono provider.subscription con l’ID della sottoscrizione remota.
ID risorsa
Gli ID risorsa di Azure seguono il pattern azure::<ARM-resource-id>, usando l’ID completo della risorsa ARM come identificatore nativo. Questo garantisce ID deterministici e globalmente univoci.
Esempi
Sottoscrizione singola
Esploreremo una singola sottoscrizione nel nostro tenant e genereremo da Microsoft Azure un documento OSIRIS JSON.
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890
Documento di output OSIRIS JSON (ridotto):
{
"$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"
]
}
]
}
}