En Flask-tjänst för flera klientorganisationer som prenumererar på Microsoft 365-ändringshändelser, söker igenom ny e-post, Teams-chatt, OneDrive- och SharePoint-innehåll efter personuppgifter och sedan blockerar, karantäniserar eller varnar för det innan det sprids. Samma granskningslogg som utlöser blockeringen ger även dataägaren en möjlighet att ångra åtgärden med ett enda klick.
Bevaka varje förändring, klassificera på millisekunder, agera innan sidan hinner uppdateras.
DLP-tjänsten befinner sig mellan Microsoft 365 och Data & More-plattformens klassificeringslager. Den prenumererar på Graph-ändringsaviseringar för de klientorganisationer den betjänar, deduplicerar dem, hämtar det berörda innehållet, kör det genom ett snabbt regex-förfilter och plattformens profilerar, mappar sedan utfallet mot en klientspecifik policy och agerar i källsystemet. Varje åtgärd skrivs till ett Elasticsearch-granskningsindex, och varje blockering paras ihop med en återställningslänk som dataägaren kan använda utan att lämna e-postmeddelandet.
Graph-prenumerationer hålls aktiva av en bakgrundsschemaläggare som förnyar token, stämmer av avvikelser och återapplicerar bulk-källkonfigurationer när klientorganisationens val förändras.
Varje objekt passerar ett klientanpassat regex-förfilter (med ReDoS-skyddade tidsgränser). Endast objekt som passerar förfiltret skickas vidare till java_profiler för det tyngre PII-utfallet.
Policyn mappar ett (källa, utfall)-par till en av fem åtgärder, samtliga utförda inom Microsoft 365: ta bort meddelandet, flytta det till karantän, redigera en fil, eller skicka ett informationsmeddelande via e-post eller Teams-kort.
En förändring i Microsoft 365 resulterar i en avisering, en klassificeringsomgång, ett policybeslut och en granskningsrad. Pipelinen nedan är vad varje Teams-meddelande, OneDrive-uppladdning och SharePoint-redigering genomgår.
Varje källa har sin egen Graph-prenumeration, sitt eget format för resurssökvägar, sin egen innehållshämtare och sin egen uppfattning om vad blockering innebär. Processorn dirigerar baserat på den tolkade resursen och skickar vidare till rätt hämtare och rätt tillämpning.
graph-management innan token löper ut.reauthorizationRequired (förnya), missed (logga; administratör kan tillämpa om på nytt) och subscriptionRemoved (logga).Exchange är kopplat via en EXO-transportregel som sätter misstänkt e-post i karantän innan användaren ser den. DLP-tjänsten hämtar sedan meddelandet ur karantänen, klassificerar det och antingen levererar eller blockerar det. Exchange-aviseringar som inte rör karantän avvisas omedelbart — de är arv från äldre system eller felkonfiguration.
Klassificering sker i två steg så att det enklare steget filtrerar merparten och det kostsammare steget endast ser det som överlever.
En per-klientorganisation lista med regex-mönster, kompilerade vid första användning och omkompilerade när mönsterlistan ändras. Varje matchning körs med en tidsgräns på 1 sekund mot ReDoS (via tredjepartsmodulen regex) så att ett enskilt problematiskt mönster inte kan blockera arbetaren.
Om förfiltret inte kortsluter skickas texten till java_profiler:s /dlp/classify-endpoint. Klienten omsluter anropet med en kretsbrytare (5 fel, 60 s återställning) och ett tenacity-omförsök (3 försök, exponentiell backoff vid anslutnings-/tidsgränsfel). Vid totalt fel misslyckas det öppet som "ingen PII" snarare än att blockera oskyldigt innehåll.
/dlp/classify-endpoint, som är optimerad för binära blockera/tillåta-beslut.(Källa, utfall)-paret mappas till en av fem åtgärder av den klientspecifika policyn som lagras i dlp_config. Allow lämnar systemet tyst; de övriga fyra avslutas alla med en granskningsrad.
Antingen identifierades ingen PII, eller så finns filen på klientens undantagslista för OneDrive / SharePoint. Ingenting skrivs, ingenting skickas.
Innehållet förblir på plats. Avsändaren (eller filägaren) får ett e-postmeddelande eller ett Teams-kort som anger att innehållet utlöste policyn. Användbart för kategorier med låg allvarlighetsgrad.
Tillämpningslagret vidtar åtgärd i källan: Teams-meddelandet döljs bakom ett kort, OneDrive / SharePoint-filen låses, Exchange-mejlet tas bort från karantän. Granskningsraden innehåller en återställningstoken så att åtgärden kan återkallas.
Filen lämnas orörd och ägaren får ett e-postmeddelande med tre alternativ: tillämpa nu, avbryt (med valfri tillfällig eller permanent undantagshantering) eller gör ingenting. Efter respitfönstret hämtar schemaläggaren posten och tillämpar åtgärden automatiskt.
Inkommande e-post som fångas upp av transportregeln placeras i karantän. DLP-tjänsten klassificerar det och väljer mellan release (leverera), keep (blockera) och notify (under granskning). En separat aviseringsväg för skanning och release håller avsändaren informerad.
Varje block-klassåtgärd bäddar in en signerad återställnings-URL i aviseringen. Mottagaren klickar på den och revert_service läser reversal_data från granskningsraden för att ångra åtgärden och skriva en återställningsgranskningsrad bredvid.
Ett grace_block är det mjuka alternativet för OneDrive och SharePoint: ingenting händer i källan förrän ägaren antingen fattar ett beslut eller respitfönstret löper ut.
Aviseringar riktas till den identitet som är relevant för källan (avsändaren i Teams, filägaren i OneDrive, webbplatsägarna i SharePoint). Transporten väljs per klient.
För Teams-aviseringar publicerar boten ett proaktivt svar i den ursprungliga tråden (eller ett DM om kanalsvaret misslyckas). Kortet visar åtgärden, ett motiveringsutdrag, en djuplänk till meddelandet och återställnings-URL:en.
E-posttransporten väljs per klient: graph-management skickar från klientens egen postlåda när Graph mail-inställningar är konfigurerade, annars skickar dm-notify från plattformen. Mallar är per åtgärd med klientspecifika åsidosättningar för rubrik / brödtext / sidfot.
Nedanstående mockups återger tre verkliga notifieringar som tjänsten skickar: ett Teams-adaptivt kort, ett e-postmeddelande av typen block och ett e-postmeddelande av typen alert. De är inramade i Field Manual-utställningskort men bär sin egen produktfärgidentitet så att läsaren ser vad deras användare faktiskt ser.
Ert innehåll flaggades eftersom det kan innehålla känsliga uppgifter. Vänligen granska innan ni delar.
Analys: Dessa uppgifter innehåller personuppgifter enligt GDPR-reglerna. Strängen "mit cpr er 010101…" representerar sannolikt ett danskt CPR-nummer (Central Person Register), en unik identifierare för en individ, och faller därmed under definitionen av personuppgifter.
Detta är en informationsvarning. Ingen åtgärd har vidtagits för ert innehåll.
Ert innehåll blockerades av organisationens dataskyddspolicy. Kontrollera dlp-karantänen för att hitta det ursprungliga e-postmeddelandet.
| Vidtagen åtgärd | block |
| Källa | exchange |
| Ämne | David Junge shared "Red hat" with you |
| Plats | Visa flaggat innehåll |
Om ni anser att detta var ett misstag, vänligen kontakta er IT-administratör.
Ert innehåll flaggades eftersom det kan innehålla känsliga uppgifter. Vänligen granska innan ni delar.
Analys: Dessa uppgifter innehåller personuppgifter enligt GDPR-reglerna. De inkluderar namn ("Peter"), nationella identifierare ("NIN", "DNI", "número de identidad") samt identifikationsnummer kopplade till individer, tillsammans med uppgifter om familjemedlemmars identitetshandlingar, vilket tydligt fastställer förekomsten av personuppgifter.
Detta är en informationsvarning. Ingen åtgärd har vidtagits för ert innehåll.
Fyra daemon-trådar startar vid applikationsstart och stannar aldrig. De håller tjänsten i gott skick utan cron eller extern orkestrering.
Pingar java_profiler och AI-profileraren. Registrerar övergångar mellan upp- och nedläge och presenterar åtgärdsförslag.
Var 15:e minut. Flaggar klienter vars Graph-prenumerationer har varit tysta för länge.
Varje timme. Återapplicerar massprenumerationer för lägena ALL och GROUPS så att nya användare och gruppändringar fångas upp automatiskt.
Går igenom granskningsindexet efter grace_block poster vars tidsfönster har passerat och skickar ut den uppskjutna åtgärden.
Från en Graph-notifiering till en Exchange-karantänfrisläppning följer varje Microsoft 365-förändring ett strikt flöde, avgränsat till en klientorganisation, på kortare tid än det tar för användaren att byta flik. Varje åtgärd loggas, varje blockering är reversibel och varje klassificerare är fail-open av design, så att systemet aldrig håller tillbaka innehåll av fel anledning.