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​