Producteur OSIRIS JSON pour Microsoft Azure
Le producteur OSIRIS JSON pour Azure se connecte à Microsoft Azure via Azure CLI (az) et génère des snapshots OSIRIS JSON de la topologie de votre abonnement. À partir de v0.5.0, le producteur couvre les couches réseau, calcul, stockage, identité, bases de données, conteneurs, intégration, observabilité, sauvegarde, automatisation et groupes de gestion, y compris leurs arêtes de dépendance entre ressources (Private Endpoint vers des cibles PaaS, App Service vers App Insights, Log Analytics, RSV, Backup Vault vers des éléments protégés, AKS vers des sous-réseaux et des pools de nœuds, etc.).
Pour commencer à utiliser OSIRIS JSON pour Microsoft Azure, installez le dispatcher principal et le producteur OSIRIS JSON pour Microsoft Azure:
go install go.osirisjson.org/producers/cmd/osirisjson-producer@latest
go install go.osirisjson.org/producers/cmd/osirisjson-producer-azure@latest
Le dispatcher principal permet d’exécuter osirisjson-producer azure .... Sans celui-ci, invoquez directement le binaire du fournisseur avec osirisjson-producer-azure ....
Assurez-vous que $GOPATH/bin (ou $HOME/go/bin) se trouve dans votre PATH. Consultez la page getting started pour d’autres options d’installation.
Prérequis
- Installez Azure CLI
- Authentifiez-vous:
az login - L’utilisateur authentifié doit disposer du rôle Reader (ou d’une autorisation de lecture équivalente) sur le ou les abonnements cibles. Pour une collecte complète des données, y compris les routes effectives, l’utilisateur doit également disposer de l’autorisation
Microsoft.Network/networkInterfaces/effectiveRouteTable/action(incluse dans Network Contributor et les rôles supérieurs). Si cette autorisation est absente, le producteur ignore la collecte des routes effectives avec un log INFO et continue normalement.
Vous pouvez exécuter le producteur sur votre machine locale ou l’invoquer à l’aide d’un job planifié avec un compte de service sur la plateforme de votre choix.
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 producteur découvre tous les abonnements accessibles et présente une liste numérotée. Sélectionnez avec des numéros individuels (1,3,5), des plages (30-55), des combinaisons (1,3,30-55) ou saisissez all.
Mode multi-abonnement
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 de fichier de sortie) |
tenant_id | UUID du tenant Azure AD / Entra ID | |
environment | Étape de déploiement: dv, np, pr (développement, non-production, production) | |
region | Filtre sur une région Azure (vide = toutes les régions) | |
notes | Notes en texte libre (ignorées par le producteur) |
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 ou les connexions ExpressRoute vers des abonnements distants) sont émises sous forme de ressources stub avec provider.subscription défini sur l’ID de l’abonnement distant, afin que l’arête de topologie survive à la limite tout en conservant la validité du document.
Environnements multi-tenant
Exécutez le producteur une fois par tenant. Chaque az login authentifie auprès d’un tenant. Utilisez az login --tenant <tenant-id> pour basculer. La hiérarchie de sortie regroupe automatiquement les documents par tenant.
Référence des flags
| Flag | Court | Description |
|---|---|---|
--subscription | -S | ID d’abonnement Azure, séparés par des virgules |
--all | Découvre automatiquement tous les abonnements accessibles | |
--source | -s | Fichier CSV avec les abonnements cibles |
--output | -o | Répertoire de sortie (obligatoire pour les modes multi/all/CSV) |
--tenant | ID du tenant Azure AD / Entra ID (facultatif) | |
--region | Filtre sur une région Azure spécifique (facultatif) | |
--purpose | Niveau de détail de la sortie: documentation (par défaut) ou audit. Voir Objectif ci-dessous | |
--safe-failure-mode | Gestion des secrets: fail-closed (par défaut), log-and-redact, off | |
--version / -v | Affiche la version et quitte | |
--help | Affiche l’aide et quitte |
Objectif
Le flag --purpose implémente le chapitre 13.1.3 de la spécification OSIRIS JSON (minimisation des données). La collecte est toujours exhaustive; l’émission est façonnée par l’objectif déclaré, afin qu’une même exécution du producteur puisse servir à la fois des cas d’usage de visualisation légère et des cas d’usage d’audit / conformité.
| Valeur | Comportement |
|---|---|
documentation (par défaut) | Champs minimaux: identité, type, traçabilité du provider, noms, tags et relations de haut niveau. Les maps properties et extensions par ressource sont supprimées. Adapté aux diagrammes, tableaux de bord d’inventaire et documentation de haut niveau. |
audit | Tous les champs lisibles, après masquage des champs sensibles. Maps properties et extensions complètes pour chaque ressource, connexion et groupe. Adapté aux revues de conformité, audits, dérive de configuration ou documentation approfondie et conception précise de la topologie. |
La valeur sélectionnée est enregistrée dans le document sous metadata.scope.purpose, afin que les consommateurs puissent identifier le niveau de détail qu’ils lisent.
[!IMPORTANT] Les secrets sont toujours masqués, quel que soit l’objectif. La projection d’audit ajoute des détails (adresses IP, règles NSG, sous-champs SKU, détails BGP, etc.); elle n’ajoute jamais de matériel d’authentification. Les mots de passe administrateur de base de données, les clés d’accès Cosmos / Redis / Service Bus / Event Hubs, les clés d’instrumentation App Insights et les clés partagées Log Analytics ne sont jamais collectés.
# Default: documentation (minimal projection)
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890
# Audit: full ARM fidelity
osirisjson-producer azure -S a1b2c3d4-e5f6-7890-abcd-ef1234567890 --purpose audit
Ce que collecte le producteur OSIRIS JSON pour Microsoft Azure
Le producteur OSIRIS JSON pour Microsoft Azure collecte à chaque exécution un inventaire complet des types de ressources pris en charge via Azure CLI. Les tableaux suivants regroupent ce qui est interrogé.
Réseau
| Ressource Microsoft Azure | Type OSIRIS JSON |
|---|---|
| Virtual Networks | network.vpc |
| Subnets | network.subnet |
| Network Interfaces | network.interface |
| Network Security Groups | network.security.group |
| Application Security Groups | osiris.azure.asg |
| Route Tables | osiris.azure.routetable |
| Public IP Addresses | osiris.azure.publicip |
| Public IP Prefixes | osiris.azure.publicipprefix |
| Load Balancers (L4) | network.loadbalancer |
| Application Gateways (L7) | osiris.azure.applicationgateway |
| Azure Firewalls | network.firewall |
| NAT Gateways | osiris.azure.gateway.nat |
| VNet Gateways (VPN / ExpressRoute) | osiris.azure.gateway.vnet |
| Route Servers | osiris.azure.routeserver |
| ExpressRoute Circuits | osiris.azure.expressroute |
| VPN Gateway Connections | osiris.azure.vpnconnection |
| Private Endpoints | osiris.azure.privateendpoint |
| DNS Zones | osiris.azure.dns.zone |
| Private DNS Zones | osiris.azure.dns.privatezone |
| DNS Private Resolvers | osiris.azure.dns.resolver |
| DNS Forwarding Rulesets | osiris.azure.dns.forwardingruleset |
| Azure Bastion | osiris.azure.bastion |
| Traffic Manager Profiles | osiris.azure.trafficmanager |
| Availability Sets | osiris.azure.availabilityset |
Calcul
| Ressource Microsoft Azure | Type OSIRIS JSON |
|---|---|
| Virtual Machines | compute.vm |
| VM Scale Sets | osiris.azure.vmss |
| Managed Disks | osiris.azure.disk |
| Managed Snapshots | osiris.azure.snapshot |
| Azure Arc Machines | osiris.azure.arc.machine |
Stockage
| Ressource Microsoft Azure | Type OSIRIS JSON |
|---|---|
| Storage Accounts | osiris.azure.storage |
App Service / couche web
| Ressource Microsoft Azure | Type OSIRIS JSON |
|---|---|
| App Service Plan | osiris.azure.appserviceplan |
| Web App | osiris.azure.webapp |
| Web App Deployment Slot | osiris.azure.webapp.slot |
| Function App | osiris.azure.functionapp |
Routage App Service: les sites dont kind contient functionapp sont émis comme osiris.azure.functionapp; tous les autres sites sont émis comme osiris.azure.webapp.
Identité et sécurité
| Ressource Microsoft Azure | Type OSIRIS JSON |
|---|---|
| Key Vault | osiris.azure.keyvault |
| Container Registry | osiris.azure.containerregistry |
| User-Assigned Managed Identity | osiris.azure.managedidentity |
Sauvegarde et reprise après sinistre
| Ressource Microsoft Azure | Type OSIRIS JSON |
|---|---|
| Recovery Services Vault | osiris.azure.recoveryservicesvault |
| Backup Vault (Azure Backup) | osiris.azure.backupvault |
Bases de données
| Ressource Microsoft Azure | Type OSIRIS JSON |
|---|---|
| SQL Server | osiris.azure.sqlserver |
| SQL Database | osiris.azure.sqldatabase |
| SQL Elastic Pool | osiris.azure.sql.elasticpool |
| SQL Managed Instance | osiris.azure.sqlmi |
| SQL MI Database | osiris.azure.sqlmidatabase |
| SQL Virtual Machine | osiris.azure.sqlvm |
| PostgreSQL Flexible Server | osiris.azure.postgresqlserver |
| MySQL Flexible Server | osiris.azure.mysqlserver |
| Cosmos DB account | osiris.azure.cosmosaccount |
| Redis Cache | osiris.azure.redis |
Conteneurs
| Ressource Microsoft Azure | Type OSIRIS JSON |
|---|---|
| AKS Cluster | osiris.azure.aks.cluster |
| AKS Agent Pool | osiris.azure.aks.nodepool |
| Container App Managed Environment | osiris.azure.containerapp.environment |
| Container App | osiris.azure.containerapp |
| Container Group / ACI | osiris.azure.containergroup |
Intégration et messagerie
| Ressource Microsoft Azure | Type OSIRIS JSON |
|---|---|
| Service Bus Namespace | osiris.azure.servicebus.namespace |
| Event Hubs Namespace | osiris.azure.eventhubs.namespace |
| API Management Service | osiris.azure.apim |
| Front Door (Standard / Premium) | osiris.azure.frontdoor.profile |
| Stream Analytics | osiris.azure.streamanalytics |
| Event Grid System Topic | osiris.azure.eventgrid.systemtopic |
Automatisation et workflows
| Ressource Microsoft Azure | Type OSIRIS JSON |
|---|---|
| Logic Workflow | osiris.azure.logic.workflow |
| Logic API Connection | osiris.azure.logic.apiconnection |
| Data Factory | osiris.azure.datafactory |
| Synapse Workspace | osiris.azure.synapse.workspace |
| Automation Account | osiris.azure.automation.account |
| Communication Service | osiris.azure.communicationservice |
| Email Communication Service | osiris.azure.emailservice |
| Email Communication Domain | osiris.azure.emailservice.domain |
Observabilité
| Ressource Microsoft Azure | Type OSIRIS JSON | Note |
|---|---|---|
| Application Insights | osiris.azure.applicationinsights | |
| Log Analytics Workspace | osiris.azure.loganalytics | |
| Data Collection Rule | osiris.azure.monitor.datacollectionrule | |
| Data Collection Endpoint | osiris.azure.monitor.datacollectionendpoint | |
| Autoscale Setting | osiris.azure.monitor.autoscale | |
| Metric Alert | osiris.azure.monitor.metricalert | --purpose audit uniquement |
| Action Group | osiris.azure.monitor.actiongroup | --purpose audit uniquement |
Les ressources Metric Alert et Action Group sont limitées à --purpose audit, car ce sont des constructions de politique d’observabilité et non des ressources de topologie; avec l’objectif par défaut documentation, elles ne sont pas émises.
Contenance
| Ressource Microsoft Azure | Type OSIRIS JSON |
|---|---|
| Groupes de ressources | container.resourcegroup |
Ce qui n’est intentionnellement pas collecté
OSIRIS JSON définit un format JSON neutre vis-à-vis des fournisseurs pour décrire les ressources d’infrastructure, leurs propriétés et leurs relations topologiques - ce n’est pas un format Infrastructure-as-Code ni un format similaire. Vous pouvez en savoir plus ici: Qu’est-ce qu’OSIRIS JSON. Les éléments suivants sont intentionnellement hors périmètre:
- Politiques de sauvegarde / rétention sous Recovery Services Vault et Backup Vault (les vaults et les arêtes vers les éléments protégés sont émis; les corps des politiques ne le sont pas).
- Politique de couche base de données: audit SQL, détection de menaces, TDE, règles de pare-feu, security-alert-policy.
- Politiques, produits, opérations et valeurs nommées d’API Management.
- Routes, jeux de règles, endpoints et associations de politiques WAF de Front Door (le profil est émis; le routage ne l’est pas).
- Secrets de Container App et variables d’environnement ACI.
- Énumération des diagnostic settings par ressource (ajouterait un appel
azpar ressource). - Azure Front Door classique (
Microsoft.Network/frontDoors, déprécié). Microsoft.DBforPostgreSQL/servershérité (single server, en fin de vie dans la roadmap Azure).
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.5.0",
"url": "https://osirisjson.org/en/docs/producers/hyperscalers/microsoft-azure"
},
"scope": {
"name": "<subscription-id> - <subscription-name>",
"purpose": "documentation",
"providers": ["azure"],
"accounts": ["<tenant-id>"],
"subscriptions": ["<subscription-id>"],
"regions": ["westeurope", "eastus2"]
}
},
"topology": {
"resources": [ ... ],
"connections": [ ... ],
"groups": [ ... ]
}
}
Types de connexion
Les arêtes de connexion utilisent les sous-types standard OSIRIS JSON v1.0 conformément au chapitre 5.2.3 de la spécification, afin que les consommateurs puissent distinguer les couches de topologie.
| Type de connexion OSIRIS JSON | Utilisé pour |
|---|---|
contains | Contenance (Subnet dans VNet, App Service Plan dans site, AKS Cluster dans node pool, RG dans Subscription, SQL Server dans SQL Database, SQL MI dans SQL MI Database, Disk source dans Snapshot, VM dans Disk attaché) |
network | Connectivité réseau générique (NIC vers subnet, associations NSG, liens DNS, connexions de gateway, App Insights vers workspace, Web App vers App Insights, AKS / Redis / ACI vers subnet, APIM vers subnet) |
network.peering | Peerings VNet |
network.vpn | Connexions de gateway VPN |
network.bgp | Connexions de circuit ExpressRoute |
dependency | Private Endpoint vers cible PaaS (Web App, Function App, Key Vault, Container Registry, Recovery Services Vault, cluster AKS, Service Bus, Event Hubs, APIM) |
dependency.storage | Private Endpoint vers Storage Account |
dependency.database | Private Endpoint vers base de données (SQL Server, Cosmos DB, Redis) |
Types de groupe
| Type de groupe OSIRIS JSON | Utilisé pour |
|---|---|
logical.subscription | Groupe d’abonnement de premier niveau. Sous --purpose audit, reçoit extensions.osiris.azure.management_group_path (tableau JSON de noms d’affichage, de la racine à la feuille). |
logical.resourcegroup | Groupes de resource groups (enfants de l’abonnement) |
logical.managementgroup | Un groupe par management group dans la chaîne d’ascendance du tenant (de la racine au parent de l’abonnement). Chaque groupe liste ses abonnements enfants directs et ses management groups enfants dans children. |
container.region | Un groupe par provider.region distinct observé dans l’abonnement, contenant comme membres toutes les ressources de cette région. La région global et les ressources sans région sont ignorées. Le token de frontière est <subscription-id>/<region>, donc les groupes n’entrent jamais en collision entre abonnements. |
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 le namespace 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 uniquement; les Application Gateways utilisentosiris.azure.applicationgateway)network.firewall- Azure Firewallscompute.vm- Machines virtuelles
Extensions (osiris.azure)
Les données spécifiques à Azure qui ne correspondent pas à des propriétés OSIRIS JSON portables sont émises sous le namespace d’extension osiris.azure. Cela suit la spécification OSIRIS JSON: properties contient les données communes / portables, extensions contient les données détaillées spécifiques au fournisseur. Les extensions sont émises uniquement sous --purpose audit.
Les extensions représentatives incluent:
| Type de ressource OSIRIS JSON | Champs d’extension sélectionnés |
|---|---|
network.interface | enable_accelerated_networking, effective_routes[] |
network.security.group | default_security_rules[] |
osiris.azure.expressroute | sku, sku_tier, service_provider, peerings[] (type de peering BGP, état, ASN du peer, ID VLAN, préfixes d’adresse) |
osiris.azure.webapp / osiris.azure.functionapp | managed_identity, outbound_vnet_routing, private_endpoint_connection_ids[], app_insights_id |
osiris.azure.storage / osiris.azure.keyvault / osiris.azure.containerregistry / osiris.azure.recoveryservicesvault / osiris.azure.sqlserver / osiris.azure.cosmosaccount | private_endpoint_connection_ids[] |
osiris.azure.applicationinsights | workspace_resource_id (workspace Log Analytics lié) |
osiris.azure.loganalytics | customer_id (UUID du workspace utilisé par KQL; ce n’est pas un secret) |
logical.subscription | osiris.azure.management_group_path (tableau de noms d’affichage de MG, de la racine à la feuille; audit uniquement) |
[!NOTE]
network.security.groupsecurity_rules[](règles définies par l’utilisateur) sont émises dansproperties, pas dansextensions, car elles constituent un signal topologique primaire. Seulesdefault_security_rules[](règles baseline gérées par Azure) vont dansextensions.
network.interfaceprivate_ipest également émis danspropertiespour la même raison.
Métadonnées du provider
Chaque ressource inclut provider.type avec le type de ressource ARM natif (par exemple Microsoft.Network/virtualNetworks, Microsoft.Compute/virtualMachines). Les stubs inter-abonnements incluent provider.subscription avec l’ID de l’abonnement distant. Toutes les ressources incluent provider.source défini sur azure-cli.
IDs de ressources
Les IDs de ressources Azure suivent le pattern azure::<ARM-resource-id>, en utilisant l’ID de ressource ARM complet comme identifiant natif. Cela garantit des IDs globalement uniques et déterministes qui survivent à la corrélation entre abonnements.
Canonicalisation des régions
provider.region et metadata.scope.regions sont canonicalisés dans la forme slug Azure (minuscules, sans espaces). La CLI az renvoie location de manière incohérente selon les types de ressources: la plupart des ressources ARM utilisent westeurope / eastus2, tandis que les App Service Plans et les Web Apps exposent la forme d’affichage (West Europe). Le producteur normalise vers le slug afin qu’un abonnement mono-région n’apparaisse pas comme deux régions dans metadata.scope.regions.
Exigences RBAC
| Niveau d’autorisation | Ce qui est collecté |
|---|---|
| Reader | Tous les types de ressources, propriétés, extensions (règles NSG, peerings ER, connexions de gateway, peerings VNet, liens DNS, arêtes de Private Endpoint vers cible, App Service vers App Insights, AKS, ressources de conteneur, base de données, messagerie et observabilité) |
Reader + effectiveRouteTable/action | Tout ce qui précède + routes effectives des NIC |
| Network Contributor / Owner | Dataset complet sans restrictions |
Le producteur teste l’autorisation sur la première NIC et ignore proprement la collecte des routes effectives si l’autorisation est refusée. Toutes les autres données sont collectées quoi qu’il arrive.
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 --purpose audit
Document de sortie OSIRIS JSON (réduit, --purpose audit):
{
"$schema": "https://osirisjson.org/schema/v1.0/osiris.schema.json",
"version": "1.0.0",
"metadata": {
"generator": {
"name": "osirisjson-producer-azure",
"version": "0.5.0",
"url": "https://osirisjson.org/en/docs/producers/hyperscalers/microsoft-azure"
},
"scope": {
"name": "a1b2c3d4-e5f6-7890-abcd-ef1234567890 - my-nonprod-subscription",
"purpose": "audit",
"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",
"source": "azure-cli",
"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"],
"subnet_count": 4,
"enable_ddos_protection": false,
"peerings": [
{
"name": "hub-to-spoke",
"peering_state": "Connected",
"remote_vnet_id": "/subscriptions/a1b2c3d4/.../spoke-vnet",
"allow_gateway_transit": true,
"allow_forwarded_traffic": true
}
]
}
},
{
"id": "azure::/subscriptions/a1b2c3d4/resourceGroups/data-rg/providers/Microsoft.Storage/storageAccounts/mystg",
"type": "osiris.azure.storage",
"name": "mystg",
"status": "active",
"provider": {
"name": "azure",
"native_id": "/subscriptions/a1b2c3d4/resourceGroups/data-rg/providers/Microsoft.Storage/storageAccounts/mystg",
"type": "Microsoft.Storage/storageAccounts",
"region": "westeurope",
"source": "azure-cli",
"subscription": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"tenant": "f1e2d3c4-b5a6-9078-fedc-ba9876543210"
},
"properties": {
"resource_group": "data-rg",
"sku_tier": "Standard",
"sku_name": "Standard_LRS",
"kind": "StorageV2",
"access_tier": "Hot",
"https_only": true,
"min_tls_version": "TLS1_2",
"public_network_access": "Disabled",
"allow_blob_public_access": false
},
"extensions": {
"osiris.azure": {
"private_endpoint_connection_ids": [
"/subscriptions/a1b2c3d4/.../privateEndpoints/pe-mystg"
]
}
}
}
],
"connections": [
{
"source": "azure::/subscriptions/a1b2c3d4/.../subnets/default",
"target": "azure::/subscriptions/a1b2c3d4/.../virtualNetworks/hub-vnet",
"type": "contains",
"direction": "forward"
},
{
"source": "azure::/subscriptions/a1b2c3d4/.../privateEndpoints/pe-mystg",
"target": "azure::/subscriptions/a1b2c3d4/.../storageAccounts/mystg",
"type": "dependency.storage",
"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::data-rg"
],
"extensions": {
"osiris.azure": {
"management_group_path": ["Tenant Root Group", "Corp", "NonProd"]
}
}
},
{
"id": "azure::managementgroup::NonProd",
"type": "logical.managementgroup",
"name": "NonProd",
"children": [
"azure::subscription::a1b2c3d4-e5f6-7890-abcd-ef1234567890"
]
},
{
"id": "azure::region::a1b2c3d4-e5f6-7890-abcd-ef1234567890/westeurope",
"type": "container.region",
"name": "westeurope",
"members": [
"azure::/subscriptions/a1b2c3d4/.../virtualNetworks/hub-vnet",
"azure::/subscriptions/a1b2c3d4/.../storageAccounts/mystg"
]
}
]
}
}
La même exécution avec la valeur par défaut --purpose documentation renvoie le graphe de ressources identique, mais avec les maps properties et extensions supprimées de chaque ressource, connexion et groupe, ce qui le rend adapté aux vues de topologie de haut niveau et à la documentation.