Skip to main content

Azure VMs (WIP)

Enumerates the subscriptions a service principal can see and imports their virtual machines, resolving each one's networking through its interfaces, public IPs and virtual networks.

Type nameazure_assets
CreatesEndpoints
Runs onA sensor with outbound reach to management.azure.com
Presence flagazure_exists
Field prefixazure_

What it contributes

Unlike the directory- and agent-based sources, this one reports infrastructure — what exists in the subscription, whether or not anything is installed on it.

  • Resource identity — resource ID, subscription ID, location, time created
  • Sizing and state — VM size, hardware profile size, VM status, provisioning state, hibernation capability
  • Networking — private IP, public IP, MAC, hostname, subnet, network interface IDs
  • Image — publisher, offer, SKU, version and exact version of the source image
  • OS disk — OS type, disk name, create option, caching
  • OS profile — computer name, admin username, Linux SSH public key data
  • Security profile — security type, secure boot enabled, vTPM enabled

It writes the shared fields names, os, os_vendor, type, mac, private_ip, last_public_ip and updated_at.

This is how you find the machines nothing else sees

A VM with no EDR agent, no directory join and no Nessus agent is invisible to every other integration but present here. Comparing azure_exists against cs_exits or defender_exits is a direct agent-coverage report for your Azure estate.

Requirements

The integration is outbound-only: it reads Azure Resource Manager on a schedule, so nothing is installed in the subscription, nothing runs inside the VMs, and nothing has to reach into the deployment.

Network access

FromToProtocolPort
The sensor running the integrationlogin.microsoftonline.com — the token endpointHTTPS over TCP443
The sensor running the integrationmanagement.azure.com — Azure Resource ManagerHTTPS over TCP443

Two hosts, because authentication and data live in different services: the run takes a client-credentials token from the first, then reads subscriptions, virtual machines, NICs, public IPs and virtual networks from the second. If the sensor reaches the internet through a proxy, point Proxy settings at it rather than opening direct egress.

Access in Azure

NeedWhy
An account that can create a service principalThe credential is an app registration with a client secret
An account that can assign Azure RBAC roles at the intended scopeThis integration uses Resource Manager, so access is a Reader role assignment rather than a consented Graph permission — assigning it needs Owner or User Access Administrator at that scope. See Permissions in Azure

Reader on a management group rather than per subscription is the assignment that keeps coverage correct as subscriptions are added — the warning under Permissions in Azure explains why.

In this deployment

NeedWhy
A registered, healthy sensorThe integration runs on a sensor, on the platform's schedule — see Sensors

There are no special host requirements beyond a sensor that is checking in. The call count scales with the number of subscriptions and VMs, not with anything on the sensor host.

Configuration

FieldRequiredNotes
NameYesLabel for this instance
Tenant IDYesEntra tenant ID
Client IDYesService principal client ID
Client secretYesService principal secret
Proxy settingsNohttp://host:port
SensorYesSensor that will run the integration

Its Ignore if host is offline default is 180 days rather than the usual platform default, because a stopped-deallocated VM legitimately goes months without changing.

Permissions in Azure

This integration uses Azure Resource Manager, not Graph, so its permissions are Azure RBAC role assignments rather than app permissions:

ScopeRole
Each subscription to be discoveredReader

It authenticates for the https://management.azure.com/.default scope and then reads, per subscription: /providers/Microsoft.Compute/virtualMachines, /providers/Microsoft.Network/networkInterfaces, /providers/Microsoft.Network/publicIPAddresses and /providers/Microsoft.Network/virtualNetworks.

Coverage equals role assignments

The integration discovers only the subscriptions the service principal is assigned on. A subscription created later, or one assigned to a different management group, silently will not appear. Assign Reader at the management group covering everything you want inventoried, and re-check after tenant reorganisations.

See also