Skip to main content

Windows Defender (WIP)

Pulls the machine list from Microsoft Defender for Endpoint, including Defender's own risk and exposure assessment of each host.

Type namewindows_defender
CreatesEndpoints
Runs onA sensor with outbound reach to api.securitycenter.microsoft.com
Presence flagdefender_exits
Field prefixdefender_

What it contributes

  • Identity — machine ID, computer DNS name, Entra device ID, Entra-joined flag
  • Network — last IP address, last external IP address
  • Platform — OS platform, version, build, processor, architecture
  • Agent and health — agent version, health status, Defender AV status, onboarding status, managed by and managed-by status
  • Risk posture — risk score, exposure level, device value
  • Grouping — RBAC group ID and name, machine tags
  • Cloud context — VM metadata VM ID and resource ID
  • Deduplication signals — merged-into machine ID, potential-duplication flag, excluded flag and exclusion reason

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

Exposure level is Defender's opinion, not the platform's

defender_risk_score and defender_exposure_level are carried over verbatim. They are useful for prioritisation and for reconciling two tools' views, but they are not Lumen Edge findings — see Scanning for those.

Requirements

The integration is outbound-only: it is a scheduled Defender API client, so nothing is installed in the tenant, nothing is deployed to the endpoints, 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 integrationapi.securitycenter.microsoft.com — the machine listHTTPS over TCP443

Two hosts, because authentication and data live in different services: the run takes a client-credentials token from the first for the https://api.securitycenter.microsoft.com/.default scope, then pages /api/machines from the second. If the sensor reaches the internet through a proxy, point Proxy settings at it rather than opening direct egress.

Access in Entra ID

NeedWhy
An account that can register applicationsThe credential is an app registration with a client secret
An account that can grant tenant-wide admin consentMachine.Read.All is an application permission on the WindowsDefenderATP API and is inert until consented — see Permissions in Entra ID
A Defender for Endpoint deployment to readThe API returns what Defender knows; a tenant without onboarded machines authenticates fine and returns nothing

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 work is a paged HTTPS read per run, so it adds no meaningful load and needs no local storage.

Configuration

FieldRequiredNotes
NameYesLabel for this instance
Application (client) IDYesApp registration client ID
Directory (tenant) IDYesEntra tenant ID
Client secretNoRequired in practice for client-credentials auth
Exclude onboarding statusNoMulti-select over Onboarded, InsufficientInfo, CanBeOnboarded, Unsupported
Proxy settingsNohttp://host:port
SensorYesSensor that will run the integration
Ignore SSLNoSkips certificate validation
Use the onboarding-status exclusion deliberately

Defender returns machines it merely knows about alongside those it protects. Excluding CanBeOnboarded and Unsupported gives you a clean list of protected endpoints; leaving them in gives you a coverage-gap report instead. Both are legitimate — pick the one matching what this instance is for, and consider running two instances if you want both.

Permissions in Entra ID

Register an application, add an application permission on the WindowsDefenderATP API, and grant admin consent:

APIPermissionType
WindowsDefenderATPMachine.Read.AllApplication

The integration authenticates against https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token with the https://api.securitycenter.microsoft.com/.default scope, then pages /api/machines.

Client secrets expire

An app-registration secret has a maximum lifetime. Note its expiry when you create it — an expired secret shows up as an integration that simply stops refreshing, which is easy to miss.

See also