MediumModule packFree

Least Privileged MSGraph

Checks that service principals hold only the Microsoft Graph permissions their real API activity needs, using Microsoft Graph activity logs in Log Analytics.

Version
1.0.0
Tests
5
Connectors
0
Published
25 Oct 2026

Mynster9361 · mynster9361.least-privileged-msgraph · 0 stars · Open source · MIT

PowerShell
Install-MtPack Mynster9361/maester-pack-lpms

Install only packs from sources you trust. This pack is made by Mynster9361, not by Maester. The site only indexes and scans it: Install-MtPack downloads it straight from github.com/Mynster9361/maester-pack-lpms.

maester-packs.lock.json entry
{  "Id": "mynster9361.least-privileged-msgraph",  "Source": "Mynster9361/maester-pack-lpms",  "Version": "1.0.0",  "Commit": "6868b8a6e047c88c80b24c3d1d3c40809a402d31",  "Digest": "sha256:aec769ec4373f32d3ab1bac69ba47d228a4f9192788af1d8c087b006af852a36"}

← All tests

MP.LPMS.1003 Service principals are not throttled at Warning or Critical level by Microsoft Graph

Severity: LowAzure

Checks that no service principal is experiencing Warning-level (10-25%) or Critical-level (>25%) Microsoft Graph API throttling during the analysis window.

Graph API throttling occurs when an application exceeds the per-tenant or per-app request rate limits enforced by Microsoft. When a service principal is throttled, the Microsoft Graph service returns HTTP 429 (Too Many Requests), which causes failures and degraded performance for users.

Persistent or high throttle rates may indicate:

  • Polling loops — the application is continuously querying the same endpoint instead of using change notifications (delta queries or webhooks).
  • Missing batching — the application makes individual API calls instead of using the $batch endpoint.
  • Missing retry logic — the application retries immediately on 429 instead of honouring the Retry-After header.
  • Unintended runaway jobs — a scheduled task or background worker that is executing more frequently than intended.

Remediation action

For each throttled application listed below:

  1. Review the application owner and determine whether the throttle rate is expected (e.g., an intentional bulk-data migration job).
  2. If unexpected, inspect the application's Graph API call patterns using the Log Analytics MicrosoftGraphActivityLogs table.
  3. Implement the following optimisations where applicable:
    • Use delta queries or change notifications instead of polling.
    • Use the $batch endpoint to combine multiple requests.
    • Implement exponential back-off with Retry-After header support.
    • Cache frequently read data locally to reduce repeated Graph API calls.

Related links

%TestResult%