Azure connector¶
What this connector reads¶
The Azure connector enumerates the AI workloads provisioned in your Azure subscriptions: Cognitive Services accounts (including Azure OpenAI deployments), Machine Learning workspaces and online endpoints, Bot Service bots, and Azure AI Search services. We see their names, regions, kinds, SKUs, and tags — the same information visible in the Azure Portal "Resources" blade. We never read the prompts or completions that flow through these services.
A passive twin (passive-azure) is created automatically alongside
the active connection. It reads the Azure Activity Log for the
same AI resource providers over a 90-day lookback, picking up
shadow-AI signals like a developer spinning up a Cognitive Services
account in a sandbox subscription that nobody told the central IT
team about.
What you (the customer) need to do¶
You will need a global administrator in your Microsoft Entra ID tenant (a non-admin can start the flow but Microsoft will block the final consent step).
- In Secruna, open Connections → Connect Azure. (screenshot placeholder TODO)
- You are redirected to
login.microsoftonline.com. Sign in as the tenant admin. - Microsoft displays the consent screen with the permissions list below. Review and click Accept. (screenshot placeholder TODO)
- You are redirected back to Secruna. The connection appears as
activeand a passive twin is created automatically. - (Optional but recommended) In the Azure Portal, scope our service principal down to read-only on the subscriptions you actually want covered. By default, admin consent grants us read against every subscription the consenting admin can see.
The first discovery run starts within a few minutes and typically completes in under five minutes for environments with up to a few hundred AI resources.
Permissions / scopes requested¶
| Scope | Why we need it |
|---|---|
https://management.azure.com/user_impersonation |
Lets us call Azure Resource Graph to list resources of the AI types listed below across the subscriptions the consenting admin has access to. This is the same scope az CLI uses; it is read-write in principle but we only invoke read endpoints (Microsoft.ResourceGraph/resources, Microsoft.Insights/eventtypes/values). |
The active connector queries Azure Resource Graph for these resource types only:
Microsoft.CognitiveServices/accountsand/deploymentsMicrosoft.MachineLearningServices/workspaces,/onlineEndpoints,/computesMicrosoft.BotService/botServicesMicrosoft.Search/searchServices
The passive collector calls
Microsoft.Insights/eventtypes/management/values (Activity Log)
filtered to the same four resource providers. Lookback window is
90 days.
What we do NOT touch¶
- Other resource types in your subscriptions. We do not list storage accounts, virtual machines, Key Vaults, databases, or any non-AI workload.
- Resource contents. We do not read blob contents in storage, data in databases, secrets in Key Vault, or model weights in Azure ML.
- Prompts, completions, or training data flowing through Azure OpenAI or any Cognitive Service.
- Diagnostic Settings or workspace contents in Log Analytics. The passive collector reads the Activity Log via ARM, not the Log Analytics workspace.
- Microsoft Entra ID directory data. We never enumerate users or groups in your tenant.
How to revoke access¶
- In Microsoft Entra admin center → Enterprise applications, find Secruna (search by name or by the app id we provide you on contract). Click Properties → Delete, or Permissions → Review permissions → I want to remove user consent for this application.
- In Secruna, open Connections and click Disconnect on the Azure row. The associated passive twin is disconnected at the same time.
- Within 90 days every artefact collected through this connection is purged. See data retention policy.
Revocation step 1 is sufficient on its own — once your tenant revokes consent we cannot mint new access tokens. Step 2 simply keeps your Secruna UI in sync.
Troubleshooting¶
| Error you see | Likely cause | Fix |
|---|---|---|
AADSTS65001: The user or administrator has not consented |
Non-admin tried to consent for the tenant. | Have a tenant-level admin click the Connect button instead. |
AADSTS50020: The user account ... does not exist in tenant |
You signed in with a personal Microsoft account or an account from a different tenant. | Sign out of all Microsoft sessions in the browser, retry, sign in with the right tenant identity. |
Connection shows active but discovery returns 0 resources |
The consenting admin had no Reader access on any subscription. | Grant the Secruna enterprise app Reader at the management group or subscription level. |
Passive twin's last_run reports last_error.code = "ARM_403" |
Activity Log is scoped tighter than ARM read in your tenant — uncommon but seen in heavily-locked-down environments. | Grant Microsoft.Insights/eventtypes/values/read on the subscriptions you want covered. |
| Connection silently expires after 90 days | The OAuth refresh token expired without a renewal scan. | Reconnect through the same flow; we will refresh the token. We page our on-call when this happens, but we still recommend you bookmark Connections and check after major Entra changes. |
Related pages¶
- Subprocessor list — Microsoft Azure is our hosting subprocessor; for your Azure subscription the data flows are controller-controlled (you grant, you revoke).
- DPA template — see Annex II for the exact metadata categories produced by this connector.