shorfall
Deploy in your tenant, about ten minutes

Your subscription. Your identity. Your data. We ship the software.

Shorfall runs in your own Azure subscription and Microsoft Entra tenant. Defender access is held by the web app's managed identity, sign-in uses App Service authentication against your tenant, and inspection evidence lives in your Cosmos DB account. Shorfall the company never holds a credential, a token or a byte of your telemetry, and the software makes no call home. Configure three values below; the commands and the map of what gets created follow along.

Release feed: loading…

Configure

Web app shorfall-contoso.azurewebsites.net. Lowercase letters, digits and hyphens; must be globally unique.
Created if it does not exist. Everything Shorfall needs lives in it; delete it to remove Shorfall.
Where the web app and your Cosmos DB account live. Your data never leaves this region.
The installer counts your onboarded devices through advanced hunting with your account and sizes the plan and database. Enter a number to see the tier now, or to size an estate you cannot query from this account.
One script does everything: resources, Defender roles on the identity, sign-in registration, verified release. Recommended.
What gets created You, an administrator Runs Install-Shorfall.ps1 after az login Your subscription: rg-shorfall, westeurope App Service plan sized to your estate (Linux) The only compute. B1 to 2,500 devices, B2 to 10,000, Premium v3 beyond Web app shorfall-contoso System-assigned managed identity holds the Defender roles Cosmos DB, serverless Key authentication disabled, RBAC for the identity only, your evidence User-assigned identity: sign-in credential, no client secret Defender for Endpoint API 3 read-only roles on your identity Entra: "Shorfall Console" Single tenant, openid profile email Shorfall, the company Receives nothing: no identity, no credential, no telemetry, no call home First passive posture minutes after sign-in. First inspection minutes after the inspection roles are assigned. Removal: delete the resource group and the registration. Nothing exists anywhere else.
PowerShell. Run as an account that can assign application roles.

    

What the installer does, phase by phase

Read it before you run it: it is a plain PowerShell script that calls az, and it stops for your confirmation after showing the plan. Every step is idempotent; re-run it any time to repair or extend an installation.

  1. Preflight

    Azure CLI version, sign-in, tenant and subscription, global availability of the web app and Cosmos names, presence of the Defender API service principal, and a count of your onboarded devices to pick the tier.

    Seconds, changes nothing
  2. Plan

    Lists exactly what will be created or reused, the roles with their reasons, the release version and its published SHA-256, and what will never exist. Then asks.

    Your decision
  3. Apply

    Deploys the template, assigns Defender roles to the web app's managed identity through Microsoft Graph, creates the sign-in registration with a federated credential, switches App Service authentication on, downloads and verifies the release, deploys it.

    6 to 9 minutes
  4. Verify

    Waits until the app reports the installed version, then writes an installation receipt (JSON: identity, roles, registration, release digest, scanner digest) next to the script for your records and support requests.

    1 to 2 minutes
Prerequisites: an Azure subscription, Azure CLI 2.60 or later, Microsoft Defender for Endpoint P2 (or Defender for Business / Defender for Servers), an account that is Owner of the target resource group and holds an Entra role that can assign application roles (Cloud Application Administrator or Global Administrator), and a registered licence file (free, arrives by email; the console also accepts it later). Azure consumption is yours and sized to the estate: up to 2,500 devices run on a B1 plan with serverless Cosmos DB, typically the price of a coffee a day; up to 10,000 on B2; larger estates on Premium v3 with autoscale Cosmos DB. The plan can be resized on any re-run; the Cosmos DB capacity mode is fixed when the account is created.

Verify it is alive

When the installer finishes, the console is at https://shorfall-contoso.azurewebsites.net/app. This page can read the instance's public health endpoint from your browser (nothing else is exposed without sign-in) and confirm the version, the identity mode and the scanner it ships.

Then sign in with a work account from your tenant. The first person to sign in becomes the administrator and sees a getting-started checklist that tracks the remaining steps live: registration, identity roles, scanner in the Live Response library, first inspections, colleagues.

Permissions, and who holds them

All roles are assigned to your web app's managed identity, in your tenant. No Shorfall service principal exists in your directory. Revoke any role under Microsoft Entra > Enterprise applications and access stops immediately.

PermissionStageWhat it readsWhy
Machine.Read.Allread-onlyDevice inventory: names, OS, groups, tags, exposure level, device valueFleet view, targeting, prioritization drivers
AdvancedQuery.Read.Allread-onlyAdvanced Hunting: software inventory, configuration checks, device-to-device connections, TLS sessionsPassive inventory, the dependency map, consumer verification
Vulnerability.Read.Allread-onlyDefender Vulnerability Management data (certificate inventory when licensed)Passive certificate posture where the tenant has the add-on
Machine.LiveResponseinspections, optionalRuns the published read-only CryptoDiscovery.ps1 on devices you selectDevice-level evidence Defender telemetry does not carry
Machine.ReadWrite.Allinspections, optionalRequired by Microsoft to download Live Response results for an application identityResult retrieval; nothing is written to devices
Library.Manageinspections, optionalLists and uploads files in your Live Response libraryKeeps the published scanner current so inspections run the shipped version. Leave it out with -ManualScannerUpload and upload the scanner yourself

Sign-in: the "Shorfall Console" registration requests only openid profile email. The scanner is read-only by construction: it enumerates and reports, it cannot modify registries, certificates, processes or TLS configuration. Its source and SHA-256 are published on the release feed. With Library.Manage, Shorfall uploads exactly those bytes to your Live Response library and logs each upload in the change feed; without it, you upload the file yourself. Either way every inspection records the hash of what actually ran.

What leaves an endpoint, and what never does

Leaves the endpoint, stays in your Cosmos DB

  • Device names and Defender context
  • Certificate metadata: subject, issuer, algorithm, key size, thumbprint, expiry, store, private-key flag
  • Listener ports and process names
  • TLS protocol, cipher-suite and key-exchange group configuration
  • Crypto library and runtime versions
  • Config file paths that pin certificates (never the values)

Never leaves

  • Private keys or key material
  • File contents
  • Tokens, passwords, user data
  • Anything from your installation to Shorfall the company: no telemetry, no licence check, no update ping

Outbound connections from the web app: login.microsoftonline.com, api.securitycenter.microsoft.com, your Cosmos DB endpoint, and only if you configure them, your ticket system and Azure Communication Services for the weekly digest.

What Shorfall the company sees

What you enter when you register (organisation, work email, tenant ID, optionally the size of the estate), the ordinary access log of this website and of the release feed (which files were downloaded, when, from which address; kept 30 days), and whatever you choose to send us, such as the support bundle. Nothing from inside your installation.

Updates, status, removal

You update when you decide. Each release is a package with a published SHA-256; the updater verifies the digest before deploying and waits for the app to report the new version. Status shows the roles the identity holds, the registration, sign-in callbacks, authentication and health, read-only. Removal lists what it deletes and asks you to type the app name. Run these from the folder that holds the scripts, signed in with az login. Bind a custom domain later? Re-run the installer once: it registers a sign-in callback for every hostname on the web app.

Release feed and notes: releases.json. The console shows its version under Settings; nothing checks for updates on your behalf.

Licensing

Community edition, free

For an organisation running Shorfall in its own tenant for its own estate. No feature caps, no device caps: passive posture, unlimited inspections, programs, verification, tickets, digests, reports and exports. Internal use only, no warranty, community support through the documentation and the support bundle. Registration (organisation, work email, tenant ID) issues the tenant-bound licence by email; the console asks for it on first sign-in.

Service Provider licence, paid

Required to operate Shorfall for other organisations: MSPs, MSSPs, auditors and consultancies. Priced per tenant under management, agreed directly. An optional support subscription is available to any organisation whose procurement requires a support contract.

Licences are tenant-bound files verified offline by the software (no call home). Community licences are issued on registration; request a Service Provider quote through the contact form.