Productor OSIRIS JSON para Microsoft Azure
El productor OSIRIS JSON para Azure se conecta a Microsoft Azure mediante Azure CLI (az) y genera snapshots OSIRIS JSON de la topología de tu suscripción. A partir de v0.5.0, el productor cubre redes, computación, almacenamiento, identidad, bases de datos, contenedores, integración, observabilidad, backup, automatización y niveles de grupos de administración, incluidas sus aristas de dependencia entre recursos (Private Endpoint hacia destinos PaaS, App Service hacia App Insights, Log Analytics, RSV, Backup Vault hacia elementos protegidos, AKS hacia subredes y pools de nodos, etc.).
Para empezar a usar OSIRIS JSON para Microsoft Azure, instala el dispatcher principal y el productor OSIRIS JSON para Microsoft Azure:
go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-azure@latest
El dispatcher principal permite ejecutar osirisjson-producer azure .... Sin él, invoca directamente el binario del proveedor como osirisjson-producer-azure ....
Asegúrate de que $GOPATH/bin (o $HOME/go/bin) esté en tu PATH. Consulta la página getting started para ver más opciones de instalación.
Requisitos previos
- Instala Azure CLI
- Autentícate:
az login - El usuario autenticado debe tener el rol Reader (o permiso de lectura equivalente) en las suscripciones de destino. Para la recopilación completa de datos, incluidas las rutas efectivas, el usuario también necesita el permiso
Microsoft.Network/networkInterfaces/effectiveRouteTable/action(incluido en Network Contributor y superiores). Si este permiso no está presente, el productor omite la recopilación de rutas efectivas con un log INFO y continúa normalmente.
Puedes ejecutar el productor en tu máquina local o invocarlo mediante un job programado con una cuenta de servicio en tu plataforma preferida.
Uso de la CLI
osirisjson-producer azure [flags]
osirisjson-producer azure template --generate
Modo único
Empieza recopilando una suscripción que se guardará automáticamente como microsoft-azure-<timestamp>-<name>.json:
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890
Modo interactivo
Ejecuta sin flags para obtener un selector interactivo de suscripciones:
osirisjson-producer azure
El productor descubre todas las suscripciones accesibles y presenta una lista numerada. Selecciona usando números individuales (1,3,5), rangos (30-55), combinaciones (1,3,30-55) o escribe all.
Modo multisuscripción
Recopila varias suscripciones en un directorio de salida:
# 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
Modo batch (CSV)
Genera una plantilla CSV:
osirisjson-producer azure template --generate
Recopila desde un archivo CSV:
osirisjson-producer azure -s subscriptions.csv -o ./output
La plantilla CSV usa estas columnas:
| Columna | Obligatorio | Descripción |
|---|---|---|
subscription_id | sí | UUID de la suscripción Azure |
subscription_name | sí | Etiqueta legible por humanos (usada como nombre del archivo de salida) |
tenant_id | UUID del tenant Azure AD / Entra ID | |
environment | Fase de despliegue: dv, np, pr (desarrollo, no producción, producción) | |
region | Filtra por región Azure (vacío = todas las regiones) | |
notes | Notas de texto libre (ignoradas por el productor) |
Jerarquía de salida
Modo único: guarda en microsoft-azure-<timestamp>-<name>.json en el directorio actual.
Modos multi/batch/all: organizados por tenant y timestamp:
output/
<TenantID>/
<timestamp>/
<SubscriptionName>.json
Cada suscripción produce un documento OSIRIS autocontenido. Las referencias entre suscripciones (por ejemplo, peerings de VNet o conexiones ExpressRoute hacia suscripciones remotas) se emiten como recursos stub con provider.subscription establecido en el ID de la suscripción remota, de modo que la arista de topología sobreviva al límite mientras el documento sigue siendo válido.
Entornos multi-tenant
Ejecuta el productor una vez por tenant. Cada az login autentica en un tenant. Usa az login --tenant <tenant-id> para cambiar. La jerarquía de salida agrupa documentos por tenant automáticamente.
Referencia de flags
| Flag | Corta | Descripción |
|---|---|---|
--subscription | -S | ID de suscripción Azure, separados por comas |
--all | Descubre automáticamente todas las suscripciones accesibles | |
--source | -s | Archivo CSV con las suscripciones de destino |
--output | -o | Directorio de salida (obligatorio para modo multi/all/CSV) |
--tenant | ID del tenant Azure AD / Entra ID (opcional) | |
--region | Filtra por una región Azure específica (opcional) | |
--purpose | Grado de detalle de la salida: documentation (predeterminado) o audit. Consulta Propósito abajo | |
--safe-failure-mode | Tratamiento de secretos: fail-closed (predeterminado), log-and-redact, off | |
--version / -v | Muestra la versión y sale | |
--help | Muestra la ayuda y sale |
Propósito
La flag --purpose implementa el capítulo 13.1.3 de la especificación OSIRIS JSON (minimización de datos). La recopilación siempre es exhaustiva; la emisión se ajusta al propósito declarado para que la misma ejecución del productor pueda servir tanto a casos de uso de visualización ligera como a casos de uso de auditoría / cumplimiento.
| Valor | Comportamiento |
|---|---|
documentation (predeterminado) | Campos mínimos: identidad, tipo, trazabilidad del provider, nombres, tags y relaciones de alto nivel. Los mapas properties y extensions por recurso se eliminan. Adecuado para diagramas, dashboards de inventario y documentación de alto nivel. |
audit | Todos los campos legibles, después de redactar los campos sensibles. Mapas properties y extensions completos para cada recurso, conexión y grupo. Adecuado para revisiones de cumplimiento, auditorías, deriva de configuración o documentación profunda y diseño preciso de topología. |
El valor seleccionado se registra en el documento bajo metadata.scope.purpose, para que los consumidores puedan identificar qué grado de detalle están leyendo.
[!IMPORTANT] Los secretos siempre se redactan independientemente del propósito. La proyección de auditoría añade detalles (direcciones IP, reglas NSG, subcampos SKU, detalles BGP, etc.); nunca añade material de autenticación. Las contraseñas de administrador de base de datos, las claves de acceso de Cosmos / Redis / Service Bus / Event Hubs, las claves de instrumentación de App Insights y las claves compartidas de Log Analytics nunca se recopilan.
# Default: documentation (minimal projection)
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890
# Audit: full ARM fidelity
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890 --purpose audit
Qué recopila el productor OSIRIS JSON para Microsoft Azure
El productor OSIRIS JSON para Microsoft Azure recopila en cada ejecución un inventario completo de los tipos de recurso compatibles mediante Azure CLI. Las tablas siguientes agrupan lo que se consulta.
Red
| Recurso Microsoft Azure | Tipo OSIRIS JSON |
|---|---|
| Virtual Networks | network.vpc |
| Subnets | network.subnet |
| Network Interfaces | network.interface |
| Network Security Groups | network.security.group |
| Application Security Groups | osiris.azure.asg |
| Route Tables | osiris.azure.routetable |
| Public IP Addresses | osiris.azure.publicip |
| Public IP Prefixes | osiris.azure.publicipprefix |
| Load Balancers (L4) | network.loadbalancer |
| Application Gateways (L7) | osiris.azure.applicationgateway |
| Azure Firewalls | network.firewall |
| NAT Gateways | osiris.azure.gateway.nat |
| VNet Gateways (VPN / ExpressRoute) | osiris.azure.gateway.vnet |
| Route Servers | osiris.azure.routeserver |
| ExpressRoute Circuits | osiris.azure.expressroute |
| VPN Gateway Connections | osiris.azure.vpnconnection |
| Private Endpoints | osiris.azure.privateendpoint |
| DNS Zones | osiris.azure.dns.zone |
| Private DNS Zones | osiris.azure.dns.privatezone |
| DNS Private Resolvers | osiris.azure.dns.resolver |
| DNS Forwarding Rulesets | osiris.azure.dns.forwardingruleset |
| Azure Bastion | osiris.azure.bastion |
| Traffic Manager Profiles | osiris.azure.trafficmanager |
| Availability Sets | osiris.azure.availabilityset |
Computación
| Recurso Microsoft Azure | Tipo OSIRIS JSON |
|---|---|
| Virtual Machines | compute.vm |
| VM Scale Sets | osiris.azure.vmss |
| Managed Disks | osiris.azure.disk |
| Managed Snapshots | osiris.azure.snapshot |
| Azure Arc Machines | osiris.azure.arc.machine |
Almacenamiento
| Recurso Microsoft Azure | Tipo OSIRIS JSON |
|---|---|
| Storage Accounts | osiris.azure.storage |
App Service / capa web
| Recurso Microsoft Azure | Tipo OSIRIS JSON |
|---|---|
| App Service Plan | osiris.azure.appserviceplan |
| Web App | osiris.azure.webapp |
| Web App Deployment Slot | osiris.azure.webapp.slot |
| Function App | osiris.azure.functionapp |
Enrutamiento de App Service: los sitios cuyo kind contiene functionapp se emiten como osiris.azure.functionapp; todos los demás sitios se emiten como osiris.azure.webapp.
Identidad y seguridad
| Recurso Microsoft Azure | Tipo OSIRIS JSON |
|---|---|
| Key Vault | osiris.azure.keyvault |
| Container Registry | osiris.azure.containerregistry |
| User-Assigned Managed Identity | osiris.azure.managedidentity |
Backup y recuperación ante desastres
| Recurso Microsoft Azure | Tipo OSIRIS JSON |
|---|---|
| Recovery Services Vault | osiris.azure.recoveryservicesvault |
| Backup Vault (Azure Backup) | osiris.azure.backupvault |
Bases de datos
| Recurso Microsoft Azure | Tipo OSIRIS JSON |
|---|---|
| SQL Server | osiris.azure.sqlserver |
| SQL Database | osiris.azure.sqldatabase |
| SQL Elastic Pool | osiris.azure.sql.elasticpool |
| SQL Managed Instance | osiris.azure.sqlmi |
| SQL MI Database | osiris.azure.sqlmidatabase |
| SQL Virtual Machine | osiris.azure.sqlvm |
| PostgreSQL Flexible Server | osiris.azure.postgresqlserver |
| MySQL Flexible Server | osiris.azure.mysqlserver |
| Cosmos DB account | osiris.azure.cosmosaccount |
| Redis Cache | osiris.azure.redis |
Contenedores
| Recurso Microsoft Azure | Tipo OSIRIS JSON |
|---|---|
| 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 |
Integración y mensajería
| Recurso Microsoft Azure | Tipo OSIRIS JSON |
|---|---|
| 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 |
| Stream Analytics | osiris.azure.streamanalytics |
| Event Grid System Topic | osiris.azure.eventgrid.systemtopic |
Automatización y workflows
| Recurso Microsoft Azure | Tipo OSIRIS JSON |
|---|---|
| Logic Workflow | osiris.azure.logic.workflow |
| Logic API Connection | osiris.azure.logic.apiconnection |
| Data Factory | osiris.azure.datafactory |
| Synapse Workspace | osiris.azure.synapse.workspace |
| Automation Account | osiris.azure.automation.account |
| Communication Service | osiris.azure.communicationservice |
| Email Communication Service | osiris.azure.emailservice |
| Email Communication Domain | osiris.azure.emailservice.domain |
Observabilidad
| Recurso Microsoft Azure | Tipo OSIRIS JSON | Nota |
|---|---|---|
| Application Insights | osiris.azure.applicationinsights | |
| Log Analytics Workspace | osiris.azure.loganalytics | |
| Data Collection Rule | osiris.azure.monitor.datacollectionrule | |
| Data Collection Endpoint | osiris.azure.monitor.datacollectionendpoint | |
| Autoscale Setting | osiris.azure.monitor.autoscale | |
| Metric Alert | osiris.azure.monitor.metricalert | solo --purpose audit |
| Action Group | osiris.azure.monitor.actiongroup | solo --purpose audit |
Los recursos Metric Alert y Action Group están restringidos a --purpose audit porque son construcciones de política de observabilidad, no recursos de topología; con el propósito predeterminado documentation no se emiten.
Contención
| Recurso Microsoft Azure | Tipo OSIRIS JSON |
|---|---|
| Grupos de recursos | container.resourcegroup |
Qué no se recopila intencionadamente
OSIRIS JSON define un formato JSON neutral respecto al proveedor para describir recursos de infraestructura, sus propiedades y sus relaciones topológicas - no es un formato Infrastructure-as-Code ni similar. Puedes leer más aquí: Qué es OSIRIS JSON. Lo siguiente está intencionadamente fuera de alcance:
- Políticas de backup / retención bajo Recovery Services Vault y Backup Vault (se emiten los vaults y las aristas hacia elementos protegidos; los cuerpos de las políticas no).
- Política de capa de base de datos: auditoría SQL, detección de amenazas, TDE, reglas de firewall, security-alert-policy.
- Políticas, productos, operaciones y valores con nombre de API Management.
- Rutas, rule sets, endpoints y asociaciones de políticas WAF de Front Door (se emite el perfil; el enrutamiento no).
- Secretos de Container App y variables de entorno de ACI.
- Enumeración de diagnostic settings por recurso (añadiría una llamada
azpor recurso). - Azure Front Door clásico (
Microsoft.Network/frontDoors, en desuso). Microsoft.DBforPostgreSQL/serversheredado (single server, fin de vida en la roadmap de Azure).
Estructura de salida OSIRIS JSON para Microsoft Azure
{
"$schema": "https://osirisjson.org/schema/v1.0/osiris.schema.json",
"version": "1.0.0",
"metadata": {
"generator": {
"name": "osirisjson-producer-azure",
"version": "0.5.0",
"url": "https://osirisjson.org/en/docs/producers/hyperscalers/microsoft-azure"
},
"scope": {
"name": "<subscription-id> - <subscription-name>",
"purpose": "documentation",
"providers": ["azure"],
"accounts": ["<tenant-id>"],
"subscriptions": ["<subscription-id>"],
"regions": ["westeurope", "eastus2"]
}
},
"topology": {
"resources": [ ... ],
"connections": [ ... ],
"groups": [ ... ]
}
}
Tipos de conexión
Las aristas de conexión usan subtipos estándar de OSIRIS JSON v1.0 según el capítulo 5.2.3 de la especificación, para que los consumidores puedan distinguir las capas de topología.
| Tipo de conexión OSIRIS JSON | Usado para |
|---|---|
contains | Contención (Subnet dentro de VNet, App Service Plan dentro de site, AKS Cluster dentro de node pool, RG dentro de Subscription, SQL Server dentro de SQL Database, SQL MI dentro de SQL MI Database, Disk de origen dentro de Snapshot, VM dentro de Disk adjunto) |
network | Conectividad de red genérica (NIC hacia subnet, asociaciones NSG, enlaces DNS, conexiones de gateway, App Insights hacia workspace, Web App hacia App Insights, AKS / Redis / ACI hacia subnet, APIM hacia subnet) |
network.peering | Peerings de VNet |
network.vpn | Conexiones de gateway VPN |
network.bgp | Conexiones de circuito ExpressRoute |
dependency | Private Endpoint hacia destino PaaS (Web App, Function App, Key Vault, Container Registry, Recovery Services Vault, clúster AKS, Service Bus, Event Hubs, APIM) |
dependency.storage | Private Endpoint hacia Storage Account |
dependency.database | Private Endpoint hacia base de datos (SQL Server, Cosmos DB, Redis) |
Tipos de grupo
| Tipo de grupo OSIRIS JSON | Usado para |
|---|---|
logical.subscription | Grupo de suscripción de nivel superior. Con --purpose audit obtiene extensions.osiris.azure.management_group_path (array JSON de nombres para mostrar, de raíz a hoja). |
logical.resourcegroup | Grupos de resource group (hijos de la suscripción) |
logical.managementgroup | Un grupo por cada management group en la cadena de ancestros del tenant (desde la raíz hasta el padre de la suscripción). Cada grupo lista sus suscripciones hijas directas y management groups hijos como children. |
container.region | Un grupo por cada provider.region distinto observado en la suscripción, incluyendo como miembros todos los recursos de esa región. La región global y los recursos sin región se omiten. El token de límite es <subscription-id>/<region>, por lo que los grupos nunca colisionan entre suscripciones. |
Tipos de recurso
Los tipos de recurso siguen la especificación OSIRIS JSON v1.0. Se usan tipos estándar donde están definidos; los tipos específicos de Azure usan el namespace osiris.azure.*.
Tipos estándar:
container.resourcegroup- Grupos de recursosnetwork.vpc- Redes virtualesnetwork.subnet- Subredesnetwork.interface- Interfaces de rednetwork.security.group- Network security groupsnetwork.loadbalancer- Load balancers (solo L4; Application Gateways usaosiris.azure.applicationgateway)network.firewall- Azure Firewallscompute.vm- Máquinas virtuales
Extensiones (osiris.azure)
Los datos específicos de Azure que no se asignan a propiedades portables de OSIRIS JSON se emiten bajo el namespace de extensión osiris.azure. Esto sigue la especificación OSIRIS JSON: properties contiene datos comunes / portables, extensions contiene datos detallados específicos del proveedor. Las extensiones solo se emiten con --purpose audit.
Las extensiones representativas incluyen:
| Tipo de recurso OSIRIS JSON | Campos de extensión seleccionados |
|---|---|
network.interface | enable_accelerated_networking, effective_routes[] |
network.security.group | default_security_rules[] |
osiris.azure.expressroute | sku, sku_tier, service_provider, peerings[] (tipo de peering BGP, estado, ASN del peer, ID de VLAN, prefijos de dirección) |
osiris.azure.webapp / osiris.azure.functionapp | managed_identity, outbound_vnet_routing, private_endpoint_connection_ids[], app_insights_id |
osiris.azure.storage / osiris.azure.keyvault / osiris.azure.containerregistry / osiris.azure.recoveryservicesvault / osiris.azure.sqlserver / osiris.azure.cosmosaccount | private_endpoint_connection_ids[] |
osiris.azure.applicationinsights | workspace_resource_id (workspace Log Analytics vinculado) |
osiris.azure.loganalytics | customer_id (UUID del workspace usado por KQL; no es un secreto) |
logical.subscription | osiris.azure.management_group_path (array de nombres para mostrar de MG, de raíz a hoja; solo auditoría) |
[!NOTE]
network.security.groupsecurity_rules[](reglas definidas por el usuario) se emiten enproperties, no enextensions, porque son una señal primaria de topología. Solodefault_security_rules[](reglas baseline administradas por Azure) van aextensions.
network.interfaceprivate_iptambién se emite enpropertiespor el mismo motivo.
Metadatos del provider
Cada recurso incluye provider.type con el tipo de recurso ARM nativo (por ejemplo, Microsoft.Network/virtualNetworks, Microsoft.Compute/virtualMachines). Los stubs entre suscripciones incluyen provider.subscription con el ID de la suscripción remota. Todos los recursos incluyen provider.source establecido en azure-cli.
IDs de recurso
Los IDs de recurso de Azure siguen el patrón azure::<ARM-resource-id>, usando el ID de recurso ARM completo como identificador nativo. Esto garantiza IDs globalmente únicos y deterministas que sobreviven a la correlación entre suscripciones.
Canonicalización de regiones
provider.region y metadata.scope.regions se canonicalizan a la forma slug de Azure (minúsculas, sin espacios). La CLI az devuelve location de forma inconsistente entre tipos de recurso: la mayoría de los recursos ARM usan westeurope / eastus2, mientras que App Service Plans y Web Apps exponen la forma de visualización (West Europe). El productor normaliza al slug para que una suscripción de una sola región no aparezca como dos regiones en metadata.scope.regions.
Requisitos de RBAC
| Nivel de permiso | Qué se recopila |
|---|---|
| Reader | Todos los tipos de recurso, propiedades, extensiones (reglas NSG, peerings ER, conexiones de gateway, peerings VNet, enlaces DNS, aristas de Private Endpoint hacia destino, App Service hacia App Insights, AKS, recursos de contenedor, base de datos, mensajería y observabilidad) |
Reader + effectiveRouteTable/action | Todo lo anterior + rutas efectivas de NIC |
| Network Contributor / Owner | Dataset completo sin restricciones |
El productor prueba el permiso en la primera NIC y omite de forma controlada la recopilación de rutas efectivas si el permiso se deniega. Todos los demás datos se recopilan igualmente.
Ejemplos
Suscripción única
Vamos a explorar una única suscripción en nuestro tenant y generar desde Microsoft Azure un documento OSIRIS JSON.
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890 --purpose audit
Documento de salida OSIRIS JSON (recortado, --purpose audit):
{
"$schema": "https://osirisjson.org/schema/v1.0/osiris.schema.json",
"version": "1.0.0",
"metadata": {
"generator": {
"name": "osirisjson-producer-azure",
"version": "0.5.0",
"url": "https://osirisjson.org/en/docs/producers/hyperscalers/microsoft-azure"
},
"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.storage",
"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"
],
"extensions": {
"osiris.azure": {
"management_group_path": ["Tenant Root Group", "Corp", "NonProd"]
}
}
},
{
"id": "azure::managementgroup::NonProd",
"type": "logical.managementgroup",
"name": "NonProd",
"children": [
"azure::subscription::a1b2c3d4-e5f6-7890-abcd-ef1234567890"
]
},
{
"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"
]
}
]
}
}
La misma ejecución con el valor predeterminado --purpose documentation devuelve el grafo de recursos idéntico, pero con los mapas properties y extensions eliminados de cada recurso, conexión y grupo, por lo que resulta adecuado para vistas de topología de alto nivel y documentación.