Productor OSIRIS JSON para Microsoft Azure
El productor OSIRIS JSON para Azure se conecta a Microsoft Azure mediante Azure CLI (az) y genera instantáneas OSIRIS JSON de la topología de sus suscripciones: redes virtuales, subredes, NIC, NSG, balanceadores de carga, firewalls, VM y más.
Para comenzar a usar OSIRIS JSON para Microsoft Azure, instale el despachador principal y el productor de Azure:
go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-azure@latest
El despachador principal le permite ejecutar osirisjson-producer azure .... Sin él, invoque directamente el binario del proveedor como osirisjson-producer-azure ....
Asegúrese de que $GOPATH/bin (o $HOME/go/bin) esté en su PATH. Consulte la página primeros pasos para ver más opciones de instalación.
Requisitos previos
- Instale Azure CLI
- Autentíquese:
az login - El usuario autenticado debe tener permiso de lectura sobre una o varias suscripciones objetivo; puede ejecutar el productor en su máquina local o decidir invocarlo mediante un trabajo programado usando una cuenta de servicio con el software o la plataforma de su preferencia.
Uso de la CLI
osirisjson-producer azure [flags]
osirisjson-producer azure template --generate
Modo individual
Comience 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
Ejecute sin flags para obtener un selector interactivo de suscripciones:
osirisjson-producer azure
El productor detecta todas las suscripciones accesibles y presenta una lista numerada. Seleccione una o varias (separadas por comas) o escriba all.
Modo multi-suscripción
Recopile 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 por lotes (CSV)
Genere una plantilla CSV:
osirisjson-producer azure template --generate
Recopile 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 de Azure |
subscription_name | sí | Etiqueta legible para humanos (usada como nombre del archivo de salida) |
tenant_id | UUID del tenant de Azure AD / Entra ID | |
environment | Etapa de despliegue: dv, np, pr (desarrollo, no producción, producción) | |
region | Filtrar por región de Azure (vacío = todas las regiones) | |
notes | Notas en texto libre (ignoradas por el productor) |
Jerarquía de salida
Modo individual: guarda en microsoft-azure-<timestamp>-<name>.json en el directorio actual.
Modos multi/lotes/all: organizados por tenant y marca de tiempo:
output/
<TenantID>/
<timestamp>/
<SubscriptionName>.json
Cada suscripción produce un documento OSIRIS autocontenido. Las referencias entre suscripciones (por ejemplo, peerings de VNet a suscripciones remotas) usan identificadores de recursos deterministas que los consumidores pueden correlacionar entre documentos.
Entornos multi-tenant
Ejecute el productor una vez por tenant. Cada az login autentica en un tenant. Use az login --tenant <tenant-id> para cambiar. La jerarquía de salida agrupa automáticamente los documentos por tenant.
Referencia de flags
| Flag | Corto | Descripción |
|---|---|---|
--subscription | -S | ID de suscripción de Azure, separadas por comas |
--all | Detectar automáticamente todas las suscripciones accesibles | |
--source | -s | Archivo CSV con los objetivos de suscripción |
--output | -o | Directorio de salida (obligatorio para modo multi/all/CSV) |
--tenant | ID del tenant de Azure AD / Entra ID (opcional) | |
--region | Filtrar por una región específica de Azure (opcional) | |
--detail | Nivel de detalle: minimal (predeterminado) o detailed | |
--safe-failure-mode | Manejo de secretos: fail-closed (predeterminado), log-and-redact, off | |
--version / -v | Mostrar la versión y salir | |
--help | Mostrar la ayuda y salir |
Qué recopila
El productor de Azure consulta los siguientes tipos de recursos mediante Azure CLI:
Modo mínimo:
| Tipo de recurso de Azure | Tipo OSIRIS | Descripción |
|---|---|---|
| Virtual Networks | network.vpc | VNet con espacio de direcciones, DNS y peerings |
| Subnets | network.subnet | Subredes con prefijos de direcciones y service endpoints |
| Network Interfaces | network.interface | NIC con configuraciones IP |
| Network Security Groups | network.security.group | NSG con resúmenes de reglas |
| Route Tables | osiris.azure.routetable | UDR con conteo de rutas |
| Public IP Addresses | osiris.azure.publicip | IP públicas con método de asignación |
| Load Balancers | network.loadbalancer | Balanceadores de carga L4 |
| Application Gateways | network.loadbalancer | Balanceadores de carga L7 (application gateways) |
| Private Endpoints | osiris.azure.privateendpoint | Endpoints de private link |
| VNet Gateways | osiris.azure.gateway.vnet | Gateways de ExpressRoute / VPN |
| NAT Gateways | osiris.azure.gateway.nat | Gateways NAT de salida |
| Azure Firewalls | network.firewall | Instancias de Azure Firewall |
| DNS Zones | osiris.azure.dns.zone | Zonas DNS públicas |
| Private DNS Zones | osiris.azure.dns.privatezone | Zonas DNS privadas con enlaces a VNet |
| ExpressRoute Circuits | osiris.azure.expressroute | Circuitos ExpressRoute |
| Virtual Machines | compute.vm | VM con tamaño y estado de energía |
| Resource Groups | container.resourcegroup | Grupos de recursos como recursos contenedores |
El modo detallado agrega detalles de rutas de tablas de enrutamiento, reglas de balanceadores de carga y propiedades extendidas.
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.1.0"
},
"scope": {
"providers": ["azure"],
"accounts": ["<tenant-id>"],
"subscriptions": ["<subscription-id>"],
"regions": ["westeurope", "eastus"]
}
},
"topology": {
"resources": [ ... ],
"connections": [ ... ],
"groups": [ ... ]
}
}
Tipos de recursos
Los tipos de recursos siguen la especificación OSIRIS JSON v1.0. Los tipos estándar se usan donde están definidos; los tipos específicos de Azure usan el espacio de nombres osiris.azure.*.
Tipos estándar:
container.resourcegroup- Grupos de recursosnetwork.vpc- Redes virtualesnetwork.subnet- Subredesnetwork.interface- Interfaces de rednetwork.security.group- Grupos de seguridad de rednetwork.loadbalancer- Balanceadores de carga (L4 y L7)network.firewall- Azure Firewallscompute.vm- Máquinas virtuales
Tipos personalizados (osiris.azure.*):
osiris.azure.routetable- Tablas de rutasosiris.azure.publicip- Direcciones IP públicasosiris.azure.privateendpoint- Endpoints privadososiris.azure.gateway.vnet- Gateways de VNet (VPN/ExpressRoute)osiris.azure.gateway.nat- Gateways NATosiris.azure.dns.zone- Zonas DNSosiris.azure.dns.privatezone- Zonas DNS privadasosiris.azure.expressroute- Circuitos ExpressRoute
Tipos de conexión
network- Conectividad de red (peerings de VNet, NIC a subred, asociaciones de NSG, enlaces DNS, conexiones de gateway)contains- Contención (pertenencia de subred a VNet)
Tipos de grupos
logical.subscription- Grupo de suscripción de nivel superiorlogical.resourcegroup- Grupos de grupos de recursos (hijos de la suscripción)
Metadatos del proveedor
Cada recurso incluye provider.type con el tipo de recurso ARM nativo (por ejemplo, Microsoft.Network/virtualNetworks, Microsoft.Compute/virtualMachines). Los stubs de peering entre suscripciones incluyen provider.subscription con el ID de la suscripción remota.
IDs de recursos
Los IDs de recursos de Azure siguen el patrón azure::<ARM-resource-id>, usando el ID completo del recurso ARM como identificador nativo. Esto garantiza IDs globalmente únicos y deterministas.
Ejemplos
Suscripción individual
Vamos a explorar una sola suscripción en nuestro tenant y generar desde Microsoft Azure un documento OSIRIS JSON.
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890
Documento de salida OSIRIS JSON (recortado):
{
"$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"
]
}
]
}
}