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
- Instale a Azure CLI
- Autentique-se:
az login - 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:
| Coluna | Obrigatório | Descrição |
|---|---|---|
subscription_id | sim | UUID da assinatura do Azure |
subscription_name | sim | Rótulo legível por humanos (usado como nome do arquivo de saída) |
tenant_id | UUID do tenant do Azure AD / Entra ID | |
environment | Estágio de implantação: dv, np, pr (desenvolvimento, não produção, produção) | |
region | Filtrar por região do Azure (vazio = todas as regiões) | |
notes | Notas 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
| Flag | Curto | Descrição |
|---|---|---|
--subscription | -S | IDs de assinatura do Azure, separados por vírgula |
--all | Descobrir automaticamente todas as assinaturas acessíveis | |
--source | -s | Arquivo CSV com os alvos de assinatura |
--output | -o | Diretório de saída (obrigatório para o modo multi/all/CSV) |
--tenant | ID do tenant do Azure AD / Entra ID (opcional) | |
--region | Filtrar por uma região específica do Azure (opcional) | |
--detail | Nível de detalhe: minimal (padrão) ou detailed | |
--safe-failure-mode | Tratamento de segredos: fail-closed (padrão), log-and-redact, off | |
--version / -v | Exibir a versão e sair | |
--help | Exibir 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 Azure | Tipo OSIRIS | Descrição |
|---|---|---|
| Virtual Networks | network.vpc | VNets com espaço de endereçamento, DNS e peerings |
| Subnets | network.subnet | Sub-redes com prefixos de endereços e service endpoints |
| Network Interfaces | network.interface | NICs com configurações de IP |
| Network Security Groups | network.security.group | NSGs com resumos de regras |
| Route Tables | osiris.azure.routetable | UDRs com contagem de rotas |
| Public IP Addresses | osiris.azure.publicip | IPs públicos com método de alocação |
| Load Balancers | network.loadbalancer | Load balancers L4 |
| Application Gateways | network.loadbalancer | Load balancers 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 saída |
| Azure Firewalls | network.firewall | Instâncias do Azure Firewall |
| DNS Zones | osiris.azure.dns.zone | Zonas DNS públicas |
| Private DNS Zones | osiris.azure.dns.privatezone | Zonas DNS privadas com links de VNet |
| ExpressRoute Circuits | osiris.azure.expressroute | Circuitos ExpressRoute |
| Virtual Machines | compute.vm | VMs com tamanho e estado de energia |
| Resource Groups | container.resourcegroup | Grupos 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 recursosnetwork.vpc- Redes virtuaisnetwork.subnet- Sub-redesnetwork.interface- Interfaces de redenetwork.security.group- Grupos de segurança de redenetwork.loadbalancer- Load balancers (L4 e L7)network.firewall- Azure Firewallscompute.vm- Máquinas virtuais
Tipos personalizados (osiris.azure.*):
osiris.azure.routetable- Tabelas de rotasosiris.azure.publicip- Endereços IP públicososiris.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 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 superiorlogical.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"
]
}
]
}
}