person Tia Zanella
calendar_add_on Created April 5, 2026
update Updated April 5, 2026
Share
download Download MD

Producer OSIRIS JSON para Microsoft Azure

O producer OSIRIS JSON para Azure se conecta ao Microsoft Azure via Azure CLI (az) e gera snapshots OSIRIS JSON da topologia das suas assinaturas: redes virtuais, sub-redes, NICs, NSGs, load balancers, firewalls, VMs e muito mais.

Para começar a usar o OSIRIS JSON para Microsoft Azure, instale o core dispatcher e o producer do Azure:

go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-azure@latest

O core dispatcher permite executar osirisjson-producer azure .... Sem ele, invoque diretamente o binário do fornecedor como osirisjson-producer-azure ....

Certifique-se de que $GOPATH/bin (ou $HOME/go/bin) esteja no seu PATH. Consulte a página Primeiros passos para ver mais opções de instalação.

Pré-requisitos

  1. Instale a Azure CLI
  2. Autentique-se: az login
  3. O usuário autenticado deve ter permissão de leitura em uma ou mais assinaturas de destino; você pode executar o producer na sua máquina local ou optar por invocá-lo usando uma tarefa agendada com uma conta de serviço no software ou na plataforma de sua preferência.

Uso da CLI

osirisjson-producer azure [flags]
osirisjson-producer azure template --generate

Modo único

Comece coletando uma assinatura que será salva automaticamente como microsoft-azure-<timestamp>-<name>.json:

osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890

Modo interativo

Execute sem flags para obter um seletor interativo de assinaturas:

osirisjson-producer azure

O producer descobre todas as assinaturas acessíveis e apresenta uma lista numerada. Selecione uma ou mais (separadas por vírgula) ou digite all.

Modo de múltiplas assinaturas

Colete várias assinaturas em um diretório de saída:

# 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 em lote (CSV)

Gere um modelo CSV:

osirisjson-producer azure template --generate

Colete a partir de um arquivo CSV:

osirisjson-producer azure -s subscriptions.csv -o ./output

O modelo CSV usa estas colunas:

ColunaObrigatórioDescrição
subscription_idsimUUID da assinatura do Azure
subscription_namesimRótulo legível por humanos (usado como nome do arquivo de saída)
tenant_idUUID do tenant do Azure AD / Entra ID
environmentEstágio de implantação: dv, np, pr (desenvolvimento, não produção, produção)
regionFiltrar por região do Azure (vazio = todas as regiões)
notesNotas em texto livre (ignoradas pelo producer)

Hierarquia de saída

Modo único: salva em microsoft-azure-<timestamp>-<name>.json no diretório atual.

Modos multi/lote/all: organizados por tenant e timestamp:

output/
  <TenantID>/
    <timestamp>/
      <SubscriptionName>.json

Cada assinatura produz um documento OSIRIS autocontido. As referências entre assinaturas (por exemplo, peerings de VNet para assinaturas remotas) usam IDs de recurso determinísticos que os consumidores podem correlacionar entre documentos.

Ambientes multi-tenant

Execute o producer uma vez por tenant. Cada az login autentica em um tenant. Use az login --tenant <tenant-id> para alternar. A hierarquia de saída agrupa os documentos por tenant automaticamente.

Referência de flags

FlagCurtoDescrição
--subscription-SIDs de assinatura do Azure, separados por vírgula
--allDescobrir automaticamente todas as assinaturas acessíveis
--source-sArquivo CSV com os alvos de assinatura
--output-oDiretório de saída (obrigatório para o modo multi/all/CSV)
--tenantID do tenant do Azure AD / Entra ID (opcional)
--regionFiltrar por uma região específica do Azure (opcional)
--detailNível de detalhe: minimal (padrão) ou detailed
--safe-failure-modeTratamento de segredos: fail-closed (padrão), log-and-redact, off
--version / -vExibir a versão e sair
--helpExibir a ajuda e sair

O que ele coleta

O producer do Azure consulta os seguintes tipos de recursos via Azure CLI:

Modo minimal:

Tipo de recurso do AzureTipo OSIRISDescrição
Virtual Networksnetwork.vpcVNets com espaço de endereçamento, DNS e peerings
Subnetsnetwork.subnetSub-redes com prefixos de endereços e service endpoints
Network Interfacesnetwork.interfaceNICs com configurações de IP
Network Security Groupsnetwork.security.groupNSGs com resumos de regras
Route Tablesosiris.azure.routetableUDRs com contagem de rotas
Public IP Addressesosiris.azure.publicipIPs públicos com método de alocação
Load Balancersnetwork.loadbalancerLoad balancers L4
Application Gatewaysnetwork.loadbalancerLoad balancers L7 (application gateways)
Private Endpointsosiris.azure.privateendpointEndpoints de private link
VNet Gatewaysosiris.azure.gateway.vnetGateways de ExpressRoute / VPN
NAT Gatewaysosiris.azure.gateway.natGateways NAT de saída
Azure Firewallsnetwork.firewallInstâncias do Azure Firewall
DNS Zonesosiris.azure.dns.zoneZonas DNS públicas
Private DNS Zonesosiris.azure.dns.privatezoneZonas DNS privadas com links de VNet
ExpressRoute Circuitsosiris.azure.expressrouteCircuitos ExpressRoute
Virtual Machinescompute.vmVMs com tamanho e estado de energia
Resource Groupscontainer.resourcegroupGrupos de recursos como recursos contêiner

O modo detalhado adiciona detalhes de rotas de tabelas de rotas, regras de load balancer e propriedades estendidas.

Estrutura de saída do 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 recurso

Os tipos de recurso seguem a especificação OSIRIS JSON v1.0. Os tipos padrão são usados onde estiverem definidos; os tipos específicos do Azure usam o namespace osiris.azure.*.

Tipos padrão:

  • container.resourcegroup - Grupos de recursos
  • network.vpc - Redes virtuais
  • network.subnet - Sub-redes
  • network.interface - Interfaces de rede
  • network.security.group - Grupos de segurança de rede
  • network.loadbalancer - Load balancers (L4 e L7)
  • network.firewall - Azure Firewalls
  • compute.vm - Máquinas virtuais

Tipos personalizados (osiris.azure.*):

  • osiris.azure.routetable - Tabelas de rotas
  • osiris.azure.publicip - Endereços IP públicos
  • osiris.azure.privateendpoint - Endpoints privados
  • osiris.azure.gateway.vnet - Gateways de VNet (VPN/ExpressRoute)
  • osiris.azure.gateway.nat - Gateways NAT
  • osiris.azure.dns.zone - Zonas DNS
  • osiris.azure.dns.privatezone - Zonas DNS privadas
  • osiris.azure.expressroute - Circuitos ExpressRoute

Tipos de conexão

  • network - Conectividade de rede (peerings de VNet, NIC-to-subnet, associações de NSG, links DNS, conexões de gateway)
  • contains - Contenção (pertencimento da sub-rede à VNet)

Tipos de grupos

  • logical.subscription - Grupo de assinatura de nível superior
  • logical.resourcegroup - Grupos de resource group (filhos da assinatura)

Metadados do provedor

Cada recurso inclui provider.type com o tipo de recurso ARM nativo (por exemplo, Microsoft.Network/virtualNetworks, Microsoft.Compute/virtualMachines). Stubs de peering entre assinaturas incluem provider.subscription com o ID da assinatura remota.

IDs de recurso

Os IDs de recurso do Azure seguem o padrão azure::<ARM-resource-id>, usando o ID completo do recurso ARM como identificador nativo. Isso garante IDs determinísticos e globalmente únicos.

Exemplos

Assinatura única

Vamos explorar uma única assinatura em nosso tenant e gerar a partir do Microsoft Azure um documento OSIRIS JSON.

osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890

Documento de saída OSIRIS JSON (resumido):

{
  "$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"
        ]
      }
    ]
  }
}
edit_note

Help improve this page

Found an issue or want to contribute? Open an issue.