所有應用程式,包括企業 AI 應用程式,都處理需要防範資料外洩、未經授權存取及合規違規的敏感資料。 Microsoft Purview 政策協助組織保護敏感資訊。 您的應用程式可以整合 Microsoft Purview API,確保 Microsoft Purview 政策能支援您的應用程式安全防護。
本文將詳細說明如何將 Microsoft Purview API 加入現有企業應用程式,以善用你的政策。 本文舉例為生成式 AI 應用程式,但相同的概念也很容易套用到非 AI 應用程式上。 在這次攻略結束時,你會明白:
- 何時以及如何為已知使用者呼叫 Purview API,針對他們在應用程式中執行的活動。
- 根據這些政策評估使用者輸入與應用程式輸出(例如提示與 AI 回應,或任何用戶提交的文字與生成內容)。
- 在你的應用程式中執行政策操作,例如封鎖或保持租戶的政策修改與最新。
Note
使用 Microsoft Purview API 將資料傳送至 Microsoft Purview,並支援與該資料相關的 Purview 政策。 目前沒有可用的 API 可以從 Microsoft Purview 提取資料或分析資料。
先決條件
在開始之前,請確保您擁有:
已設定 Microsoft Purview 的 Azure 訂用帳戶。
一個以 Microsoft Entra ID 註冊並擁有適當權限的應用程式。
對 Microsoft 圖形 API 呼叫有基本熟悉。
存取你想評估的使用者輸入與應用程式輸出(例如生成式 AI 應用程式中的提示與回應,或是業務線上應用程式上傳/下載的文字)。
端對端測試時,請在您的 Microsoft Purview 入口網站 建立政策。 欲了解更多可用政策資訊,請參閱使用 Microsoft Purview 管理 Entra 註冊 AI 應用程式的資料安全與合規。
Important
要建立適用於你 Entra 註冊應用程式的 DLP 政策,你必須使用
New-DlpComplianceRulePowerShell 指令檔。 Microsoft Purview 入口網站 目前不支援為 Entra 註冊應用程式建立 DLP 政策。 欲了解更多資訊,請參閱 New-DlpComplianceRule。
如何開始使用 Microsoft Graph
如果你完全是 Microsoft Graph 的新手,請參考 Microsoft Graph 基礎。
以下步驟幫助你 嘗試 使用 API。 不要用這些步驟來規劃應用程式的生產部署。
了解 Microsoft Graph 中的 Microsoft Purview API,以將其整合至您的應用程式。 這些 API 將在本文後面詳細說明。
請你的 Entra 管理員幫你在 Entra 裡註冊你的應用程式 。 根據你公司的政策,他們可能會讓你註冊應用程式,或者你可能需要遵循註冊流程。 務必向你的 Entra 管理員確認,了解租戶該遵循的流程。 如需詳細資訊,請參閱下列資源:
請用所需的權限設定你的應用程式。 請確保您的應用程式在向 Microsoft Graph 要求權杖時,一併要求這些權限。 例如,你可以為你的應用程式分配
Content.Process.User和ProtectionScopes.Compute.User權限。 欲了解更多資訊,請參閱 Microsoft Graph 權限參考和 使用 Microsoft Entra ID 授權應用程式、資源和工作負載。請你的租戶管理員設定 Microsoft Purview 的政策和設定。 欲了解更多資訊,請參閱「配置 Microsoft Purview 解決方案於資料安全態勢管理(DSPM)中的人工智慧,用於客製化 AI 應用。 你的管理員必須使用
New-DlpComplianceRulePowerShell 指令檔來為你的 Entra 註冊應用程式建立 DLP 政策。 Microsoft Purview 入口網站 不支援此情境。測試您的應用程式。 欲了解更多資訊,請參閱 如何使用 Purview API 測試 AI 應用程式。
Microsoft Purview API 整合概覽
您的應用程式會執行兩個關鍵的 API 呼叫來支援您的 Microsoft Purview 政策:
-
Compute protection scopes: 決定哪些使用者活動(上傳文字、下載文字、上傳檔案、下載檔案)需要針對特定使用者進行政策評估。 -
Process content: 您的應用程式會傳送一項內容活動以供政策評估,並回傳應用程式必須執行的政策行動(例如封鎖或偵測政策變更)。
以下章節提供逐步實作指引,包括程式碼範例及回應處理方式。
想詳細了解一個能呼叫這些 API 的示範應用程式,請參考 Microsoft Reactor 影片。
步驟 1:為使用者計算保護範圍
第一步是根據使用者在應用程式中能執行的活動(例如上傳文字輸入/提示或下載 AI 回應)來識別適用哪些政策和限制。 這稱為計算使用者的保護範圍。
保護範圍是租戶內套用至使用者之原則的抽象化呈現。 對於任何特定使用者及其在應用程式中執行的活動,你要計算保護範圍。 保護範圍指示應用程式接下來應該採取的行動,可以是評估並封鎖、評估但不封鎖,或是不需要評估。
Note
我們建議在使用者驗證後立即呼叫 運算保護範圍。 要撥打電話protectionScopes/compute,必須擁有該用戶的 Entra ID。
如果您只有使用者的 userPrincipalName,請使用下列 URL 來擷取其物件識別碼。
GET https://graph.microsoft.com/v1.0/users/{userPrincipalName}?$select=id
以下是傳送至 protectionScopes/compute 的請求範例。
POST https://graph.microsoft.com/v1.0/users/7c1f8f10-cba8-4a8d-9449-db4b876d1ef70/dataSecurityAndGovernance/protectionScopes/compute
Content-type: application/json
{
"activities": "uploadText,downloadText",
"locations": [
{
"@odata.type": "microsoft.graph.policyLocationApplication",
"value": "83ef208a-0396-4893-9d4f-d36efbffc8bd"
}
]
}
在前述計算保護範圍的呼叫中,您必須包含使用者在應用程式中執行的活動。 允許的使用者活動包括:
- uploadText - 使用者將文字輸入傳送給應用程式(例如發送給 AI 的提示、聊天應用程式中的訊息,或貼上到表單中的文字)。
- downloadText - 應用程式傳回給使用者的文字型輸出(例如 AI 回應或產生的文件本文)。
- uploadFile - 使用者向應用程式提交檔案(例如附加於處理提示的檔案)。
- downloadFile - 應用程式回傳給使用者的檔案(例如由 AI 產生或由業務應用匯出的檔案)。
欲了解更多使用者活動資訊,請參閱 userActivityTypes 值。
計算保護範圍的呼叫會回傳一組 policyUserScopes。 這裡有一個有兩個保護鏡的回應範例。
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(microsoft.graph.policyUserScope)",
"value": [
{
"activities": "uploadText,downloadText",
"executionMode": "evaluateOffline",
"locations": [
{
"@odata.type": "#microsoft.graph.policyLocationApplication",
"value": "83ef198a-0396-4893-9d4f-d36efbffc8bd"
}
],
"policyActions": []
},
{
"activities": "uploadText",
"executionMode": "evaluateInline",
"locations": [
{
"@odata.type": "#microsoft.graph.policyLocationApplication",
"value": "83ef198a-0396-4893-9d4f-d36efbffc8bd"
}
],
"policyActions": []
}
]
}
應用程式解析此回應以判斷哪些使用者活動(例如 uploadText)需要對提交或發送給使用者的內容進行政策評估非常重要。
如果回傳的 policyUserScopes 集合為空: 使用者的活動不會適用任何政策。 當此使用者的這項活動沒有任何適用的原則時,我們建議呼叫 Content activity 來記錄活動,以供稽核合規和異常偵測之用。 你可以在應用程式中設定這個設定。
如果 policyUserScopes 集合包含 scope:當保護範圍被回傳時,應用程式需要透過檢查每個保護範圍的activitiesexecutionMode值來解析回應。 在前述範例中,policyUserScopes 集合中會傳回 2 個保護範圍。
executionMode 可協助您判斷某位特定使用者在某項使用者活動中適用的限制。 以下列表顯示 的 executionMode有效值:
-
evaluateOffline:表示您可以在呼叫processContent時,發出非同步呼叫,根據原則評估內容。 -
evaluateInline: 表示你的應用程式主執行緒必須阻塞,直到呼叫從processContent返回。
如需詳細資訊,請參閱 executionMode 的值。
Tip
如果 protectionScopes/compute 一律傳回保護範圍,且其 executionMode 一律等於 evaluateOffline,請確認您是使用 New-DlpComplianceRule PowerShell Cmdlet 建立 DLP 原則。 確認該政策已列在 DSPM > 收集政策中並啟用。 透過 Microsoft Purview 入口網站 介面建立的政策不適用於 Entra 註冊的應用程式。
activity 表示保護範圍適用的使用者活動。 你可能會發現 activity 在多個保護範圍內重複出現。 例如,請注意,在前面的範例中,uploadText 會在兩個保護範圍中都被傳回。 在這種情況下,你的應用程式必須對該使用者的行為套用更嚴格的保護範圍。
以下範例展示了你的應用程式如何解析前一個回傳 policyUserScopes 的集合:
- 透過解析第一個保護範圍,我們看到以下資訊:
-
uploadText(或傳送給 AI 的提示詞)以及downloadText(或 AI 的回應)都必須以離線方式評估。
-
- 解析第二個保護範圍時,我們看到以下資訊:
-
uploadText(或傳送給 AI 的提示詞)必須以內嵌方式評估。
-
- 對於其他任何使用者活動(
uploadFile,downloadFile),這些使用者活動都不適用保護範圍。 請考慮如前所述呼叫內容活動。
你的應用程式必須為這些不同使用者活動實作的邏輯如下:
| 使用者活動 | 應用程式中的動作 |
|---|---|
uploadText |
呼叫 processContent. 時請封鎖主執行緒。 |
downloadText |
呼叫 processContent 時,請進行非同步呼叫。 |
Important
快取 ETag 值:呼叫 protectionScopes/compute 會傳回 ETag 標頭,表示該使用者保護範圍的目前狀態。 你的應用程式必須快取這個值,並連同所有呼叫一起傳送給 processContent。
步驟二:內容處理
接著,根據使用者的保護範圍狀態,你的應用程式可能需要呼叫 processContent。
如前所述,在任何使用者活動中,若 executionMode 為 evaluateInline 或 evaluateOffline,則必須呼叫 processContent。
當你打電話時,先把應用程式從通話中快取的值傳送 ETag 到 protectionScopes/compute 步驟 1 中,以確認租戶是否有做政策修改。 你要在 If-None-Match 標頭中傳送 ETag 值。
以下是一個對 processContent 的呼叫範例。
POST https://graph.microsoft.com/v1.0/me/dataSecurityAndGovernance/processContent
Content-Type: application/json
{
"contentToProcess": {
"contentEntries": [
{
"@odata.type": "microsoft.graph.processConversationMetadata",
"identifier": "07785517-9081-4fe7-a9dc-85bcdf5e9075",
"content": {
"@odata.type": "microsoft.graph.textContent",
"data": "Write an acceptance letter for Alex Wilber with Credit card number 4532667785213500, ssn: 120-98-1437 at One Microsoft Way, Redmond, WA 98052"
},
"name":"PC Purview API Explorer message",
"correlationId": "d63eafd2-e3a9-4c1a-b726-a2e9b9d9580d",
"sequenceNumber": 0,
"isTruncated": false,
"createdDateTime": "2025-05-27T17:23:20",
"modifiedDateTime": "2025-05-27T17:23:20"
}
],
"activityMetadata": {
"activity": "uploadText"
},
"deviceMetadata": {
"deviceType": "Unmanaged",
"operatingSystemSpecifications": {
"operatingSystemPlatform": "Windows 11",
"operatingSystemVersion": "10.0.26100.0"
},
"ipAddress": "127.0.0.1"
},
"protectedAppMetadata": {
"name": "PC Purview API Explorer",
"version": "0.2",
"applicationLocation":{
"@odata.type": "microsoft.graph.policyLocationApplication",
"value": "83ef208a-0396-4893-9d4f-d36efbffc8bd"
}
},
"integratedAppMetadata": {
"name": "PC Purview API Explorer",
"version": "0.2"
}
}
}
Note
對話/討論串實作指引:
- 如果你的應用程式支援多個主題或對話(例如人工智慧應用程式或訊息應用程式中的聊天串),每個主題都使用獨特的
correlationId對話串。 - 如果你在特定對話串中維持對話脈絡,請每收到一則使用者訊息,就將
sequenceNumber遞增一次(例如依序使用 0、1、2,依此類推)。
以下是來自 processContent的回應範例。
HTTP/1.1 200 OK
Content-Type: application/json
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.processContentResponse",
"protectionScopeState": "modified",
"policyActions": [
{
"@odata.type": "#microsoft.graph.restrictAccessAction",
"action": "restrictAccess",
"restrictionAction": "block"
}
],
"processingErrors": []
}
在前面的例子中,你的應用程式必須採取兩個步驟:
-
processContentResponse包含設為modified的protectionScopeState屬性。modified表示租戶的政策已變更。 由於政策已變更,您的應用程式必須先呼叫protectionScopes/compute以取得該使用者的新保護範圍,如步驟 1 所述。 請確保快取新的ETag值。 - 因為集合
policyActions不是空的,你的應用程式需要逐一步驟檢視action,判斷必須採取的適當行動。 在此範例中,restrictAccess表示你的應用程式必須阻擋使用者執行該請求的動作。 如果policyActions集合processContentResponse是空的,你的應用程式會繼續執行被要求的活動。 如果你正在建置代理,當action設為restrictAccess時,代理在呼叫另一個代理之前也必須先進入阻塞狀態。
Important
如果距離您上次呼叫 processContent 已經過了 60 分鐘,我們建議您呼叫 計算保護範圍,以偵測租用戶中所做的任何原則變更目前是否適用於該使用者。 如果有一項變更現在開始適用於該使用者,呼叫 protectionScopes/compute 會傳回新的 ETag 值,而此值必須在你的應用程式中快取,並在呼叫 processContent 時使用。