Skip to content

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).

  1. In Secruna, open Connections → Connect Azure. (screenshot placeholder TODO)
  2. You are redirected to login.microsoftonline.com. Sign in as the tenant admin.
  3. Microsoft displays the consent screen with the permissions list below. Review and click Accept. (screenshot placeholder TODO)
  4. You are redirected back to Secruna. The connection appears as active and a passive twin is created automatically.
  5. (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/accounts and /deployments
  • Microsoft.MachineLearningServices/workspaces, /onlineEndpoints, /computes
  • Microsoft.BotService/botServices
  • Microsoft.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

  1. 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.
  2. In Secruna, open Connections and click Disconnect on the Azure row. The associated passive twin is disconnected at the same time.
  3. 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.
  • 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.