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 empezar 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 de destino; puede ejecutar el productor en su máquina local o decidir invocarlo mediante un trabajo programado usando una cuenta de servicio con su software o plataforma favorita.
Uso de la CLI
osirisjson-producer azure [flags]
osirisjson-producer azure template --generate
Modo único
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 a partir de 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 por 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 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/lotes/all: organizados por tenant y marca temporal:
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 recurso deterministas que los consumidores pueden correlacionar entre documentos.
Entornos multitenant
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 | Gestión 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 recuento 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 única
Vamos a explorar una única suscripción de 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"
]
}
]
}
}