Series:This is Part 5 of 7 in my series on Microsoft Purview Insider Risk Management. New to the series? Start with the series guide, which summarises every part.
In Part 4 we built a policy that spots people taking data before they leave. On its own, that policy raises alerts – and then waits for a person to act. Adaptive Protection removes the wait. It turns each person’s insider risk into a level, and lets your other security controls tighten automatically for the few people who are genuinely risky, while everyone else carries on as normal.
This is the feature that turns Insider Risk Management from a reporting tool into protection. In this part I explain how it works in plain English, what quick setup creates for you, and how to roll it out without upsetting anyone.
What Adaptive Protection does
Most security controls treat everyone the same. A data loss prevention (DLP) rule that blocks copying to USB blocks it for the whole organisation, which frustrates the many to stop the few. So most organisations set their rules loosely – and the risky few get through.
Adaptive Protection fixes that. Insider Risk Management watches behaviour and gives each person a risk level. Other controls then read that level and act on it:
Data loss prevention – stricter rules for higher-risk people only.
Conditional Access – block or restrict sign-in for higher-risk people (covered in Part 7).
Data lifecycle management – keep copies of anything a high-risk person deletes.
Levels go up and down automatically as behaviour changes. Nobody has to remember to add someone to a “watch list” or take them off it again.
The three risk levels
Adaptive Protection uses three levels. Microsoft provides built-in definitions, which you can change:
Level
Built-in definition (simplified)
Typical response
Elevated
High-severity alerts, several high-severity sequences of risky activity, or a confirmed high-severity alert
Block
Moderate
Medium-severity alerts, or at least two high-severity data exfiltration activities
Warn, record, or require extra steps
Minor
Low-severity alerts, or at least one high-severity data exfiltration activity
Record only
Do not confuse the two: Alert severity (Low, Medium, High) helps analysts decide which alert to look at first. Insider risk levels (Minor, Moderate, Elevated) are what drive automatic protection. They are related, but they are not the same thing.
How long a level lasts
Risk level timeframe: a level lasts 7 days by default (you can choose between 5 and 30). If the person keeps meeting the criteria, it is extended.
Past activity detection: how far back Adaptive Protection looks at activity when assigning a level – also 7 days by default, between 5 and 30.
Automatic expiry: on by default. When the related alert is dismissed or the case is closed, the level is removed.
Manual reset: an investigator can expire a person’s level at any time under Adaptive Protection > Users assigned insider risk levels. Alerts and cases are kept.
Quick setup or custom setup?
Quick setup is the fastest way to start and needs no existing policies. It creates everything for you in a safe, test-only state:
What it creates
What it does
Starts as
Insider risk policy
Adaptive Protection policy based on the Data leaks template, covering all users
Active
DLP policy for laptops (Endpoint DLP)
Elevated: blocks USB copies, printing, uploads to unapproved cloud sites and more. Moderate and Minor: recorded only
Simulation (test mode)
DLP policy for Teams and Exchange
Elevated: blocks sharing sensitive content with people outside the organisation. Moderate and Minor: recorded only
Simulation (test mode)
Conditional Access policy
Blocks Elevated people from Office 365 apps
Report-only
Data lifecycle policy
Keeps deleted SharePoint, OneDrive and Exchange content from Elevated people for 120 days
Active
Quick setup can take up to 72 hours to finish, and you get an email when it is done. Do not turn Adaptive Protection off while it is still setting up.
Custom setup suits organisations that already have insider risk and DLP policies. You choose the insider risk policy, define the three levels yourself, add the risk level condition to your existing DLP and Conditional Access policies, then switch Adaptive Protection on. Results can take up to 36 hours to appear.
How DLP uses the risk level
Once Adaptive Protection is on, DLP policies gain a new condition: “Insider risk level for Adaptive Protection is”. You choose one, two or all three levels, then choose what happens. It works in DLP policies for Exchange email, Teams and devices (company laptops).
The pattern Microsoft uses in quick setup is a good starting point:
Where
Elevated
Moderate and Minor
Laptops
Block copying to USB and network shares, printing, copying to the clipboard, uploads to unapproved cloud sites and use by unapproved apps
Record the same activities, without blocking
Email and Teams
Block or encrypt sensitive content shared with people outside the organisation
Record external sharing, without blocking
For laptops: Adaptive Protection on devices needs either Advanced classification scanning and protection switched on, or the “File type is” condition in your DLP rule. If someone is covered by both an Adaptive Protection policy and another device DLP policy, the strictest one wins.
Who needs which role
Task
Role
Set up Adaptive Protection
Insider Risk Management or Insider Risk Management Admins
Edit DLP policies that use the risk level
Compliance Administrator, Compliance Data Administrator or DLP Compliance Management
Edit Conditional Access policies that use the risk level
Conditional Access Administrator or Security Administrator
See who has which risk level
Insider Risk Management, Analysts or Investigators – ideally your compliance officers through PIM, as described in Part 1
Rolling it out safely
Run quick setup and wait for the completion email.
Leave everything in simulation for two to four weeks. Review which people reach each level and what the DLP policies would have blocked.
Check for surprises. Are the right people reaching Elevated? Would any legitimate work have been blocked? Adjust the level definitions if needed.
Turn on blocking for Elevated only. Leave Moderate and Minor recording only.
Tell people. Your IT acceptable use policy and privacy notice should explain that controls can tighten automatically when risky activity is detected – see Part 6.
Review regularly. Look at who is assigned a level each week, and use manual expiry when an investigation clears someone.
Switching it off
If you ever need to, turn Adaptive Protection off in its settings. Levels stop being assigned and are reset within about six hours. Your insider risk, DLP, Conditional Access and data lifecycle policies are not deleted – they simply stop receiving risk levels.
Final thoughts
Adaptive Protection is where the investment in Insider Risk Management pays back. Instead of choosing between rules that are too strict for everyone or too loose to matter, you get strict rules for the few who need them and freedom for everyone else – automatically.
In Part 6 I tackle the question every data protection officer asks: is this something we are obliged to do?
Series:This is Part 6 of 7 in my series on Microsoft Purview Insider Risk Management. New to the series? Start with the series guide, which summarises every part.
This is the question security leaders and data protection officers ask me most: is insider risk management something we have to do by law, or is it just a service Microsoft provides?
The short answer
No law names it. No Irish or EU law says you must use Microsoft Purview Insider Risk Management, or any particular product. It is a Microsoft service.
But the results it delivers are expected. The main rules and standards – GDPR, NIS2, DORA and ISO 27001 – all expect you to stop data leaking out, manage the security risk of people joining and leaving, and spot unusual activity. At the same time, data protection law sets strict rules on how you monitor employees. Insider Risk Management sits between those two pressures: protecting personal data, while respecting the privacy of the people who handle it.
Important: I am a security architect, not a lawyer. This section explains how the frameworks relate to Insider Risk Management. Get advice from your DPO and legal team on your own obligations.
What the laws and standards expect
Law or standard
What it expects
How Insider Risk Management helps
GDPR Article 32 (security of personal data)
Suitable technical and organisational measures to protect personal data, including from being shared without permission. Pseudonymisation is named as an example.
Spots insiders moving personal data out, and hides the identities of the people it monitors.
GDPR Articles 33 and 34 (breach reporting)
Tell the Data Protection Commission within 72 hours of becoming aware of a personal data breach, and tell the people affected if the risk to them is high.
Alerts and timelines tell you a breach has happened and show what left, when and how.
NIS2 Article 21(2)(i) (EU cybersecurity law)
Security around staff, control over who can access what, and managing company assets. Management boards are held accountable.
Links HR events such as resignations to data activity, and adjusts access automatically for risky people.
DORA (EU law for banks, insurers and other financial firms)
Managing IT risk, including quickly spotting unusual activity. Applies from January 2025.
Spots unusual behaviour and sends alerts to the security team.
ISO/IEC 27001:2022 (international security standard)
Controls 6.5 (security when people leave or change role), 8.12 (preventing data leaks) and 8.16 (monitoring for unusual activity).
Evidence for all three controls when auditors ask.
NIST SP 800-53 PM-12 (US government security standard)
An insider threat programme – one of the few standards that asks for one by name. Relevant if you supply the US government.
Provides the technology at the heart of an insider threat programme.
NIS2 in Ireland: NIS2 is an EU cybersecurity law that Ireland has not yet written into Irish law. A draft outline of the National Cyber Security Bill was published in August 2024, and in July 2026 the European Commission took Ireland to the EU Court of Justice over the delay. The National Cyber Security Centre is set to be the main regulator. The obligations are coming, and organisations it will apply to should be preparing now.
The PII gap
PII stands for personally identifiable information – anything that identifies a person, such as a name, address or PPS number. Most Purview projects focus on protecting that data directly: finding it, labelling it and stopping it leaving with DLP. That protects the data. It does not tell you when a trusted person, who is allowed to see that data, starts behaving in a way that puts it at risk. That is the gap Insider Risk Management fills.
But there is a second side to the gap. Monitoring employees means collecting information about them, which is itself covered by data protection law. The Data Protection Commission’s 2023 guidance for employers makes four points clear. Workplace monitoring must be open and proportionate – no more than is needed. Employers will find it hard to justify monitoring simply because it is in their business interest (known as “legitimate interests”). A data protection impact assessment (DPIA) – a written assessment of the privacy risks – is essential before monitoring starts. And secret monitoring should be avoided wherever possible. European court rulings point the same way: employees should be told in advance that monitoring may take place.
This is where Insider Risk Management is genuinely different from a surveillance tool. Its design lines up closely with those principles:
Data protection principle
How Insider Risk Management supports it
Transparency – be open about it
Policies watch activities you can describe to staff in your IT acceptable use policy and privacy notice. Built-in notice templates help you communicate with them.
Proportionality – no more than needed
People are only scored after an event such as a resignation. Policies can be limited to specific groups.
Pseudonymisation – hide identities
On by default. Names are only revealed to authorised investigators.
Limit who can see what
Separate role groups for the people who set it up, review alerts, investigate and audit.
Accountability – keep a record
Every action inside Insider Risk Management is logged, and a dedicated Auditors role group can review that log.
Purpose limitation – only use it for the stated reason
Each policy template has one clear purpose – data theft, data leaks, security breaches or risky AI use.
No secret monitoring by default
It uses activity that is already recorded, such as audit logs. It does not record keystrokes. Forensic evidence (screen recording) is optional and needs approval – treat it with particular care in your DPIA.
What you need to do
Complete a DPIA before switching on Insider Risk Management, and update it when you add new policies or features.
Write down your legal basis – the legal reason you are allowed to do this – and, if it is legitimate interests, show how you weighed your needs against employees’ privacy.
Update your IT acceptable use policy and employee privacy notice so staff know what activity may be monitored and why.
Involve HR, legal, the DPO and employee representatives early. The HR connector makes HR a stakeholder anyway.
Keep pseudonymisation on and keep the Investigators role group small.
Set retention for alerts and cases in line with your records policy.
Link it to the standards you follow – for example ISO 27001 controls 6.5, 8.12 and 8.16, NIS2 Article 21 and DORA – so the evidence is ready when auditors ask.
My view
No regulator will ask you whether you have switched on Insider Risk Management by name. But every standard above expects you to spot and deal with the risk it covers, and data protection law expects you to do it fairly and proportionately. Few tools do both as well.
And here is the uncomfortable question: after a departing employee walks out with a customer database, how do you explain to the Data Protection Commission that the control designed to catch it was already licensed, already paid for – and switched off?
Series:This is Part 7 of 7 in my series on Microsoft Purview Insider Risk Management. New to the series? Start with the series guide, which summarises every part.
This is the final part of the series, and it brings everything together. Insider Risk Management spots risky behaviour. Adaptive Protection turns it into a risk level. In this part, that risk level reaches the front door – sign-in – and an AI assistant helps your compliance team deal with the alerts.
Part A: Insider risk in Conditional Access
Conditional Access is the set of rules in Microsoft Entra ID that decides who can sign in to what, from where and on which device. Most organisations already use it – for example, to require multi-factor authentication. Since July 2024, it can also use a person’s insider risk level as a condition.
That means the same risk level that tightens DLP in Part 5 can also block or restrict someone’s access to Microsoft 365 apps. You need Microsoft Entra ID P2, which is included in E5, and Adaptive Protection switched on.
What Microsoft recommends for each level
Level
Recommended Conditional Access response
Effect on the person
Elevated
Block sign-in to Microsoft 365 apps, block access to specific labelled SharePoint sites, or block downloads from cloud apps
Cannot reach the data at all
Moderate
Require them to accept Terms of Use when signing in to admin portals
A reminder of their obligations, with no loss of access
Minor
Run a policy in report-only mode
None – you just gain visibility
The Copilot angle: Blocking an Elevated person from specific labelled SharePoint sites also stops Microsoft 365 Copilot generating answers from those sites for them. A risky person cannot use Copilot as a back door to sensitive content.
Creating the block policy for Elevated risk
If you ran Adaptive Protection quick setup in Part 5, a policy called “1-Block access for users with Insider Risk” already exists in report-only mode. To create one yourself, sign in to the Microsoft Entra admin center as at least a Conditional Access Administrator and:
Go to Entra ID > Conditional Access > Policies and select New policy.
Users: include All users. Exclude your emergency access (break-glass) accounts and guest or external user types.
Target resources: include All resources.
Conditions: select Insider risk, set Configure to Yes, and tick Elevated.
Grant: select Block access.
Enable policy: set it to Report-only and select Create.
Review the report-only results for a few weeks, then switch the policy to On.
Never skip report-only: Blocking sign-in is the strongest action in this series. Run it in report-only first, check exactly who would have been blocked, and always exclude your emergency access accounts so a mistake cannot lock everyone out.
Part B: The Data Security Triage Agent
Every insider risk policy produces alerts, and someone has to look at them. On a busy day that queue can be long, and the most important alert can sit behind dozens of harmless ones. The Triage Agent is an AI assistant, built on Security Copilot, that reads each alert first and sorts the queue so your compliance team starts with what matters.
It does not investigate, decide or take action. It sorts and explains. A person still makes every decision.
How it sorts alerts
Category
What it means
Needs attention
The alerts the agent judged highest risk. Start here.
Less urgent
Lower-risk alerts to review when you have capacity.
Not categorized
Alerts the agent could not assess – for example, unsupported activity or an error. These still need a person to look at them.
For each alert, it weighs up the person (for example, whether they are a priority user and how many cases they already have open), the activity (how likely it is to be data leaving the organisation) and the content involved, and writes a short plain-English explanation of its decision.
How it runs and what it costs
Scope: you choose which insider risk policies it covers, and whether it looks only at new alerts or also at alerts from up to 30 days back.
Schedule: it can run automatically on a schedule, or an analyst can run it on one alert at a time.
Cost: each alert it processes uses Security Compute Units (SCUs). Microsoft 365 E5 includes 400 SCUs a month for every 1,000 users, up to 10,000 a month – see Part 3.
Feedback: analysts can give feedback on its decisions, which it takes into account when it triages future alerts.
Getting started well
Tune noisy policies first. The agent sorts what your policies produce – and every alert costs credits.
Start with new alerts only, then widen the lookback once you trust the results.
Compare for two weeks. Have your compliance team triage as normal and compare their view with the agent’s.
Check Not categorized every day. Those alerts have not been assessed by anyone yet.
Watch your SCU usage in Security Copilot, so the monthly allowance is not used up by one noisy policy.
The people reviewing the sorted queue need the same Insider Risk Management roles as before – Analysts or Investigators, through PIM. Setting up the agent needs additional Purview agent and Security Copilot roles.
Bringing it full circle
Over seven parts, we have gone from a licence sitting on the shelf to a joined-up system:
Insider Risk Management spots risky behaviour, starting with people who are leaving.
Adaptive Protection turns that behaviour into a risk level.
DLP and Conditional Access tighten automatically for the few who need it.
The Triage Agent helps your compliance team deal with the alerts.
Compliance officers, not IT, own the process, with access controlled through PIM.
And all of it is included in the Microsoft 365 E5 licence many organisations already pay for.
Final thoughts
If you take one thing from this series, make it this: if you have E5 and no insider risk policies, you are paying for protection you are not using. Start small – one departing users policy, a few compliance officers, quick setup in simulation – and build from there. The scripts and KQL queries from Part 4 will help you prove it works.
Thank you for following the series. If you have questions or want to talk about your own deployment, get in touch through cloud-secure.ai.
What can DLP protect if nothing has been classified?
Very little. A DLP policy is only as good as the sensitive information types and labels behind it. If Contoso has never defined what its sensitive data looks like, DLP has nothing to look for.
Out of the box, Purview DLP recognises what Microsoft has already classified for every tenant: credit card numbers, PPSNs, IBANs, passport numbers, credentials. Useful, but none of it is Contoso’s. Not one built-in SIT knows what a Contoso project code, design specification, customer list or product roadmap looks like. Without classification, a DLP policy is left with two options:
Match on Microsoft’s built-in types only. Personal and financial data is protected; Contoso’s intellectual property walks straight past every rule.
Fall back on context alone. Block every attachment to an external domain, every upload to an AI app, every file copied to USB. That stops IP, and it stops the business with it. Users find a workaround within a week, and the policy is rolled back to audit within a month.
Blind or blunt: the policy either misses what matters or blocks everything. Classification is what gives it a third option – block what is sensitive and let everything else through.
The same applies to every control I have written about this month. I have blocked unsanctioned MCP servers, inspected traffic to AI apps, governed agents in Agent 365 and stopped credentials leaking from Exchange and Teams. Each of those posts answers the question where is this data allowed to go? None of them can answer the question that has to come first: what is this data? A network indicator blocks a destination whatever is sent to it. A Copilot policy can only exclude content that carries a label. Inline DLP can only block a prompt that matches a SIT.
The credentials post came closest to saying this. It works because Microsoft has already done the classification for you: the All Credential Types SIT ships ready-made, so the policy simply has to be switched on. Intellectual property gets no such head start.
This post covers the classification methods Microsoft Purview offers, the different types of DLP that act on them, where you can find sensitive data already sitting at rest, and how to put it all together around the asset that is hardest to protect and most damaging to lose: Contoso’s intellectual property.
Key terms
If you are new to Purview, these are the terms the rest of the post relies on:
DLP (data loss prevention) – policies that detect sensitive content and audit, warn or block when someone tries to move it.
SIT (sensitive information type) – a pattern Purview recognises, such as a credit card number: usually a regular expression (regex) plus supporting keywords.
Confidence level – how sure Purview is that a SIT match is real: Low (65), Medium (75) or High (85). More supporting evidence means higher confidence.
Proximity – how close, in characters, a supporting keyword must be to the pattern to count as evidence.
Sensitivity label – a tag such as Highly Confidential written into a file or email, which can also encrypt it.
EDM (exact data match) – matching on the actual values in your own data, such as real customer account numbers, rather than on a pattern.
Document fingerprint – a SIT built from a blank form or template, which matches any document written on it.
Trainable classifier – a machine learning model that recognises a type of document, such as source code or a patent.
Inline DLP – DLP applied to web traffic as it leaves, either inside Edge for Business or at the network through Global Secure Access (GSA), Microsoft’s cloud network security service.
MCP server – a service an AI agent connects to for extra tools or data.
Why the earlier controls worked
It is worth looking back at why the earlier posts produced clean blocks, because the answer is classification every time.
Post
What made it work
What it cannot see without classification
Stopping leaked credentials
Microsoft ships the All Credential Types SIT, with checksums and patterns already built
Anything that is not a credential
Entra Internet Access inline DLP
A custom SIT for Contoso project references, imported before the policy was built, with a supporting keyword required within 300 characters for a High confidence match
A design document or roadmap that contains no project reference
Parts 4 and 5: MCP server blocking
Defender indicators block the destination outright
What the agent sends to an approved server
Part 6: Agent 365 governance
Approval, ownership and Conditional Access for agents
Which content an approved agent can ground on
The pattern is clear. Destination controls are binary: a server is allowed or it is not. Once a destination is approved, whether that is a sanctioned MCP server, Copilot or an external partner, the only thing that can stop the wrong content reaching it is a control that knows what the content is.
Why intellectual property is the hard case
Most DLP deployments start with personal and financial data because it is easy. A credit card number has a checksum. A PPSN has a fixed format. Microsoft ships hundreds of SITs for these, and a policy can be live in an afternoon.
Intellectual property has none of that. There is no built-in SIT for Contoso’s product roadmap, a formulation, a tender response or the code behind Contoso’s custom-developed pricing application. IP is defined by what a document is and who it belongs to, not by a pattern inside it. That makes it the case where classification matters most, and the one most organisations never get to.
Contoso’s crown jewels
Before choosing a classification method, list what actually needs protecting. For Contoso, whose flagship R&D programme – codename Project Halcyon – is the running example in this post:
IP asset
What it looks like
Best classification method
Project and product codes
CONTOSO-FIN-204815-K in specs, emails and chats
Custom SIT (regex and keywords)
Patent drafts and design specifications
Written on a standard Contoso template
Document fingerprinting
Custom-developed applications
The source code, scripts and configuration behind Contoso’s in-house apps, in any language
Pretrained Source Code classifier
Customer and supplier lists
Real names and account numbers from the CRM
Exact data match (EDM)
Strategy, M&A and roadmaps
Free-form documents and slide decks
Pretrained or custom trainable classifier, plus a manual label
Everything on the Engineering site
Whatever the team saves there
Default sensitivity label on the site library
No single method covers the list. That is the point of this post: IP protection is built from several classification methods layered together, then enforced by several types of DLP.
Key risks of losing Contoso’s intellectual property
Scenario
What could happen
Risk level
The departing engineer
Design files and the code of Contoso’s custom-developed apps copied to USB or a personal cloud account in the weeks before a resignation.
โ Critical
Pasted into an AI app
A roadmap or specification pasted into a consumer AI tool to summarise it, where it may be retained or used for training.
โ Critical
Sent to an AI agent’s tools
A coding agent passes the code of a custom-developed Contoso app to an approved MCP server, which logs it.
โ High
Oversharing through Copilot
Copilot grounds an answer on an M&A document a user could technically open but should never have seen.
โ High
External sharing
A patent draft emailed to an external partner before filing, or shared through an “anyone” link.
โ Critical
Loss of trade secret status
Information only qualifies as a trade secret where reasonable steps were taken to keep it secret. Unclassified, unprotected IP weakens that position in any dispute.
โ High
The last row deserves attention. Under the EU Trade Secrets Directive, transposed in Ireland by the European Union (Protection of Trade Secrets) Regulations 2018, information is protected only where its holder took reasonable steps to keep it secret. Classification and DLP are not legal advice, but they are evidence of exactly those steps. Discuss the specifics with your legal team.
Methods of classification
Microsoft Purview classifies content in three ways: manually, by automated pattern matching, and with trainable classifiers. In practice those break down into the methods below.
Method
How it decides
Strong for
Weak for
Manual sensitivity labels
The author decides
Strategy and M&A, where context matters
Consistency at scale
Default labels
Where the file is saved, or who created it
Engineering and R&D sites
Content that leaves that location
Built-in SITs
Microsoft patterns, checksums and keywords
Credentials, PII, financial data
Anything unique to Contoso
Custom SITs
Your own regex and keywords
Project codes, part numbers
IP with no identifier in it
Exact data match
Hashed values from your own source table
Customer lists, product catalogues
Unstructured documents
Document fingerprinting
Similarity to a standard template
Patent and design specification forms
Documents not written on the template
Pretrained classifiers
Machine learning on what the item is
Source code, IP, M&A, business plans
Precision; encrypted items
Custom trainable classifiers
Machine learning trained on your own samples
A document category only Contoso has
Non-English content; quick wins
Rule of thumb: if the IP carries an identifier, use a custom SIT. If it lives in a table, use EDM. If it is written on a standard template, use a fingerprint. If it is none of those, use a trainable classifier. And label anything only a person can judge.
One place to manage all of this.MC1486289 introduces a unified Classification Management experience in the Purview portal. It brings sensitive information types, Exact Data Match, trainable classifiers and document fingerprinting into one view, with search, filters and guidance in the creation flow on which method suits your scenario – the same decision the table above walks through. Public preview began in October 2026, with general availability scheduled from mid to late November 2026. Portal paths in this post may change as it rolls out.
Sensitivity labels: manual, default and automatic
A sensitivity label is the only classification that travels with the file. Every other method detects content each time it is evaluated; a label is written into the file’s metadata, stays with it wherever it goes, and can apply encryption that keeps working outside Contoso entirely.
Manual. The author chooses. Best where only a person can judge sensitivity, such as a board paper or an acquisition target.
Default. A label applied by policy or by a SharePoint document library. Everything saved to the Contoso R&D library is Highly Confidential – Contoso IP unless someone changes it.
Automatic. Client-side auto-labelling recommends or applies a label in the Office apps as a user works. Service-side auto-labelling applies labels to content already at rest in SharePoint, OneDrive and Exchange. Both use the SITs, fingerprints and classifiers described below as conditions.
Labels matter most once content is encrypted. Trainable classifiers only work on items that are not encrypted, so once a label encrypts a file, content-based detection can no longer read it. From that point on, the label is the only thing downstream controls can recognise, which is why label-based DLP conditions are not optional.
Sensitive information types
A SIT is a pattern, usually a regular expression, supported by keywords, checksums and a proximity window, with confidence levels for how much evidence was found. Microsoft ships several hundred. The credentials post used the bundled All Credential Types SIT, and it belongs in any IP policy too: source code and configuration files are where secrets hide.
For Contoso’s own identifiers you write a custom SIT. The project reference SIT used in the inline DLP post is a good model:
\bCONTOSO-[A-Z]{3}-\d{6}-[A-Z]\b
High confidence (85) – the pattern plus a keyword such as “project reference” or “confidential project” within 300 characters.
Medium confidence (75) – the pattern on its own.
The fixed CONTOSO- prefix means it cannot collide with any built-in type, and the next two sections explain why that matters. The New-ContosoSIT.ps1 script in the inline DLP repository builds and imports the rule package in one run, and takes -Prefix and -DisplayName parameters so it can be reused for any client.
A regex is not a SIT
regex101.com is the best place to build the pattern. Paste a candidate regex and a block of sample text and it highlights every match as you type, explains each token in plain English, and lets you keep a set of test strings that should and should not match. For Contoso, that is where you prove \bCONTOSO-[A-Z]{3}-\d{6}-[A-Z]\b matches CONTOSO-FIN-204815-K and rejects a five-digit number, a missing prefix or a reference glued to another word – before it goes anywhere near Purview.
What regex101 cannot tell you is everything else the pattern will match across Exchange, SharePoint, OneDrive and Teams. Purview’s regex engine is not one of regex101’s flavours either, so a pattern that works there still has to be proved in Purview. regex101 proves the pattern; it does not prove the SIT.
A loose pattern such as \d{6} or [A-Z]{3}-\d{6} will happily match phone numbers, dates, order numbers, postcodes and invoice references, and it will overlap with a large share of Microsoft’s built-in SITs, most of which are numeric identifiers. Deploy it in a blocking DLP rule and the service desk will know about it within the hour.
To see how many built-in SITs your tenant has for a new pattern to collide with, run:
What turns a regex into a usable SIT is the evidence around it:
A distinctive primary element. The fixed CONTOSO- prefix rules out almost every accidental match before anything else is checked.
Supporting keywords within a proximity window. “Project reference”, “codename” or “confidential project” within 300 characters is what lifts a match to High confidence. A string that merely looks like a reference stays at Medium.
Confidence levels in the policy. Block on High; use Medium for audit or a policy tip while you tune.
Testing against real content. The Test option on the SIT, fed with samples that should and should not match, is where false positives show up. regex101 proves the pattern; the Test option proves the SIT.
Inside the Contoso SIT: how proximity decides
A custom SIT is defined in an XML rule package and imported into Purview. This is the core of the Contoso Project Reference SIT used in the inline DLP post. Three parts of it do the work:
The regex is the primary element. Nothing is evaluated unless the text contains CONTOSO-, three letters, six digits and a check letter, bounded by word breaks. Purview matches it without regard to case.
The keywords are supporting evidence. On their own they match nothing. They only matter when they appear near a project reference, and matchStyle="word" means they must be whole words: “codename” counts, “codenames” does not.
The proximity window is 300 characters.patternsProximity="300" sets it: A keyword counts only if it falls within 300 characters of the reference. Inside the window, the match is High confidence (85). Outside it, or with no keyword at all, the match drops to Medium (75).
The DLP rule in the inline DLP post blocks at High confidence only. That one setting is what keeps false positives down: a reference has to look like a Contoso project code and be described as one before anything is blocked. A Medium match is still recorded, so it can drive an audit rule or a policy tip while you tune.
Here is how that plays out for prompts typed into an AI app, with the policy blocking at High confidence:
Prompt
SIT match
Blocked?
Why
“Summarise the risks on project reference CONTOSO-FIN-204815-K for the board”
High (85)
Yes
Pattern plus keyword in the same sentence
“Codename CONTOSO-RND-550731-H: draft a launch plan for this product”
High (85)
Yes
Pattern plus keyword
“Rewrite this update – Contoso project CONTOSO-OPS-118204-M is three weeks late”
High (85)
Yes
Pattern plus keyword
“Here is the spec for confidential project CONTOSO-ENG-904117-P. Find the weaknesses”
High (85)
Yes
Pattern plus keyword
“project code: contoso-hrs-300221-b – turn this into a job description”
High (85)
Yes
Case does not matter to the regex or the keywords
A pasted document with “Project ref” in the heading and CONTOSO-FIN-204815-K two paragraphs (under 300 characters) later
High (85)
Yes
Keyword inside the proximity window
“Is CONTOSO-FIN-204815-K a valid format for our tracker?”
Medium (75)
No – audit
Pattern with no supporting keyword
A long paste where “project reference” appears more than 300 characters from CONTOSO-FIN-204815-K
Medium (75)
No – audit
Keyword outside the proximity window
“Our codenames list starts with CONTOSO-RND-550731-H”
Medium (75)
No – audit
“codenames” is not the whole word “codename”
“Project reference CONTOSO-FN-204815-K”
None
No
Two letters, not three – the regex fails
“Project reference CONTOSO-FIN-20481-K”
None
No
Five digits, not six
“Project reference XCONTOSO-FIN-204815-K”
None
No
No word boundary before the prefix
“Project reference FABRIKAM-FIN-204815-K”
None
No
Wrong prefix
“What is our project code policy?”
None
No
A keyword on its own never matches
The last row is the important one. The keyword list contains everyday phrases that appear in thousands of emails and chats. On their own they do nothing; they only raise the confidence of a real project reference. That is the difference between a SIT and a keyword list, and it is why this SIT can block at High confidence without flooding the alert queue.
Prove it before you block. Paste these examples into a text file and run them through the Test option on the SIT. The results should match the table: six High, three Medium, five with no match. Purview lists a High match under Medium and Low as well, so seeing a value more than once is expected.
Custom SITs only find IP that carries an identifier. A design document that never mentions its project code passes straight through, which is why the next methods exist.
Exact data match
Exact data match (EDM) detects the actual values in your own data rather than a pattern that looks like them. You export a table, for example Contoso’s customer list with account numbers and contact names, hash it and upload the hashes. Purview then matches on those exact values, so a twelve-digit number only fires if it is a real Contoso customer account.
EDM gives the lowest false-positive rate of any method and suits structured IP: customer and supplier lists, a bill of materials, a product price book. The original data never leaves Contoso in clear text. The cost is operational: the source table has to be refreshed on a schedule as the data changes.
Document fingerprinting
Document fingerprinting is the most underused method for IP, and the best fit for any organisation that writes its IP on standard forms. You upload a blank template, such as Contoso’s patent disclosure form or design specification, and Purview converts its word pattern into a SIT. Any document written on that template then matches, whatever has been filled in.
Only a hash is stored; the original template cannot be reconstructed from it. Partial matching lets you set what percentage of the template text must be present for low, medium and high confidence, or select Exact to match only identical text.
Create it in the Purview portal under Information Protection > Classifiers > Sensitive info types > Create Fingerprint based SIT, or in Security & Compliance PowerShell:
$template = [System.IO.File]::ReadAllBytes('C:\Demo\Contoso-Design-Specification.docx')
New-DlpSensitiveInformationType -Name 'Contoso Design Specification' `
-FileData $template `
-ThresholdConfig @{ low = 40; medium = 60; high = 80 } `
-IsExact $false `
-Description 'Documents written on the Contoso design specification template'
Limits worth knowing before you promise it to anyone:
The template needs at least 256 characters of extracted text, and embedded documents in it are ignored.
It does not detect password-protected files, image-only files, files larger than 4 MB, or documents missing some of the template text.
Fingerprints share a 300 KB rule pack, which allows roughly 100 per tenant.
On devices, Advanced classification scanning and protection must be turned on in Endpoint DLP settings.
Trainable classifiers
Trainable classifiers identify an item by what it is rather than what it contains. For IP that is the only method that works on free-form documents with no identifiers and no template.
Pretrained classifiers are ready to use. Several map directly onto IP, including Source Code, Intellectual Property, Patents, Mergers and Acquisitions, and business and marketing plans. Check the current list in your tenant under Information Protection > Classifiers > Trainable classifiers, as it grows.
Custom trainable classifiers are trained on Contoso’s own documents. You provide a set of samples that definitely are the category, such as past tender responses, and a set that definitely are not. Purview trains on them, you review its predictions, and publish when the accuracy is acceptable.
Classifiers only work on items that are not encrypted.
Custom classifiers support English only.
Published custom classifiers cannot be retrained. To improve one, remove it and start again with larger sample sets.
The Source Code classifier fires when the bulk of the text is code, not on snippets pasted into a document or chat.
If you create a new SharePoint site for seed data, allow at least an hour for it to be indexed before training.
Precision versus coverage: EDM and exact fingerprints rarely misfire but only catch what they were built from. Classifiers catch far more but will produce false positives. Use the precise methods to block, and the broad ones to label, audit and warn while you tune.
The types of DLP
Classification decides what is sensitive. DLP decides what happens when that content moves. Purview DLP is not one control but a family, split into two policy scopes in the portal: Enterprise applications & devices and Inline web traffic. Each location sees a different part of the journey and offers different actions.
There are a lot of locations, and the table below lists them all for completeness. For the purposes of this post, the next sections focus on the route keeping most security teams awake: Contoso’s IP finding its way into generative AI.
Type of DLP
Where it acts
What it stops for Contoso IP
Microsoft 365 workloads
Exchange, SharePoint, OneDrive, Teams chat and channel messages
Patent drafts emailed externally, design files shared with guests or “anyone” links, project codes posted to external Teams chats
Endpoint DLP
Onboarded Windows and macOS devices
Copy to USB, print, upload to unallowed domains or personal cloud, copy to clipboard, access by unallowed apps – the departing engineer scenario
Microsoft 365 Copilot and Copilot Chat
Prompts, grounding content and agent interactions
Copilot processing labelled IP in its responses, and sensitive data typed into prompts
Inline web traffic – Edge for Business
Inside the managed browser
Pasting or uploading IP to unmanaged AI apps, with an in-page policy message
Inline web traffic – Network
Entra Internet Access, or a supported non-Microsoft SASE
IP sitting in sanctioned non-Microsoft cloud storage
On-premises repositories
File shares and SharePoint Server, through the Information Protection scanner
Legacy engineering shares nobody has migrated
Fabric and Power BI
Semantic models, lakehouses and warehouses
Pricing and product data uploaded to analytics workspaces
Protecting generative AI: where each type of DLP helps
AI reaches Contoso’s IP through several routes: a user pastes it into a prompt, uploads a file, asks Copilot a question that grounds on it, or lets an agent read it. No single DLP location covers all of them. Together they do:
Control
AI route it covers
What it does for Contoso IP
Microsoft 365 Copilot and Copilot Chat location
Copilot grounding, prompts and prebuilt agents in Copilot
Stops Copilot using content labelled Highly Confidential – Contoso IP in its responses, so a user who can open a file still cannot have Copilot summarise it
Endpoint DLP
Paste and upload into AI websites from managed devices, and desktop AI apps reading files
Blocks or warns on paste to browsers, upload to AI sites grouped as sensitive service domains, and access to labelled files by unallowed apps
Inline web traffic – Edge for Business
Typed and pasted prompts in Edge
Inspects the prompt in real time and blocks it before it leaves the browser, with a policy message the user can read
Inline web traffic – Network
Any browser, plus apps, APIs and add-ins, through Entra Internet Access or a supported SASE
Covers the browsers Edge for Business cannot – see the inline DLP post for tested results by app
Sensitivity labels with encryption
Any AI app, managed or not
Non-Microsoft AI apps cannot decrypt Purview-encrypted content, so a labelled file uploaded to them is unreadable
Exchange, SharePoint, OneDrive and Teams
AI-generated content shared onwards
A Copilot-drafted summary of Halcyon is still checked for SITs and labels when it is emailed or shared externally
Defender for Cloud Apps adds visibility of how Copilot is used and alerts on risky interactions, and DSPM for AI shows which AI apps are in use and what sensitive data reaches them. Neither blocks on its own; both tell you where to point the controls above.
Where Endpoint DLP protects
Endpoint DLP runs on Windows and macOS devices onboarded to Purview, and it is the control closest to the user. It acts on the actions people take with a file, wherever the file came from:
Activity
Contoso scenario it stops
Upload to cloud service domains
Design specification uploaded to a personal cloud drive or an AI website
Paste to supported browsers
Code from a custom-developed app pasted into a consumer AI chat
Copy to clipboard
Halcyon content copied out of a labelled document into an unmanaged app
Copy to removable USB device
The departing engineer’s copy of the project folder
Copy to network share
IP moved to an unmonitored file share before it leaves
Print
Patent drafts printed and walked out of the building
Transfer using Bluetooth
Files sent to a personal phone
Copy to remote desktop session
Data moved into a session on a machine Contoso does not manage
Access by unallowed apps
A labelled file opened by an unsanctioned desktop AI app or sync client
Each activity can be set to audit, block with override or block. Two settings matter for IP: Advanced classification scanning and protection must be on for fingerprint SITs to work on devices, and sensitive service domain groups let you treat AI websites differently from the rest of the internet.
Not every location understands every classifier
This is where classification and DLP design meet, and where most policies quietly fail. Locations support different conditions, and when you combine locations in one policy you keep only the conditions they all share.
Copilot acts on sensitivity labels for grounding content. Its location is only available in the Custom template and cannot be combined with any other location in the same policy. No label, no protection.
Fabric and Power BI support sensitivity labels and only a subset of SITs.
Inline web traffic classifies what it can parse. As the inline DLP post showed, a prompt sent in a binary format passes without a verdict, however good the classifier.
Encrypted content cannot be read by classifiers anywhere, so the label condition has to carry it.
The practical rule: build separate policies per location, and make sure every critical IP category is recognisable by a label as well as by content. Labels are the one classification every DLP location understands.
Where Global Secure Access prompt injection protection fits
Global Secure Access has a second AI control that is easy to confuse with inline DLP: prompt injection protection, configured as a prompt policy under Global Secure Access > Secure > Prompt policies and linked to the same security profile and Conditional Access policy as the content policy. It sits on the same TLS-inspected traffic path, but it answers a different question. Inline DLP asks is Contoso data leaving? Prompt injection protection asks is this prompt an attack on the model?
What it provides
What it does not provide
Blocks adversarial prompts and jailbreak attempts before they reach the model
Any recognition of Contoso IP. It has no SITs, labels, fingerprints or classifiers – a roadmap pasted politely passes straight through
Network-level enforcement with no change to the app, in any browser on a device running the Global Secure Access client
Inspection of files. It covers text prompts only
Preconfigured conversation schemes for ChatGPT, Claude, Cohere, DeepSeek, Gemini, Grok, Meta AI, Mistral, Perplexity, Pi and Qwen
Coverage of apps that do not send prompts as JSON, or of any app whose endpoint is missing from the conversation scheme
Custom schemes for in-house or other JSON-based AI apps, defined by endpoint URL and the JSON path to the prompt
Protection without TLS inspection, or for QUIC traffic. Untrusted certificates or QUIC left on means the prompt is never seen
A Block action. Allow with Always log lets you measure impact first, but blocks nothing
Inspection of prompts beyond 64,000 characters – longer prompts are truncated – and scanning is rate limited
Prompt activity recorded in the Generative AI Insights logs
Protection for local agents talking to their own tools or MCP servers – that is Defender AI agent runtime protection, covered in Parts 1 to 5
The two controls are complementary, not alternatives. Prompt injection protection stops someone attacking the model through Contoso’s network; inline DLP stops Contoso’s IP reaching the model in the first place. Only the second depends on classification, which is why this post exists. Deploy both on the same security profile, and do not present prompt injection protection to a customer as a data protection control.
Test each app yourself. Claude is in the preconfigured list, yet in the inline DLP lab Claude sent typed prompts as binary Protocol Buffers rather than JSON. Check the request content type in the traffic logs before claiming coverage for any app, exactly as the inline DLP validation method describes.
Data at rest versus data in motion: eDiscovery and DLP
DLP stops sensitive content moving from now on. It does not tidy up what is already there. The credentials post made the same point: the connection string emailed eight months ago is still sitting in a mailbox. Finding IP that is already at rest is a separate job, and the tools behave differently by workload.
Location
Finding it at rest (eDiscovery search)
Stopping it leaving (DLP)
Exchange Online
Searchable with SensitiveType, evaluated against the message body and indexed attachments when the item was indexed. A SIT created or changed later does not match older mail until it is reindexed. Images, scanned PDFs and partially indexed items are not evaluated
Evaluated as mail is sent and received. Exchange DLP is event-driven, not a scanner of mail already in the mailbox
SharePoint Online
Searchable with SensitiveType, including count and confidence ranges such as SensitiveType:"Credit Card Number|5..25"
Evaluates files at rest and when they are shared, and can restrict access to them
OneDrive
As SharePoint
As SharePoint
Teams chat and channel messages
Limited. Messages are stored in user and Teams mailboxes and evaluated on message text only, with lower accuracy for short messages. Files shared in Teams follow the SharePoint and OneDrive rules
Evaluated as messages are sent. Files shared in Teams are covered by the SharePoint and OneDrive locations
Microsoft 365 Groups
The group mailbox follows the Exchange rules; the group site follows the SharePoint rules
Covered through the Exchange, SharePoint and OneDrive locations
Two consequences matter for Contoso:
Create custom SITs early. A Contoso Project Reference SIT published today will not find project codes in mail indexed last year until those items are reindexed. Every week of delay is a week of email that a search will miss.
Search before you enforce. Run an eDiscovery search for the custom SIT, the fingerprint SITs and All Credential Types across all workloads first. It tells you how much IP is already exposed and gives the DLP policy a realistic baseline.
DLP is the opposite side of the same coin. It reads SITs, labels, fingerprints and classifiers in every location it covers – Exchange, SharePoint, OneDrive and Teams, plus devices, Copilot, inline web traffic, Defender for Cloud Apps instances, on-premises repositories and Fabric – and it is the only control that acts at the moment content leaves.
Putting it together for Contoso
Here is how everything above combines around one asset: Project Halcyon, Contoso’s flagship R&D programme.
Layer 1 – Classify
Component
Configuration
Label
Highly Confidential – Contoso IP, encrypting content and limiting access to the R&D group
Default label
Applied to the Project Halcyon SharePoint library
Custom SIT
Contoso Project Reference, at High confidence
Fingerprint SIT
Contoso Design Specification and Contoso Patent Disclosure templates
Classifiers
Pretrained Source Code (for Contoso’s custom-developed apps) and Patents
Auto-labelling
Client-side recommendation and service-side policy apply the label when any of the SITs or classifiers above match
Layer 2 – Enforce
Policy
Condition
Action
DLP-IP-M365
Label, project SIT or fingerprint SIT, shared outside Contoso
Block, with override and business justification for Legal
DLP-IP-Endpoint
Label, Source Code classifier or fingerprint SIT
Block USB, print and upload to personal cloud; audit clipboard
DLP-IP-Copilot
Highly Confidential – Contoso IP label
Prevent Copilot from processing content
DLP-IP-AIApps
Project SIT or Source Code classifier, to All unmanaged AI apps
The Defender and Agent 365 controls from the series sit on top: unsanctioned MCP servers blocked by indicators, agents approved before use, runtime protection inspecting what agents read, and GSA prompt injection protection blocking attacks on browser AI apps. They decide which doors exist; the first two layers decide what is allowed through them.
Now replay the risks. The departing engineer’s USB copy is blocked by Endpoint DLP because the files carry the label or match the Source Code classifier. The roadmap pasted into ChatGPT is blocked inline. Copilot will not ground answers on Halcyon documents. A patent draft emailed to a partner is stopped at Exchange. Every one of those outcomes depends on Layer 1.
Handling the alerts: the Triage Agent in DLP
Layering classifiers has a cost: alerts. A Source Code classifier and a broad fingerprint will produce far more matches than a credential SIT, and a security team that cannot keep up with the queue will eventually stop reading it. The Triage Agent in DLP, a Security Copilot agent in the Purview portal, is Microsoft’s answer to that problem.
What it does
Sorts the queue. Each alert is placed in Needs attention, Less urgent or Not categorized (alerts it could not triage).
Weighs the risk. Its verdict is driven mainly by content risk – the SITs, trainable classifiers and default sensitivity labels that matched – plus exfiltration risk (was the data shared externally?), policy risk (the rule’s mode and actions) and label removal or downgrade.
Explains itself. Every triaged alert carries a summary and the risk factors behind the verdict, in both the Purview and Defender portals.
Learns from analysts. An analyst can move an alert between categories and add properties such as SITs, file paths or target domains. The feedback applies to that policy, or to all policies.
Takes custom instructions (preview). Plain-language guidance raises or lowers priority.
Nudges the user (preview). For SharePoint and OneDrive alerts in Needs attention, it can message the person who last changed the file in Teams, asking them to remove the sensitive content. Reminders go out once a day and bundle up to 10 files.
How it benefits Contoso
Halcyon alerts first. A custom instruction such as “Prioritise alerts involving Contoso Project Reference, the design specification fingerprint or the Highly Confidential – Contoso IP label” puts IP at the top of the queue, above the noise from built-in PII types.
Tuning without rewriting policies. When the Source Code classifier fires on a harmless script, analyst feedback teaches the agent to rank it lower, rather than someone weakening the rule.
Oversharing fixed at the source. The Teams reminder asks the engineer who left a design file in an open site to clean it up, without a ticket.
Evidence for the board. The Needs attention count is a cleaner measure of real IP risk than raw alert volume.
What to know before you switch it on
It only triages alerts from policies scoped to Exchange, Teams, OneDrive, SharePoint and devices. Alerts from the Copilot and inline web traffic policies – the AI routes above – are not triaged.
It ignores policies in simulation mode, so it adds nothing until a policy is turned on.
It analyses files up to 2 MB, and for alerts with 10 or more files it looks at the top 10 only. Device alerts need evidence collection for file activities turned on.
It looks back at most 30 days from the day it is enabled. Allow up to two hours for the first pass.
It runs on Security Copilot and consumes SCUs (Security Compute Units) in proportion to alert volume, so provision capacity and watch usage. It also needs Purview pay-as-you-go billing alongside per-seat DLP licensing.
Several capabilities are in preview. Confirm the current status in your tenant.
A practical sequence
Find what you have. Data explorer and Activity explorer show where existing SITs and labels already occur and how content moves, before any policy exists. DSPM shows the same through a risk lens, and an eDiscovery search for your custom SITs shows what is already sitting in mailboxes and sites.
Agree the crown jewels with the business. R&D, Legal and Product decide what counts as IP. Security cannot classify what nobody has defined.
Keep the label taxonomy short. Four or five labels people understand beat twelve they ignore.
Build classifiers per asset type, using the crown jewels table: custom SITs for identifiers, fingerprints for templates, EDM for structured lists, classifiers for the rest.
Test before you trust. Use the Test option on each SIT with samples that should and should not match, and check classifier predictions before publishing.
Auto-label in simulation first. Review what service-side auto-labelling would label before letting it apply encryption at scale.
Run DLP in simulation, then with policy tips, then block. Tips teach users what is sensitive; blocks without them generate tickets.
Switch on the Triage Agent once policies are live, with a custom instruction that puts Contoso IP first.
Review regularly. New projects need new codes, templates change, and classifiers drift as the business does.
Limits to know
Classification is never complete. Some IP will always be unlabelled and undetectable. Destination controls remain the backstop.
Encryption and detection pull in opposite directions. Encrypt too early and content classifiers go blind; rely on the label from that point.
Machine learning makes mistakes. Start classifier-based rules in audit or warn mode.
Licensing varies by method and location. Several capabilities in this post need E5, E5 Compliance or pay-as-you-go billing. Confirm against your own licence position before designing around them.
Features move quickly. Copilot and inline web traffic locations have changed repeatedly in 2026. Verify current behaviour in your tenant.
Wrapping up
Every control in this series is only as good as its ability to recognise what it is protecting. Destination controls decide where data can go; classification decides what the data is; DLP joins the two at every point data moves. For credentials and personal data Microsoft has done most of the classification work for you. For intellectual property, you have to do it yourself, with labels, custom SITs, fingerprints, EDM and classifiers layered together. Do that first, and every other control you have deployed starts to mean something.
Series:Part 1 introduced AI agent runtime protection in Microsoft Defender for Endpoint. Part 2 covered the lab build and validation. Part 3 found the agents running on your endpoints. Part 4 blocked an unsanctioned MCP server with a Defender indicator. Part 5 automated it. Part 6 moves from Defender controls on the endpoint to governance in Microsoft Agent 365.
From Defender controls to Agent 365 governance
Parts 1 to 5 of this series were about Defender controls. They covered seeing agents on endpoints, detecting prompt injection, blocking unsanctioned MCP servers and controlling where tools like Claude Code can connect. Those controls act at runtime, on the device, once an agent is already running.
This part moves up a level, to governance and control in Microsoft Agent 365. Agent 365 is where Microsoft now inventories every agent in a tenant, approves them before people can use them, and applies policy when they are published. Entra ID sits underneath it, giving the agents that have an identity their own Conditional Access, ID Protection and access governance.
Defender answers “what is this agent doing right now?” Agent 365 answers the questions that should come first: which agents do we have, who owns them, who approved them, and what are they allowed to reach?
Core concepts
A few terms come up throughout:
Agent: in Agent 365, anything in the registry, whatever platform built it: Copilot Studio, Microsoft, a third-party publisher or your own developers.
Agent identity: an agent that signs in to Entra with its own identity, much like a service principal. Only these agents can be targeted by Entra Conditional Access, ID Protection and access packages.
Agent identity blueprint: the template an agent identity is created from. It sets the identity, permissions, policies and naming for every agent built from it. Copilot Studio has its own blueprint, so every Copilot Studio agent with an identity comes from the same one.
Blueprint principal: the blueprint’s object in your tenant. Conditional Access uses it to include or exclude every agent built from that blueprint in one go.
Agent user: an agent that also has a user account, so it can work in Teams, Outlook, SharePoint and OneDrive. It is a separate identity type, so a policy for agent identities does not cover agent users.
Owner and sponsor: the people accountable for an agent. Owners handle the technical side; sponsors answer for why it exists.
User consent: the Entra setting that decides whether ordinary users can grant an app or agent access to their data without an administrator.
The diagram above shows how these fit together. Owners and sponsors maintain a blueprint. The blueprint creates agent identities, and can create agent users for agents that need Microsoft 365. Conditional Access and ID Protection then evaluate every token request those identities make. The point to take from it: set policy at the blueprint, and every agent built from it is covered.
The diagram below shows the four gates this post is built around. Each one asks a different question, and an agent has to pass all four before it is any use.
Gate
Question
Native control
Where
1
Who can build an agent?
Copilot Studio environments and licensing, Foundry RBAC, Agent ID Developer role, user consent
Power Platform, Azure, Entra
2
Is it approved for people to use?
Agent and plugin access, user access, policy templates, approval of requests
Microsoft 365 admin center (Agent 365)
3
What can it reach?
Owners and sponsors, access packages with approval and expiry
Entra ID Governance
4
Can it authenticate at all?
Conditional Access for agents, plus ID Protection
Entra
Gate 2 covers every agent in the registry. Gates 3 and 4 only reach agents with an Entra agent identity, which is why Agent 365 comes first.
What a dev tenant looks like
To write this part I reviewed a Microsoft 365 E7 dev tenant, read-only.
81 from the Copilot Studio blueprint, 1 from Purview
Waiting for approval
0 requests
–
Governance templates
None
–
Agent Conditional Access
–
2 policies, both report-only
These figures are from a dev tenant. Agent 365 and Entra count agents in different ways, so the totals do not line up exactly between the two portals.
The headline is the gap between the two columns. Most agents in the tenant have no Entra agent identity at all, so Entra’s Conditional Access, ID Protection and access packages cannot see them. Entra says so itself on the Agent identities page: it lists only agents with Entra identities, and points to Agent 365 for the rest. That is why the governance has to start in Agent 365.
The risks
Risk
What I saw
Why it matters
Agent sprawl
Hundreds of agents across several platforms
Nobody can review what they cannot count
Agents outside Entra
About three quarters of agents had no Entra agent identity
Identity controls (CA, ID Protection, access packages) do not reach them
Third-party agents
Two thirds of the registry
They cannot go through the Agent 365 approval workflow
No approval in use
Nothing in the Requests queue
Nothing had gone through the approval workflow, so there is no record of anyone signing agents off
Ownerless agents
An agent identity with no owner and no sponsor
No one to ask what it does, or to switch it off
Standing permissions
An agent holding a delegated permission granted by admin consent
Access granted once, never reviewed, never expires
Permissive defaults
External publishers allowed; no governance templates
Agents arrive without policy applied
Controls not enforced
Agent CA policies left in report-only
Risky agents would be logged, not blocked
Data exposure through users
Copilot Studio agents act with the signed-in user’s permissions
An over-shared agent exposes whatever its users can reach
None of this is unusual. Agent 365 and Entra Agent ID are new, the defaults are open, and agents have been arriving faster than anyone has been governing them.
Two ways to put the controls in place
Option 1: the portal walkthrough. The rest of this post walks through each control, with screenshots from the dev tenant, in the Microsoft 365 admin center and the Entra admin center. Use it to understand what each setting does, or to apply it by hand in a small tenant.
Option 2: the script. The companion PowerShell script, Invoke-Agent365Governance.ps1, asks for one thing, your tenant ID, and signs you in interactively. It then:
Reviews the tenant read-only: every agent identity grouped by blueprint, agents with no owner, agents holding granted permissions, legacy Copilot Studio service principals, and existing agent Conditional Access policies. Everything is exported to CSV.
Creates the Gate 4 policies (CA-AGT-001 to 003, plus the optional CA-WID policies for service principals) in report-only mode, skipping any that already exist.
Run it with -ReviewOnly to change nothing, or -WhatIf to see what it would create.
The README explains every parameter and the Microsoft 365 and Entra roles the account running it needs. The Agent 365 settings in Gate 2 have no published API yet, so the script cannot set them. The README and the script’s summary list them as manual steps. Gate 2, later in this post, walks through each one with screenshots.
Prerequisites
Licensing
Capability
Licence needed
Agent 365 registry, approvals, templates
Microsoft Agent 365, included in Microsoft 365 E7 (Learn)
Entra Agent ID (agent identities and blueprints)
Included for Microsoft Entra customers
Conditional Access for agents
Microsoft 365 E7, or Agent 365 plus Entra ID P1 or Microsoft 365 E3 (Learn)
Risk-based Conditional Access for agents
As above, plus Entra ID P2 or Microsoft 365 E5 (Learn)
Global Reader (check it can open the Agent 365 pages in your tenant)
Tip: Security defaults must be off, or Conditional Access will not apply to agents at all.
Step 1: Take stock
1a. Agent 365: the full inventory
In the Microsoft 365 admin center, browse to Agents > Overview. The cards show the registry total, active users, connected platforms, pending requests, agents at risk and agents without owners.
Open Agents > All agents. The Registry tab lists every agent with its status, platform, risks, users and sessions; filter by Status, Publisher type, Platform or Channel.
Open Agents > Agent map to see the agents clustered by platform. This is the quickest way to show leadership where agents are coming from.
1b. Entra: the agents with an identity
In the Entra admin center, browse to Entra ID > Agents > Overview.
Open Agent identities for the list, and Agent blueprints to see which blueprints they come from.
Compare the two totals. The difference is the number of agents your identity controls cannot see.
1c. Find legacy Copilot Studio service principals
Older Copilot Studio agents use plain service principals rather than agent identities. Their service principals carry consistent tags such as AgenticApp, AIAgentBuilder and power-virtual-agents-<id> (Learn):
<#.SYNOPSIS Lists service principals tagged as Copilot Studio / agentic apps..NOTES Author: Seรกn O'Farrell Website: https://cloud-secure.ai/#>Connect-MgGraph-Scopes"Application.Read.All"-NoWelcome$agentTags=@('AgenticApp','AIAgentBuilder','AgenticInstance')$legacyAgents=Get-MgServicePrincipal-All-PropertyId,AppId,DisplayName,Tags,CreatedDateTime|Where-Object{$tags=$_.Tags($tags|Where-Object{$_-in$agentTags-or$_-like'power-virtual-agents-*'})}$legacyAgents|Select-ObjectDisplayName,AppId,CreatedDateTime,@{Name='CopilotStudioTag';Expression={$_.Tags|Where-Object{$_-like'power-virtual-agents-*'}}}|Sort-ObjectCreatedDateTime-Descending|Format-Table-AutoSizeWrite-Host"๐ Found $($legacyAgents.Count) agent-tagged service principals"
Don’t mass-disable. Blocking an agent or disabling a blueprint can break something the business relies on. Triage first, with the owners.
Gate 1: Control who can build
You cannot stop a Copilot Studio agent getting an identity, but you can control who can build agents in the first place (Learn):
Platform
Native control
Copilot Studio
Block self-service trials, assign Copilot Studio licences only to approved makers, restrict environment creation to Power Platform Administrators
Microsoft Foundry
Turn off self-service subscription creation; assign Azure AI Account Owner and Azure AI User only to approved teams
Custom agents
Limit the Agent ID Administrator and Agent ID Developer roles
Third-party agents
Tighten user consent so users cannot consent to new agent blueprints themselves
Microsoft Teams
Control which apps and agents users can add in the Teams admin center
Gate 2: Govern agents in Agent 365 (the main event)
Everything in this gate happens in the Microsoft 365 admin center, under Agents > Settings and Agents > All agents.
2a. Agent and plugin access
Decide which kinds of agent users can install. The dev tenant allowed agents from all external publishers, which is the opposite of where most organisations want to start.
Open Agents > Settings > Agent and plugin access.
Choose which types users can install: built by Microsoft, built by your organisation, or built by external publishers.
If you allow external publishers, consider Only certified external publishers rather than All external publishers.
Select Save.
2b. User access
Control who can use agents at all: All users, No users, or Specific users or groups. A pilot group is a sensible place to start while the rest of the controls go in. Microsoft notes that wider access can increase cost if you use pay-as-you-go billing.
2c. Policy templates
Policy templates apply licences and policies automatically when an agent is created or added. The dev tenant had none.
Open Agents > Settings > Policy template and select Add a new policy template.
On Details, give it a name and description, then choose What kind of agent can use this policy template? and pick Agents without their own identity or Agents with their own identity (preview).
On Security policies and protections, choose the policies to apply. For agents without their own identity, the dev tenant offered none, so expect this page to vary by agent type and licensing.
Review and create.
2d. Work the Requests queue
When a maker publishes an agent to the tenant, it should land in Agents > All agents > Requests for approval rather than going straight to users (Learn). An empty queue in a tenant with hundreds of agents is a warning sign, not a sign that all is well.
For each request, ask four questions (Learn): does it ask only for what it needs, is the publisher trusted, is the business purpose clear, and does it fit your AI policy? Then approve it with Publish to store, choosing the audience and template, or reject it.
Gap: third-party agents cannot be requested or approved through this workflow. In the dev tenant, that was two thirds of the registry. Your controls for them are Gate 1 (user consent) and Gate 2a (which publishers to allow), plus blocking anything you do not trust.
2e. Review an agent
Select any agent in the registry to open its details. The tabs tell you most of what you need: Details, Users, Data & tools, Security, Permissions and Activity. From here you can also Assign new owner and Block the agent.
The Security tab is where Agent 365 ties the other products together: Purview protections for the agent’s activity and data, and a link to its Entra identity.
2f. Block, delete and restore
Block stops an agent being surfaced to users. Delete soft-deletes it for 30 days, and you can restore it from Agents > Deleted agents (Learn). Both need a role that can manage agents. They were greyed out for the read-only account I used.
Gate 3: Owners, sponsors and access
This gate only applies to agents with an Entra agent identity, which was 84 of the 318 in the dev tenant. For those, Entra adds ownership and access governance. Open one from Entra ID > Agents > Agent identities.
3a. Owners and sponsors
Owners handle the technical side; sponsors are accountable for the agent’s purpose and lifecycle (Learn). Microsoft now requires sponsors when agent identities are created, but older agents can still have none. The one above had neither. Add them under Owners and sponsors, using a Microsoft 365 group as sponsor so ownership survives staff changes.
3b. Permissions and access packages
The same agent held a delegated permission granted by admin consent: access granted once and never reviewed. Check Granted permissions on each agent, and move standing access into access packages, which add approval and an expiry date.
Browse to ID Governance > Entitlement management > Access packages and create a package for a class of agent.
Add the resources it needs: groups, application permissions or Entra roles.
In the request policy, allow agent identities to request it, and require approval.
Set an expiry, such as 90 or 180 days, so access is re-justified (Learn).
Gate 4: Conditional Access and ID Protection
Like Gate 3, this gate only reaches agents with an Entra agent identity or agent user. Everything else is governed in Agent 365.
4a. Conditional Access for agents
Agent policies show up in the normal Conditional Access policy list; filter by Actors: Agents to see them. For agent identities the only condition is agent risk, and the only grant control is Block (Learn).
The starter set I recommend:
Policy
Assign to
Condition
Control
CA-AGT-001 Block agents from unapproved blueprints
All agent identities, excluding approved blueprint principals
None
Block
CA-AGT-002 Block high-risk agent identities
All agent identities
Agent risk: High
Block
CA-AGT-003 Block high-risk agent users
All agent users
Agent risk: High
Block
To create CA-AGT-002 in the portal:
Browse to Entra ID > Conditional Access > Policies and select New policy. Name it CA-AGT-002 Block high-risk agent identities.
Under Assignments, select Users, agents or workload identities, then under What does this policy apply to? select Agents and All agent identities.
Under Target resources, include All resources.
Under Conditions, set Agent risk to High.
Under Grant, select Block access, set Enable policy to Report-only, and select Create.
CA-AGT-003 is the same, but choose All agent users in step 2. CA-AGT-001 has no condition; instead, under Exclude choose Select individual agent identities and use the Agent blueprint principals tab to exclude the blueprints you approve (Learn). Run all three in report-only for 48 hours, check the results, then switch them on.
4b. ID Protection for agents
ID Protection scores agent risk, and the CA policies above act on it. Check ID Protection > Dashboard for agents flagged for risk, and Risky agents for the detail.
The gap E7 does not cover: Workload ID Premium
Everything so far covers agents with an Entra agent identity. But plenty of agents still authenticate as ordinary service principals: legacy Copilot Studio agents, custom agents built on standard app registrations, automation that never moved to Agent ID, and many third-party apps. Agent Conditional Access and ID Protection for agents do not reach them.
Protecting service principals needs Microsoft Entra Workload ID Premium. It is a standalone product at $3 per workload identity per month, and Microsoft states it is not part of any other SKU, so it is not included in Microsoft 365 E7, Entra ID P2 or the Entra Suite (Workload ID FAQ).
Capability
Free
Workload ID Premium
Why it matters for agents
Sign-in logs and audit trail for service principals
Yes
Yes
You can already see what they do
Managed identities and workload identity federation
Yes
Yes
The way to retire client secrets
Conditional Access for workload identities
No
Yes
Block a service principal outside named locations, or when it is risky
ID Protection for workload identities
No
Yes
Risk detection for leaked credentials and unusual sign-ins
Access reviews for service principals in privileged roles
No
Yes
Re-justify agents and automation holding admin roles
App health recommendations
No
Yes
Flags unused apps and expiring or risky credentials
What it covers, and what it does not
Conditional Access applies only to single-tenant service principals registered in your tenant. Multi-tenant and SaaS apps, Microsoft apps and managed identities are excluded, and service principals must be assigned to the policy directly, not through a group (Learn).
ID Protection covers both single-tenant and multi-tenant service principals, so it reaches some third-party apps that Conditional Access cannot.
As with agents, the only grant control is Block. Conditions are location and service principal risk.
Workload identity protection considerations
Separate licensing. These features need Workload ID Premium, which is separate from Entra ID P1 and P2. Having P2 through E5 or E7 does not unlock them.
The licence check cannot be worked around. It is enforced by the service, not just the portal, so creating or changing a workload identity policy through PowerShell or Microsoft Graph needs the licence too. Without it, existing policies keep working but cannot be changed (Learn).
Same place, different target. Workload identity policies live in the normal Conditional Access policy list. The difference is the assignment: under Users, agents or workload identities you choose Workload identities instead of users and groups, or agents.
Two policies worth having
Policy
Assign to
Condition
Control
CA-WID-001 Block service principals outside trusted locations
Selected single-tenant service principals
Any location, excluding your named locations
Block
CA-WID-002 Block risky service principals
Selected single-tenant service principals
Service principal risk: High
Block
Browse to Entra ID > Conditional Access > Policies and select New policy.
Under Assignments, select Users, agents or workload identities, then under What does this policy apply to? select Workload identities and Select service principals.
Under Target resources, include All resources.
Under Conditions, set Locations (include Any location, exclude your trusted named locations), or Service principal risk.
Under Grant, select Block access, and create the policy in Report-only.
Review the results under Sign-in logs > Service principal sign-ins, and risky service principals under ID Protection > Risky workload identities.
Is it worth it?
If your Step 1 inventory finds custom or legacy agents still running as service principals with client secrets, yes, at least until they move to agent identities or managed identities. A 90-day trial is available. Microsoft’s FAQ is inconsistent on how licences are counted. It quotes a per-identity price, but also says one licence unlocks the features tenant-wide, so confirm the count with your Microsoft partner before buying.
Monitor
Agent sign-ins are under Entra ID > Agents > Sign-in logs, already filtered to Is Agent: Yes. Agent identity sign-ins sit on the Service principal sign-ins tab; agent user sign-ins on the non-interactive tab.
To see what your report-only agent policies would block:
// Agent sign-ins that a CA-AGT report-only policy would have blockedunionAADServicePrincipalSignInLogs,AADNonInteractiveUserSignInLogs|whereTimeGenerated>ago(2d)|extendCAP=todynamic(ConditionalAccessPolicies)|mv-expandCAP|wheretostring(CAP.displayName)startswith"CA-AGT-"|wheretostring(CAP.result)=="reportOnlyFailure"|summarizeWouldBlock=count(),LastSeen=max(TimeGenerated)byPolicy=tostring(CAP.displayName),Identity=coalesce(ServicePrincipalName,UserPrincipalName),ResourceDisplayName|orderbyWouldBlockdesc
Blind spots
Gotcha
What happens
What to do
Agents without an Entra identity
Most of the registry is invisible to CA, ID Protection and access packages
Govern them in Agent 365: access settings, user access, approval, block
Third-party agents
They cannot be approved through the Requests workflow
Restrict external publishers and user consent; block what you do not trust
API keys
An agent using an API key never authenticates with Entra (Learn)
Move it to an agent identity and retire the key
Legacy Copilot Studio agents
Plain service principals, not agent identities
Find them with the script in Step 1c and migrate them; protect them meanwhile with Workload ID Premium
Custom agents on app registrations
Agent CA does not apply; workload identity CA needs a licence E7 does not include
License Workload ID Premium, or move them to agent identities or managed identities
Delegated access
Copilot Studio agents act as the user, so permission controls do not limit them
Rely on Gate 2 and Power Platform data policies
Security defaults
Conditional Access does not apply to agents
Replace security defaults with a CA baseline
Report-only forever
Policies log but never block
Set a date to enforce
Preview features
Several agent features are still in preview
Recheck status before rolling out to a customer
Checklist
Compare the Agent 365 registry total with the Entra agent identity total
Find legacy Copilot Studio service principals and plan their migration
Gate 1: restrict who can build, and tighten user consent
Gate 2: set Agent and plugin access and User access, create a policy template, and work the Requests queue
Gate 2: assign owners to ownerless agents; block what nobody will own
Gate 4: deploy CA-AGT-001, 002 and 003 in report-only
Monitor: review the report-only results after 48 hours, set an enforcement date, then switch the policies on
Service principals: decide on Workload ID Premium for agents and automation that are not agent identities
Or run the companion script for the review and Gate 4 policies, then work through the manual steps it lists
More to come
The series started on the endpoint with Defender and now covers governance in Agent 365. Microsoft is moving quickly here, and several features in this post are still in preview. I will update this post, and the script, as they change.