Skip to content

Reference

Troubleshooting

Look up the error code you are staring at. Each row names the cause and the one thing that fixes it.

Three families of failure exist, and they are worth telling apart before you start debugging: the service principal cannot reach Azure, a person cannot sign in to the app, or both work and the data is wrong. They have no causes in common.

These come back from Azure, either to the setup wizard or to your own az commands.

CodeCauseFix
AuthorizationFailedThe role is missing at the scope you called, or it was assigned in the last few minutes and Azure has not propagated it yetConfirm the assignment, then wait up to ten minutes and retry. Propagation delay reads exactly like a missing role, and most first attempts are the delay
AADSTS53003, or another AADSTS code on the service principalA workload-identity Conditional Access policy is blocking infralign-readerAsk Infralign for the ingestion runtime’s egress IPs and scope the policy by named location. Excluding the identity outright also works and is the weaker answer: it drops your own control rather than narrowing it
HTTP 403 on generateCostDetailsReportThe subscription has Reader but not Cost Management Reader. The cost report is a POST action, and Reader does not cover actionsAssign Cost Management Reader at the same scope
AuthorizationPermissionMismatch on a storage commandThe identity running the command holds a control-plane role only. Container and SAS operations need data-plane rightsGrant yourself Storage Blob Data Contributor, or use the account keys. See FOCUS exports
Microsoft.ResourceGraph/resources/read named in a failureReader is missing on that subscriptionAssign Reader at management group or subscription scope

Both roles, their scopes, and a least-privilege alternative are in permissions. To reproduce any of these by hand and keep the output for a change record, use the az CLI validation runbook.

These come back to a person opening the app in a browser. Full procedure and screenshots: dashboard sign-in.

Code or screenCauseFix
”This account is not linked to a customer”The address signed in with is not the address on the account. A colleague’s own account on another tenant produces this tooCompare the two addresses first. If they match, email support with the address and your tenant’s directory ID
AADSTS65001 or AADSTS90094, admin approval neededYour tenant blocks user consent and the Portal app has not been consented toA Global Administrator opens the consent URL. Most tenants have admin notification switched off, so nobody is told the request exists
AADSTS700016, application not foundAdmin consent was never granted, so the Portal app was never provisioned in your tenantGrant admin consent
AADSTS65004, user declinedSomeone selected Cancel on the consent screenRe-open the consent URL and accept
AADSTS50011, redirect URI mismatchThe reply URL does not match what the app expectsThis one is Infralign’s to fix. Email support
Signed in, then every page returns 403The address is not on the account allowlist, or differs from what their Microsoft account assertsAn admin adds the exact address Microsoft returns, on the People page

Access is working here. Something upstream is missing or late.

SymptomCauseFix
A subscription shows no billed totalCost Management Reader is missing on itAssign the role. The figure appears after the next nightly run, not immediately
Cost is there, inventory and CPU are emptyReader is missing on that subscriptionAssign Reader, then select Re-check the connection
A subscription you expected is on no dashboardIt was left out at the Scope step, created after setup, or has no Reader assignmentTick it on the connection page and save. A subscription created after setup is never added on its own
Fewer subscriptions found than expectedDiscovery cannot see a subscription the service principal cannot readAssign Reader, then re-run discovery from the Scope step
A dashboard reads STALEA source missed its expected landing windowOpen the Data Ops dashboard. Its source-freshness table names the feed and how far behind it is
A chatbot answer disagrees with a dashboard tileUsually a different date filter or cost basis, not a data faultCheck whether one is on billed and the other on effective cost. Cost terms has the distinction
A Monitor probe returns an empty timeseriesThe VM is stopped or has no samples in the windowValid output. Point the probe at a running VM
An Advisor query returns nothing, with HTTP 200Advisor has generated no recommendations for that subscription yetValid output. The probe still proves read access

Cost data typically trails real time by a day, and FOCUS by up to a month. Both are by design. Reading the freshness banner gives the expected window per lane, which is what turns “late” into “stale”.

Support lists what to send, per kind of problem. The error code and the subscription ID save a round trip.