Producer OSIRIS JSON pour Microsoft Azure
Le producer OSIRIS JSON Azure se connecte à Microsoft Azure via l’Azure CLI (az) et génère des snapshots OSIRIS JSON de la topologie de vos abonnements : réseaux virtuels, sous-réseaux, NIC, NSG, load balancers, firewalls, VM, et plus encore.
Pour commencer à utiliser OSIRIS JSON pour Microsoft Azure, installez le core dispatcher et le producer Azure :
go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-azure@latest
Le core dispatcher vous permet d’exécuter osirisjson-producer azure .... Sans lui, invoquez directement le binaire du fournisseur sous la forme osirisjson-producer-azure ....
Assurez-vous que $GOPATH/bin (ou $HOME/go/bin) se trouve dans votre PATH. Consultez la page Premiers pas pour voir d’autres options d’installation.
Prérequis
- Installez l’Azure CLI
- Authentifiez-vous :
az login - L’utilisateur authentifié doit disposer d’une autorisation de lecture sur un ou plusieurs abonnements cibles. Vous pouvez exécuter le producer sur votre machine locale ou décider de l’invoquer via une tâche planifiée avec un compte de service à l’aide de votre logiciel ou plateforme préféré.
Utilisation de la CLI
osirisjson-producer azure [flags]
osirisjson-producer azure template --generate
Mode unique
Commencez par collecter un abonnement qui sera automatiquement enregistré sous microsoft-azure-<timestamp>-<name>.json :
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890
Mode interactif
Exécutez sans flags pour obtenir un sélecteur interactif d’abonnements :
osirisjson-producer azure
Le producer découvre tous les abonnements accessibles et présente une liste numérotée. Sélectionnez-en un ou plusieurs (séparés par des virgules) ou tapez all.
Mode multi-abonnements
Collectez plusieurs abonnements dans un répertoire de sortie :
# 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
Mode batch (CSV)
Générez un modèle CSV :
osirisjson-producer azure template --generate
Collectez à partir d’un fichier CSV :
osirisjson-producer azure -s subscriptions.csv -o ./output
Le modèle CSV utilise ces colonnes :
| Colonne | Obligatoire | Description |
|---|---|---|
subscription_id | oui | UUID de l’abonnement Azure |
subscription_name | oui | Libellé lisible par un humain (utilisé comme nom du fichier de sortie) |
tenant_id | UUID du tenant Azure AD / Entra ID | |
environment | Étape de déploiement : dv, np, pr (développement, préproduction, production) | |
region | Filtrer par région Azure (vide = toutes les régions) | |
notes | Notes en texte libre (ignorées par le producer) |
Hiérarchie de sortie
Mode unique : enregistre dans microsoft-azure-<timestamp>-<name>.json dans le répertoire courant.
Modes multi/batch/all : organisés par tenant et timestamp :
output/
<TenantID>/
<timestamp>/
<SubscriptionName>.json
Chaque abonnement produit un document OSIRIS autonome. Les références inter-abonnements (par exemple les peerings VNet vers des abonnements distants) utilisent des identifiants de ressource déterministes que les consommateurs peuvent corréler entre les documents.
Environnements multi-tenant
Exécutez le producer une fois par tenant. Chaque az login authentifie sur un tenant. Utilisez az login --tenant <tenant-id> pour changer. La hiérarchie de sortie regroupe automatiquement les documents par tenant.
Référence des flags
| Flag | Abrégé | Description |
|---|---|---|
--subscription | -S | ID d’abonnement Azure, séparés par des virgules |
--all | Découvrir automatiquement tous les abonnements accessibles | |
--source | -s | Fichier CSV avec les cibles d’abonnement |
--output | -o | Répertoire de sortie (obligatoire pour le mode multi/all/CSV) |
--tenant | ID du tenant Azure AD / Entra ID (optionnel) | |
--region | Filtrer sur une région Azure spécifique (optionnel) | |
--detail | Niveau de détail : minimal (par défaut) ou detailed | |
--safe-failure-mode | Gestion des secrets : fail-closed (par défaut), log-and-redact, off | |
--version / -v | Afficher la version et quitter | |
--help | Afficher l’aide et quitter |
Ce qu’il collecte
Le producer Azure interroge les types de ressources suivants via l’Azure CLI :
Mode minimal :
| Type de ressource Azure | Type OSIRIS | Description |
|---|---|---|
| Virtual Networks | network.vpc | VNet avec espace d’adressage, DNS et peerings |
| Subnets | network.subnet | Sous-réseaux avec préfixes d’adresses et service endpoints |
| Network Interfaces | network.interface | NIC avec configurations IP |
| Network Security Groups | network.security.group | NSG avec résumés des règles |
| Route Tables | osiris.azure.routetable | UDR avec nombre de routes |
| Public IP Addresses | osiris.azure.publicip | IP publiques avec méthode d’allocation |
| Load Balancers | network.loadbalancer | Load balancers L4 |
| Application Gateways | network.loadbalancer | Load balancers L7 (application gateways) |
| Private Endpoints | osiris.azure.privateendpoint | Endpoints private link |
| VNet Gateways | osiris.azure.gateway.vnet | Gateways ExpressRoute / VPN |
| NAT Gateways | osiris.azure.gateway.nat | Gateways NAT sortants |
| Azure Firewalls | network.firewall | Instances Azure Firewall |
| DNS Zones | osiris.azure.dns.zone | Zones DNS publiques |
| Private DNS Zones | osiris.azure.dns.privatezone | Zones DNS privées avec liens VNet |
| ExpressRoute Circuits | osiris.azure.expressroute | Circuits ExpressRoute |
| Virtual Machines | compute.vm | VM avec taille et état d’alimentation |
| Resource Groups | container.resourcegroup | Groupes de ressources en tant que ressources conteneur |
Le mode détaillé ajoute les détails des routes des tables de routage, les règles de load balancer et les propriétés étendues.
Structure de sortie OSIRIS JSON pour 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": [ ... ]
}
}
Types de ressources
Les types de ressources suivent la spécification OSIRIS JSON v1.0. Les types standard sont utilisés lorsqu’ils sont définis ; les types spécifiques à Azure utilisent l’espace de noms osiris.azure.*.
Types standard :
container.resourcegroup- Groupes de ressourcesnetwork.vpc- Réseaux virtuelsnetwork.subnet- Sous-réseauxnetwork.interface- Interfaces réseaunetwork.security.group- Groupes de sécurité réseaunetwork.loadbalancer- Load balancers (L4 et L7)network.firewall- Azure Firewallscompute.vm- Machines virtuelles
Types personnalisés (osiris.azure.*) :
osiris.azure.routetable- Tables de routageosiris.azure.publicip- Adresses IP publiquesosiris.azure.privateendpoint- Endpoints privésosiris.azure.gateway.vnet- Gateways VNet (VPN/ExpressRoute)osiris.azure.gateway.nat- Gateways NATosiris.azure.dns.zone- Zones DNSosiris.azure.dns.privatezone- Zones DNS privéesosiris.azure.expressroute- Circuits ExpressRoute
Types de connexions
network- Connectivité réseau (peerings VNet, NIC-to-subnet, associations NSG, liens DNS, connexions de gateway)contains- Contenance (appartenance du sous-réseau au VNet)
Types de groupes
logical.subscription- Groupe d’abonnement de niveau supérieurlogical.resourcegroup- Groupes de groupes de ressources (enfants de l’abonnement)
Métadonnées du fournisseur
Chaque ressource inclut provider.type avec le type de ressource ARM natif (par exemple Microsoft.Network/virtualNetworks, Microsoft.Compute/virtualMachines). Les stubs de peering inter-abonnements incluent provider.subscription avec l’ID de l’abonnement distant.
ID de ressources
Les ID de ressources Azure suivent le modèle azure::<ARM-resource-id>, en utilisant l’ID complet de la ressource ARM comme identifiant natif. Cela garantit des ID déterministes et globalement uniques.
Exemples
Abonnement unique
Nous allons explorer un abonnement unique dans notre tenant et générer depuis Microsoft Azure un document OSIRIS JSON.
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890
Document de sortie OSIRIS JSON (tronqué) :
{
"$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"
]
}
]
}
}