Microsoft Purview
Make your tenant's sensitivity labels the data-protection rule on every workbench, ask Purview itself before a prompt leaves, and apply encrypting labels through SharePoint.
Your organisation already says what is Confidential and what is Highly Confidential: in Microsoft Purview, as sensitivity labels on files and mail. Connect AIOE to Purview and those labels become the rule every workbench follows. A labelled file decides where its contents may go, text that carries a label's marking is caught when someone pastes it into a prompt, Purview's own data loss prevention policies can judge a prompt before it goes to a hosted model, and every decision shows up in Purview's Activity explorer beside Copilot's.
Self-hosted only, after Agent 365
AIOE reads Purview as your Agent 365 blueprint, so connect Agent 365 first. Mojo Up AI Cloud organisations have no tenant of their own, so the panel is not offered there. Workbenches need AI Workbench 0.52.0 or later.
What you get
| In Purview | What AIOE does |
|---|---|
| Sensitivity labels | Read every hour with each label's markings (the header, footer and watermark text it stamps) and published to every workbench. A label on a file (Office, PDF, the Windows information-protection stream) decides whether its contents may reach a hosted model; marked text pasted into a prompt counts as that label. |
| Your order of labels | Each label's sensitivity (Public, Internal, Confidential, Restricted) starts from its place in your tenant's order. You change any one where your organisation sees it differently, add a partner tenant's label by hand, and write rules that allow, ask or block by label or sensitivity. |
| DLP policies for AI apps | With Ask Purview itself on, a workbench asks before a prompt goes to a hosted model whether the person is in scope and what Purview makes of the prompt. Block stops it, warn tells the person. AIOE never keeps the text. |
| Activity explorer and DSPM for AI | Every label and data-protection decision a machine reports is sent to Purview as content activity: the action, the label, the person, never the content. |
| Labels that encrypt | A label that encrypts cannot be applied on a machine. With the SharePoint route on, the workbench sends the file to AIOE, which puts it in a library you choose, applies the label, reads the protected file back and hands it over. Both copies are gone minutes later unless you keep the SharePoint one. |
Set it up
Grant the permissions
Microsoft refuses an agent blueprint some of these calls, so AIOE calls as the blueprint where it may and as the AIOE API application otherwise. Grant the first four to both, and the file permission to the AIOE API application only.
| Permission | On | For |
|---|---|---|
InformationProtectionPolicy.Read.All | the blueprint and the AIOE API application | reading the labels and their markings |
ProtectionScopes.Compute.User | the blueprint and the AIOE API application | whether a person's prompts are in scope of a DLP policy |
Content.Process.User | the blueprint and the AIOE API application | Purview's verdict on a prompt |
ContentActivity.Write | the blueprint and the AIOE API application | reporting activity |
Files.ReadWrite.All | the AIOE API application | the SharePoint route (Microsoft meters this call); Sites.Selected with write on the chosen site does instead |
Assign each role straight to the application's service principal, which needs no consent step:
GRAPH_SP=$(az ad sp show --id 00000003-0000-0000-c000-000000000000 --query id -o tsv)
az rest --method POST \
--url "https://graph.microsoft.com/v1.0/servicePrincipals/<service principal id>/appRoleAssignments" \
--body "{\"principalId\":\"<service principal id>\",\"resourceId\":\"$GRAPH_SP\",\"appRoleId\":\"<role id>\"}"The panel names the AIOE API application. Its consent link only helps when the blueprint's registration declares the permissions, which it usually does not; then it fails with AADSTS1003031 and the command is the way.
Connect
Open Settings, Microsoft Purview, and Connect. AIOE proves the connection by reading your labels. A refusal names the missing permission and keeps nothing.
Map the labels
Each label shows its markings, whether it encrypts, and a sensitivity marked "by order" until you choose one. Change the ones your organisation sees differently; the mapping survives re-reads. Say what an unknown label and another tenant's label count as (Confidential and Restricted by default).
Choose what more Purview does
Add rules (label:Highly Confidential or sensitivity:restricted, then allow, ask or block). Turn on Ask Purview itself for prompts, or for prompts and agent requests, once the DLP policy below exists; tick Stop the prompt when Purview cannot answer if you want it closed by default. Under The local model, choose whether the workbench's local model still runs after Purview, or Purview instead, so workbenches need no local model for data protection (Enterprise only). Choosing Purview instead also checks agents' own requests, since Purview is then their only judge. Turn on the SharePoint route and set a site; AIOE creates the folder in the site's default library.
The DLP policy for Ask Purview itself
The Purview portal cannot make a DLP policy for an app like AI Workbench: policies made there cover Microsoft 365 only. Make it in PowerShell, on Windows or with PowerShell 7, scoped to the blueprint's application id:
Install-Module ExchangeOnlineManagement -Scope CurrentUser
Connect-IPPSSession -UserPrincipalName <your admin UPN>
$blueprint = "<blueprint application id>"
$apiApp = "<AIOE API application id>"
$loc = { param($id, $name) "{`"Workload`":`"Applications`",`"Location`":`"$id`",`"LocationDisplayName`":`"$name`",`"LocationSource`":`"Entra`",`"LocationType`":`"Individual`",`"Inclusions`":[{`"Type`":`"Tenant`",`"Identity`":`"All`"}]}" }
$locations = "[" + (& $loc $blueprint "Mojo Up AI Workbench") + "," + (& $loc $apiApp "Mojo Up AI Workbench (AIOE API)") + "]"
New-DlpCompliancePolicy -Name "AI Workbench prompts" -Mode Enable -Locations $locations -EnforcementPlanes @("Application")
New-DlpComplianceRule -Name "Block credentials in prompts" -Policy "AI Workbench prompts" `
-ContentContainsSensitiveInformation @{Name = "All Credential Types"} `
-RestrictAccess @(@{setting = "UploadText"; value = "Block"}) -GenerateAlert $trueName both applications: Purview matches a policy against the application that calls it, and AIOE calls as the blueprint where Microsoft allows it and as the AIOE API application otherwise (Try a prompt says which). To replace a policy made with one location, run Remove-DlpCompliancePolicy -Identity "AI Workbench prompts" and create it again with both.
Keep -Mode Enable: a policy in test mode answers allow. To check the policy before any workbench is involved, use Try a prompt under Ask Purview itself: paste a fake credential, and the panel says whether your prompts are in scope of a policy, Purview's verdict and which policy matched. Nothing you type there is kept. These verdicts are billed on Purview pay-as-you-go, which a Global Administrator turns on once in the Purview portal (the rocket icon, Get Started, then a subscription and resource group). A new policy takes up to an hour to apply. To keep the prompts and the activity AIOE reports for Activity explorer, Insider Risk and eDiscovery, select Secure interactions from enterprise apps in DSPM for AI.
The SharePoint route's billing
Microsoft meters applying a label to a file. Link the AIOE API application to an Azure subscription in the same tenant once:
az provider register --namespace Microsoft.GraphServices # wait until it shows Registered
az rest --method PUT \
--url "https://management.azure.com/subscriptions/<subscription>/resourceGroups/<group>/providers/Microsoft.GraphServices/accounts/aioe-graph-billing?api-version=2023-04-13" \
--body '{"location":"global","properties":{"appId":"<AIOE API application id>"}}'Until it exists, a job ends with "billing required".
What a person sees
On a workbench, a file under a label the policy keeps home is read by local models only, and a hosted request that would carry it is held, redacted or refused as the mapping says. Pasted text that carries a marking is treated as that label. When Purview blocks a prompt, the person sees Purview's own policy tip. For a label that encrypts, the workbench offers to apply it through SharePoint and shows the job's progress.
Disconnecting
Disconnect forgets the connection; the next policy refresh takes the labels off every workbench. Partner labels and mappings are forgotten with it.
Related
-
Microsoft setup commands: every command, in order, with the role ids filled in.
-
Microsoft Agent 365: the blueprint AIOE reads Purview as.
-
Policy: the data-protection section the labels land in.
-
Audit: every connect, mapping, location and applied label is a
purview.*entry.
Microsoft 365 Copilot
Let Copilot Studio agents hand questions and tasks to your organisation's specialists and teams, as the person asking.
Microsoft setup commands
Every command to run in your Microsoft tenant for Agent 365, Microsoft 365 grounding, Purview and Sentinel, in order, with the role ids filled in.