本文說明如何建立定義自定義敏感性資訊類型的 XML 規則套件檔案。 本文說明識別員工識別碼的自定義敏感性資訊類型。 您可以使用本文中的範例 XML 作為您自己的 XML 檔案的起點。
如需敏感性資訊類型的詳細資訊,請參閱 瞭解敏感性資訊類型。
建立格式正確的 XML 檔案之後,您可以使用 PowerShell 將它上傳至 Microsoft 365。 然後,您就可以在原則中使用自定義敏感性資訊類型。 您可以測試其在檢測敏感資訊方面的有效性,如您所願。
注意事項
如果您不需要 PowerShell 提供的精細控制,您可以在 Microsoft Purview 入口網站中建立自定義敏感性資訊類型。 若要進一步了解,請參閱建立自訂機密資訊類型。
重要免責聲明
Microsoft 支援服務 無法協助您建立內容比對定義。
對於自訂內容比對開發、測試和偵錯,您需要使用自己的內部 IT 資源,或使用諮詢服務,例如 Microsoft 諮詢服務 (MCS) 。 Microsoft 支援服務工程師可以針對此功能提供有限的支援,但他們無法保證自定義內容比對建議將完全符合您的需求。
MCS 可以提供用於測試目的的正規表示式。 他們也可以協助針對現有的 RegEx 模式進行疑難排解,因為該模式無法在單一特定內容範例中如預期般運作。
請參閱本文中 要注意的潛在驗證問題 。
如需用於處理文字之 Boost.RegEx (先前稱為 RegEx++) 引擎的詳細資訊,請參閱 Boost.Regex 5.1.3.。
注意事項
如果您在自定義敏感性資訊類型中使用 & 字元 (&) 作為關鍵字的一部分,則必須新增字元周圍有空格的其他字詞。 例如,使用 L & PnotL&P。
規則套件的範例 XML
以下是我們在本文中建立的規則套件的範例 XML。 元素和屬性將在以下各節中說明。
<?xml version="1.0" encoding="UTF-16"?>
<RulePackage xmlns="http://schemas.microsoft.com/office/2011/mce">
<RulePack id="DAD86A92-AB18-43BB-AB35-96F7C594ADAA">
<Version build="0" major="1" minor="0" revision="0"/>
<Publisher id="619DD8C3-7B80-4998-A312-4DF0402BAC04"/>
<Details defaultLangCode="en-us">
<LocalizedDetails langcode="en-us">
<PublisherName>Contoso</PublisherName>
<Name>Employee ID Custom Rule Pack</Name>
<Description>
This rule package contains the custom Employee ID entity.
</Description>
</LocalizedDetails>
</Details>
</RulePack>
<Rules>
<!-- Employee ID -->
<Entity id="E1CC861E-3FE9-4A58-82DF-4BD259EAB378" patternsProximity="300" recommendedConfidence="75">
<Pattern confidenceLevel="65">
<IdMatch idRef="Regex_employee_id"/>
</Pattern>
<Pattern confidenceLevel="75">
<IdMatch idRef="Regex_employee_id"/>
<Match idRef="Func_us_date"/>
</Pattern>
<Pattern confidenceLevel="85">
<IdMatch idRef="Regex_employee_id"/>
<Match idRef="Func_us_date"/>
<Any minMatches="1">
<Match idRef="Keyword_badge" minCount="2"/>
<Match idRef="Keyword_employee"/>
</Any>
<Any minMatches="0" maxMatches="0">
<Match idRef="Keyword_false_positives_local"/>
<Match idRef="Keyword_false_positives_intl"/>
</Any>
</Pattern>
</Entity>
<Regex id="Regex_employee_id">(\s)(\d{9})(\s)</Regex>
<Keyword id="Keyword_employee">
<Group matchStyle="word">
<Term>Identification</Term>
<Term>Contoso Employee</Term>
</Group>
</Keyword>
<Keyword id="Keyword_badge">
<Group matchStyle="string">
<Term>card</Term>
<Term>badge</Term>
<Term caseSensitive="true">ID</Term>
</Group>
</Keyword>
<Keyword id="Keyword_false_positives_local">
<Group matchStyle="word">
<Term>credit card</Term>
<Term>national ID</Term>
</Group>
</Keyword>
<Keyword id="Keyword_false_positives_intl">
<Group matchStyle="word">
<Term>identity card</Term>
<Term>national ID</Term>
<Term>EU debit card</Term>
</Group>
</Keyword>
<LocalizedStrings>
<Resource idRef="E1CC861E-3FE9-4A58-82DF-4BD259EAB378">
<Name default="true" langcode="en-us">Employee ID</Name>
<Description default="true" langcode="en-us">
A custom classification for detecting Employee IDs.
</Description>
<Description default="false" langcode="de-de">
Description for German locale.
</Description>
</Resource>
</LocalizedStrings>
</Rules>
</RulePackage>
您的主要要求是什麼? [規則、實體、模式元素]
請務必瞭解規則的 XML 結構描述的基本結構。 您對結構的瞭解有助於自訂敏感性資訊類型識別正確的內容。
規則會定義一或多個實體 (也稱為敏感性資訊類型) 。 每個實體都會定義一或多個模式。 模式是原則在評估內容 (例如電子郵件和文件) 時所尋找的內容。
在 XML 標記中,「規則」是指定義敏感性資訊類型的模式。 請勿將本文中規則的參考與其他 Microsoft 功能中常見的「條件」或「動作」產生關聯。
最簡單的案例:具有一種模式的實體
以下是簡單的案例:您想要原則識別包含組織中使用的九位數員工識別碼的內容。 型樣是指規則中識別九位數數字的規則運算式。 任何包含九位數數字的內容都滿足模式。
但是,此模式可能會識別 任何 九位數的數字,包括較長的數字或其他類型的非員工 ID 的九位數數字。 這種類型的不需要的匹配稱為 誤報。
更常見的案例:具有多種模式的實體
由於可能出現誤報,您通常會使用多個模式來定義實體。 多個模式為目標實體提供支援證據。 例如,其他關鍵字、日期或其他文字可以幫助識別原始實體 (例如,九位數的員工編號) 。
例如,若要增加識別包含員工 ID 的內容的可能性,您可以定義其他模式來尋找:
- 識別僱用日期的模式。
- 同時識別聘用日期和「員工 ID」關鍵字的模式。
對於多模式匹配,需要考慮一些重要點:
模式所需的辨識項越多,信賴等級就越高。 根據信賴等級,您可以採取下列動作:
- 使用更嚴格的動作 (例如封鎖具有較高信賴度相符) 的內容。
- 使用限制較少的動作 (例如傳送通知) 信賴度較低的相符專案。
支援
IdMatch和Match元素參考的是實際上是元素子Rule項的 RegEx 和關鍵字,而不是Pattern.Pattern參考資料支援元素,但它們包含在 .Rule此行為表示支援元素的單一定義 (例如正則運算式或關鍵字清單) 可以由多個實體和模式參考。
您需要識別哪個實體? 【實體元素,ID屬性】
實體是敏感性資訊類型,例如信用卡號碼,具有明確定義的模式。 每個實體都有唯一的 GUID 作為其識別碼。
為實體命名並產生其 GUID
- 在您選擇的 XML 編輯器中,新增
Rules和Entity元素。 - 新增包含自訂實體名稱的註解,例如員工 ID。 稍後,您會將實體名稱新增至當地語系化字串區段,當您建立原則時,該名稱會出現在系統管理中心。
- 為您的實體產生唯一的 GUID。 例如,在 Windows PowerShell 中,您可以執行命令
[guid]::NewGuid()。 稍後,您也會將 GUID 新增至實體的當地語系化字串區段。
你想搭配什麼圖案? [Pattern元素、IdMatch元素、Regex元素]
模式包含敏感性資訊類型要尋找的內容清單。 模式可以包括 RegEx、關鍵字和內建函數。 函數執行 RegEx 等任務來尋找日期或地址。 敏感性資訊類型可能會有多個模式,而每個模式的可信度都不同。
在下圖中,所有模式都會參考相同的規則運算式。 此正則表達式會尋找一個以空格(\s) ... (\s)包圍的九位數數字(\d{9})。 元素 IdMatch 會參考此規則運算式,而且這是尋找員工識別碼實體之所有模式的常見需求。
IdMatch 是模式要嘗試比對的識別碼。 一個 Pattern 元素必須只有一個 IdMatch 元素。
符合的模式比對會傳回計數和信賴水準,您可以在原則的條件中使用。 當您將偵測敏感性資訊類型的條件新增至原則時,您可以編輯計數和信賴層級,如下圖所示。 信賴水準 (也稱為比對準確度) 本文稍後會說明。
正規表示式功能強大,因此您需要了解一些問題。 例如,識別過多內容的 RegEx 可能會影響效能。 若要深入瞭解這些問題,請參閱本文稍後的 「需要注意的潛在驗證問題」 一節。
您想要求額外的證據嗎? [匹配元素,minCount屬性]
除了 IdMatch之外,模式還可以使用該 Match 元素來要求其他支持證據,例如關鍵字、RegEx、日期或地址。
A Pattern 可能包含多個 Match 元素:
- 直接在元素中
Pattern。 - 使用元素組合
Any。
Match 元素會以隱含的 AND 運算子聯結。 換句話說,必須滿足所有 Match 元素才能匹配模式。
您可以使用該 Any 元素引入 AND 或 OR 運算子。 本文稍後會說明此 Any 元素。
您可以使用選用 minCount 屬性來指定每個 Match 元素需要找到多少個相符項的實例。 例如,您可以指定只有在從關鍵字清單中找到至少兩個關鍵字時才滿足型樣。
關鍵字 [關鍵字、群組和字詞元素、matchStyle 和 caseSensitive 屬性]
如前所述,識別敏感資訊通常需要額外的關鍵字作為確鑿證據。 例如,除了比對九位數的數字之外,您還可以使用 Keyword 元素尋找「card」、「badge」或「ID」等單字。 元素 Keyword 具有可 ID 由多個模式或實體中的多個 Match 元素參考的屬性。
關鍵字會以元素中的元素清單 Term 形式包含在內 Group 。 元素具有GroupmatchStyle兩個可能值的屬性:
matchStyle=“word”:單字比對可識別以空格或其他分隔符號包圍的整個單字。 除非您需要匹配亞洲語言中的單詞或單詞的一部分,否則您應該始終使用 單詞 。
matchStyle=“string”:字串比對可識別字串,無論它們被什麼包圍。 例如,“ID” 會同時符合 “bid” 和 “idea”。 只有在您需要比對亞洲單字或關鍵字可能包含在其他字串中時才使用
string。
最後,可以使用 caseSensitive 元素的 Term 屬性來指定內容必須與關鍵字完全匹配,包括小寫和大寫字母。
規則運算式 [Regex 元素]
在此範例中,員工 ID 實體已使用元素 IdMatch 來參考模式的正則運算式:以空格包圍的九位數數字。 此外,模式可以使用 Match 元素來引用其他 Regex 元素來識別佐證證據,例如美國郵遞區號格式的五位數或九位數數字。
其他模式,例如日期或地址 [內建函式]
敏感性資訊類型也可以使用內建函式來識別確鑿的證據。 例如,美國日期、歐盟日期、到期日或美國地址。 Microsoft 365 不支援上傳您自己的自訂函式。 但是,當您建立自訂敏感性資訊類型時,您的實體可以參考內建函式。
例如,員工 ID 徽章上有僱用日期,因此此自訂實體可以使用內建 Func_us_date 函數來識別美國常用格式的日期。
如需詳細資訊,請參閱 敏感性資訊類型函式。
不同的辨識項組合 [任何元素、minMatches 和 maxMatches 屬性]
在元素 Pattern 中,所有 IdMatch 和 Match 元素都以隱含的 AND 運算子連接。 換句話說,必須先滿足所有匹配項,才能滿足模式。
您可以使用元素來 Any 分組 Match 元素,以建立更彈性的比對邏輯。 例如,您可以使用元素來 Any 比對其子 Match 元素的所有、無或確切的子集。
元素 Any 具有選用 minMatches 和 maxMatches 屬性,可用來定義在比對型樣之前必須滿足多少子 Match 元素。 這些屬性定義元素的Match數目,而不是為相符找到的證據實例數目。 若要定義特定相符專案的執行個體數目下限,例如清單中的兩個關鍵字,請使用元素的Match屬性 (minCount 請參閱上述) 。
與至少一個子 Match 元素相符
若要只要求最小數量 Match 的元素,您可以使用屬性 minMatches 。 實際上,這些 Match 元素會以隱含的 OR 運算子聯結。 如果從任一清單中找到美國格式的日期或關鍵字,則會滿足此 Any 元素。
<Any minMatches="1" >
<Match idRef="Func_us_date" />
<Match idRef="Keyword_employee" />
<Match idRef="Keyword_badge" />
</Any>
比對任一子 Match 元素的精確子集
若要要求精確數量Match的元素,請將 和 maxMatches 設定minMatches為相同的值。 只有在找到一個日期或關鍵字時,才會滿足此 Any 元素。 如果還有更多相符項,則不會相符模式。
<Any minMatches="1" maxMatches="1" >
<Match idRef="Func_us_date" />
<Match idRef="Keyword_employee" />
<Match idRef="Keyword_badge" />
</Any>
不匹配任何子項“匹配”元素
如果您想要要求沒有特定證據來滿足模式,您可以將 minMatches 和 maxMatches 都設定為 0。 如果您有關鍵字清單或其他可能表示誤報的證據,這會很有用。
例如,員工 ID 實體會尋找關鍵字 “card”,因為它可能參考 “ID card”。 但是,如果卡只出現在短語“信用卡”中,則此內容中的“卡”不太可能意味著“身份證”。 因此,您可以將「信用卡」作為關鍵字新增至您想要排除以滿足模式的字詞清單中。
<Any minMatches="0" maxMatches="0" >
<Match idRef="Keyword_false_positives_local" />
<Match idRef="Keyword_false_positives_intl" />
</Any>
比對數個唯一字詞
如果您想要比對數個唯一字詞,請使用 uniqueResults 參數,設定為 true,如下列範例所示:
<Pattern confidenceLevel="75">
<IdMatch idRef="Salary_Revision_terms" />
<Match idRef=" Salary_Revision_ID " minCount="3" uniqueResults="true" />
</Pattern>
在此範例中,使用至少三個唯一相符項目定義薪資修訂的模式。
其他證據必須與實體有多近? [patternsProximity 屬性]
您的敏感性資訊類型正在尋找代表員工識別碼的模式,而且作為該模式的一部分,它也會尋找確鑿的辨識項,例如「識別碼」等關鍵字。 這些證據越接近,模式就越有可能是實際的員工 ID。 您可以使用 Entity 元素的必要 patternsProximity 屬性,來判斷模式中的其他辨識項必須與實體的接近程度。
針對實體中的每個模式,patternsProximity 屬性值會定義距離 Unicode 字元 (距離,) IdMatch 位置,針對該模式指定的所有其他相符專案。 鄰近視窗是由 IdMatch 位置錨定,視窗延伸至 IdMatch 的左側和右側。
下列範例說明鄰近視窗如何影響模式比對,其中員工識別碼自訂實體的 IdMatch 元素至少需要一個關鍵字或日期的佐證比對。 只有 ID1 相符,因為針對 ID2 和 ID3,在鄰近視窗內找不到或只找到部分證實證據。
對於電子郵件,郵件內文和每個附件都會被視為單獨的項目。 這表示鄰近視窗不會延伸到每個專案的結尾。 對於附件或本文) (每個項目,idMatch 和確證證據都需要位於該項目中。
不同模式的正確置信度是多少? [confidenceLevel 屬性、recommendedConfidence 屬性]
模式所需的證據越多,您就越有信心在比對模式時已識別實際實體 (,例如員工 ID) 。 例如,您對需要九位數 ID 號碼、聘用日期和關鍵字的模式的信心比只需要九位數 ID 號碼的模式更有信心。
Pattern 元素有必要的 confidenceLevel 屬性。 您可以將 confidence (Level 的值視為 65/75/85 之間的值,表示低/中/高信賴水準) 實體中每個模式的唯一 ID。 當您上傳自訂機密資訊類型,然後建立原則後,您便可以在您建立的規則條件中參照這些信賴等級。
除了每個 Pattern 的 confidenceLevel 以外,Entity 還具有 recommendedConfidence 屬性。 建議的信賴屬性可視為規則的預設信賴等級使用。 當您在原則中建立規則時,如果您未指定要使用的規則信賴等級,則該規則會根據實體的建議信賴等級進行比對。 recommendedConfidence 屬性是規則套件中每個實體識別碼的必要屬性,如果遺漏,您將無法儲存使用敏感性資訊類型的原則。
您想要在 Purview 入口網站的 UI 中支援其他語言嗎? [LocalizedStrings 元素]
如果您的合規性小組使用 Microsoft Purview 入口網站 以不同的地區設定和不同語言建立原則,您可以提供自訂敏感性資訊類型的名稱和描述的當地語系化版本。 當您的合規性小組以您支援的語言使用 Microsoft 365 時,他們會在 UI 中看到當地語系化的名稱。
Rules 元素必須包含 LocalizedStrings 元素,其中包含參考自訂實體 GUID 的 Resource 元素。 接著,每個 Resource 元素都包含一或多個 Name 和 Description 元素,每個元素都會使用 langcode 屬性來提供特定語言的當地語系化字串。
您只會針對自定義敏感性資訊類型在合規性中心 UI 中的顯示方式使用當地語系化字串。 您無法使用當地語系化字串以提供不同當地語系化版本的關鍵字清單或規則運算式。
其他規則套件標記 [RulePack GUID]
最後,每個 RulePackage 的開頭都包含一些您需要填寫的一般資訊。 您可以使用下列標記做為範本,並將「. . “佔位符,其中包含您自己的信息。
最重要的是,您必須產生 RulePack 的 GUID。 稍早,您已為實體產生 GUID;這是 RulePack 的第二個 GUID。 產生 GUID 的方式有數種,但您可以透過在 PowerShell 中輸入 [guid]::NewGuid()便可輕鬆完成。
版本元素也很重要。 當您第一次上傳規則套件時,Microsoft 365 會記下版本號碼。 稍後,如果您更新規則套件並上傳新版本,請務必更新版本號碼,否則 Microsoft 365 不會部署規則套件。
<?xml version="1.0" encoding="utf-16"?>
<RulePackage xmlns="http://schemas.microsoft.com/office/2011/mce">
<RulePack id=". . .">
<Version major="1" minor="0" build="0" revision="0" />
<Publisher id=". . ." />
<Details defaultLangCode=". . .">
<LocalizedDetails langcode=" . . . ">
<PublisherName>. . .</PublisherName>
<Name>. . .</Name>
<Description>. . .</Description>
</LocalizedDetails>
</Details>
</RulePack>
<Rules>
. . .
</Rules>
</RulePackage>
完成後,您的 RulePack 元素看起來應該像這樣。
驗證者
Microsoft 365 會公開常用 SIT 的函式處理器作為驗證器。 這是它們的列表。
目前可用的驗證者列表
Func_credit_cardFunc_ssnFunc_unformatted_ssnFunc_randomized_formatted_ssnFunc_randomized_unformatted_ssnFunc_aba_routingFunc_south_africa_identification_numberFunc_brazil_cpfFunc_ibanFunc_brazil_cnpjFunc_swedish_national_identifierFunc_india_aadhaarFunc_uk_nhs_numberFunc_Turkish_National_IdFunc_australian_tax_file_numberFunc_usa_uk_passportFunc_canadian_sinFunc_formatted_itinFunc_unformatted_itinFunc_dea_number_v2Func_dea_numberFunc_japanese_my_number_personalFunc_japanese_my_number_corporate
這使您能夠定義自己的正則表達式並驗證它們。 若要使用驗證器,請定義您自己的 RegEx,並使用屬性 Validator 來新增您選擇的函數處理器。 定義之後,您可以在 SIT 中使用此 RegEx。
在下列範例中,會為信用卡定義正則運算式 - Regex_credit_card_AdditionalDelimiters,然後使用 Func_credit_card 作為驗證器,使用信用卡的總和檢查碼函式進行驗證。
<Regex id="Regex_credit_card_AdditionalDelimiters" validators="Func_credit_card"> (?:^|[\s,;\:\(\)\[\]"'])([0-9]{4}[ -_][0-9]{4}[ -_][0-9]{4}[ -_][0-9]{4})(?:$|[\s,;\:\(\)\[\]"'])</Regex>
<Entity id="675634eb7-edc8-4019-85dd-5a5c1f2bb085" patternsProximity="300" recommendedConfidence="85">
<Pattern confidenceLevel="85">
<IdMatch idRef="Regex_credit_card_AdditionalDelimiters" />
<Any minMatches="1">
<Match idRef="Keyword_cc_verification" />
<Match idRef="Keyword_cc_name" />
<Match idRef="Func_expiration_date" />
</Any>
</Pattern>
</Entity>
Microsoft 365 提供兩個泛型驗證器
總和檢查碼驗證器
在此範例中,定義了員工 ID 的總和檢查碼驗證器,以驗證 EmployeeID 的 RegEx。
<Validators id="EmployeeIDChecksumValidator">
<Validator type="Checksum">
<Param name="Weights">2, 2, 2, 2, 2, 1</Param>
<Param name="Mod">28</Param>
<Param name="CheckDigit">2</Param> <!-- Check 2nd digit -->
<Param name="AllowAlphabets">1</Param> <!— 0 if no Alphabets -->
</Validator>
</Validators>
<Regex id="Regex_EmployeeID" validators="ChecksumValidator">(\d{5}[A-Z])</Regex>
<Entity id="675634eb7-edc8-4019-85dd-5a5c1f2bb085" patternsProximity="300" recommendedConfidence="85">
<Pattern confidenceLevel="85">
<IdMatch idRef="Regex_EmployeeID"/>
</Pattern>
</Entity>
日期驗證器
在此範例中,會針對 RegEx 定義日期驗證器,其中部分是 date。
<Validators id="date_validator_1"> <Validator type="DateSimple"> <Param name="Pattern">DDMMYYYY</Param> <!—supported patterns DDMMYYYY, MMDDYYYY, YYYYDDMM, YYYYMMDD, DDMMYYYY, DDMMYY, MMDDYY, YYDDMM, YYMMDD --> </Validator> </Validators>
<Regex id="date_regex_1" validators="date_validator_1">\d{8}</Regex>
針對 Exchange Online 變更
以前您可能使用 Exchange Online PowerShell 以匯入 DLP 的自訂機密資訊類型。 現在,您的自定義敏感性資訊類型可以在 Exchange 系統管理中心]“;https://go.microsoft.com/fwlink/p/?linkid=2059104") 和 Microsoft Purview 入口網站中使用。 作為此改進的一部分,您應該使用安全性 & 合規性 PowerShell 來匯入自訂敏感性資訊類型,您無法再從 PowerShell 匯入它們Exchange Online。 自訂機密資訊類型將繼續以與過去相同的方式運作,不過,要讓合規性中心的自訂機密資訊類型的變更顯示在 Exchange 系統管理中心,可能需要一個小時 (最多)。
請注意,在合規性中心中,您使用的是New-DlpSensitiveInformationTypeRulePackage Cmdlet 上傳規則套件。 (先前,在 Exchange 系統管理中心,您使用 ClassificationRuleCollection 的 Cmdlet.)
上傳您的規則套件
若要上傳您的規則套件,請執行下列步驟:
使用 Unicode 編碼方式將它儲存為 .xml 檔。
使用下列語法:
New-DlpSensitiveInformationTypeRulePackage -FileData ([System.IO.File]::ReadAllBytes('PathToUnicodeXMLFile'))此範例會從 C:\My Documents 上傳名為 MyNewRulePack.xml 的 Unicode XML 檔。
New-DlpSensitiveInformationTypeRulePackage -FileData ([System.IO.File]::ReadAllBytes('C:\My Documents\MyNewRulePack.xml'))如需詳細的語法和參數資訊,請參閱 New-DlpSensitiveInformationTypeRulePackage。
注意事項
套件支援的規則數量上限為 10 個,但每個套件可以包含多個敏感性資訊類型的定義。
若要確認您已成功建立新的機密資訊類型,請執行下列任一步驟:
執行 Get-DlpSensitiveInformationTypeRulePackage Cmdlet 來驗證新的規則套件,列於:
Get-DlpSensitiveInformationTypeRulePackage執行 Get-DlpSensitiveInformationType Cmdlet 來驗證機密資訊類型,列於:
Get-DlpSensitiveInformationType針對自訂機密資訊類型,Publisher 屬性值將為 Microsoft Corporation 以外的值。
將 <Name> 取代為機密資訊類型的名稱值 (例如,員工識別碼),然後執行 Get-DlpSensitiveInformationType Cmdlet:
Get-DlpSensitiveInformationType -Identity "<Name>"
要注意的潛在驗證問題
當您上傳規則套件 XML 檔案時,系統會驗證 XML 並檢查已知的不良型樣和明顯的效能問題。 以下是驗證檢查規則運算式的一些已知問題:
正規表示式中的後視判斷提示只能是固定長度。 可變長度判斷提示會導致錯誤。
例如,
"(?<=^|\s|_)"不會通過驗證。 ) (^第一個模式的長度為零,而接下來的兩個模式 (\s和_) 的長度為 1。 編寫此正則表達式"(?:^|(?<=\s|_))"的另一種方法是 。不能以交流發電機
|開頭或結尾,它匹配所有內容,因為它被認為是空匹配。例如,
|a或b|不會通過驗證。不能以模式開始
.{0,m}或結束,因為模式沒有功能用途,只會損害效能。例如,
.{0,50}ASDF或ASDF.{0,50}不會通過驗證。不能在群組中擁有
.{0,m}或.{1,m},也不能在群組中擁有.\*或.+。例如,
(.{0,50000})不會通過驗證。不能有任何角色與
{0,m}{1,m}組或重複器。例如,
(a\*)不會通過驗證。不能以 開
.{1,m}頭或結尾 ;改用.。例如,
.{1,m}asdf不會通過驗證。 請改用.asdf.無法在群組上 ((例如
*或+) ) 上有無限的中繼器。例如,
(xx)\*不會(xx)+通過驗證。關鍵字長度最多為 50 個字元。 如果您的群組內有關鍵字超出此限制,建議的解決方案是建立一組字詞,做為關鍵字字典,並在檔案中用於比對的實體或 idMatch 部分的 XML 結構內參考關鍵字字典的 GUID。
每個自定義敏感性資訊類型總共最多可以有 2,048 個關鍵字。
單一租用戶中關鍵字字典的大小上限為 480 KB,壓縮後符合 AD 架構限制。 在建立自訂敏感性資訊類型時,請視需要盡情參照同一字典。 請先在敏感性資訊類型中建立自訂關鍵字清單,並使用關鍵字字典(如果關鍵字清單中有超過 2048 個關鍵字,或關鍵字長度超過 50 個字元)。
租用戶中最多允許 50 個以關鍵字字典為基礎的敏感性資訊類型。
請確定每個 Entity 元素都包含 recommendedConfidence 屬性。
使用 PowerShell Cmdlet 時,還原序列化資料的傳回大小上限約為 1 MB。 這會影響規則套件 XML 檔的大小。 在處理時,請將上傳的檔案限制在 770 KB 的上限,作為要獲得一致結果且不會發生錯誤的建議限制。
XML 結構不需要格式化字元,例如空格、定位點或回車符/換行項目。 針對上傳將空格最佳化時,請注意這一點。 Microsoft Visual Code 等工具提供連接線功能,可壓縮 XML 檔案。
如果自訂機密資訊類型包含可能會影響效能的問題,則無法上傳,您可能會看到下列其中一個錯誤訊息:
Generic quantifiers which match more content than expected (e.g., '+', '*')Lookaround assertionsComplex grouping in conjunction with general quantifiers
重新編目內容以識別機密資訊
Microsoft 365 會使用搜尋檢索器識別及分類網站內容中的機密資訊。 每次上傳 SharePoint Online 和商務用 OneDrive 網站中的內容時,系統即會重新進行編目。 但是,若要在所有現有內容中識別您的新自訂機密資訊類型,該內容必須重新進行編目。
若要一次重新評估多個位置的內容,您可以使用隨選分類來建立掃描。 進一步了解隨選分類\
參考:規則套件 XML 結構描述定義
您可以複製此標記、將它儲存為 XSD 檔,然後用它來驗證規則套件 XML 檔。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:mce="http://schemas.microsoft.com/office/2011/mce"
targetNamespace="http://schemas.microsoft.com/office/2011/mce"
xmlns:xs="https://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
id="RulePackageSchema">
<!-- Use include if this schema has the same target namespace as the schema being referenced, otherwise use import -->
<xs:element name="RulePackage" type="mce:RulePackageType"/>
<xs:simpleType name="LangType">
<xs:union memberTypes="xs:language">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType name="GuidType" final="#all">
<xs:restriction base="xs:token">
<xs:pattern value="[0-9a-fA-F]{8}\-([0-9a-fA-F]{4}\-){3}[0-9a-fA-F]{12}"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="RulePackageType">
<xs:sequence>
<xs:element name="RulePack" type="mce:RulePackType"/>
<xs:element name="Rules" type="mce:RulesType">
<xs:key name="UniqueRuleId">
<xs:selector xpath="mce:Entity|mce:Affinity|mce:Version/mce:Entity|mce:Version/mce:Affinity"/>
<xs:field xpath="@id"/>
</xs:key>
<xs:key name="UniqueProcessorId">
<xs:selector xpath="mce:Regex|mce:Keyword|mce:Fingerprint"></xs:selector>
<xs:field xpath="@id"/>
</xs:key>
<xs:key name="UniqueResourceIdRef">
<xs:selector xpath="mce:LocalizedStrings/mce:Resource"/>
<xs:field xpath="@idRef"/>
</xs:key>
<xs:keyref name="ReferencedRuleMustExist" refer="mce:UniqueRuleId">
<xs:selector xpath="mce:LocalizedStrings/mce:Resource"/>
<xs:field xpath="@idRef"/>
</xs:keyref>
<xs:keyref name="RuleMustHaveResource" refer="mce:UniqueResourceIdRef">
<xs:selector xpath="mce:Entity|mce:Affinity|mce:Version/mce:Entity|mce:Version/mce:Affinity"/>
<xs:field xpath="@id"/>
</xs:keyref>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="RulePackType">
<xs:sequence>
<xs:element name="Version" type="mce:VersionType"/>
<xs:element name="Publisher" type="mce:PublisherType"/>
<xs:element name="Details" type="mce:DetailsType">
<xs:key name="UniqueLangCodeInLocalizedDetails">
<xs:selector xpath="mce:LocalizedDetails"/>
<xs:field xpath="@langcode"/>
</xs:key>
<xs:keyref name="DefaultLangCodeMustExist" refer="mce:UniqueLangCodeInLocalizedDetails">
<xs:selector xpath="."/>
<xs:field xpath="@defaultLangCode"/>
</xs:keyref>
</xs:element>
<xs:element name="Encryption" type="mce:EncryptionType" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="id" type="mce:GuidType" use="required"/>
</xs:complexType>
<xs:complexType name="VersionType">
<xs:attribute name="major" type="xs:unsignedShort" use="required"/>
<xs:attribute name="minor" type="xs:unsignedShort" use="required"/>
<xs:attribute name="build" type="xs:unsignedShort" use="required"/>
<xs:attribute name="revision" type="xs:unsignedShort" use="required"/>
</xs:complexType>
<xs:complexType name="PublisherType">
<xs:attribute name="id" type="mce:GuidType" use="required"/>
</xs:complexType>
<xs:complexType name="LocalizedDetailsType">
<xs:sequence>
<xs:element name="PublisherName" type="mce:NameType"/>
<xs:element name="Name" type="mce:RulePackNameType"/>
<xs:element name="Description" type="mce:OptionalNameType"/>
</xs:sequence>
<xs:attribute name="langcode" type="mce:LangType" use="required"/>
</xs:complexType>
<xs:complexType name="DetailsType">
<xs:sequence>
<xs:element name="LocalizedDetails" type="mce:LocalizedDetailsType" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="defaultLangCode" type="mce:LangType" use="required"/>
</xs:complexType>
<xs:complexType name="EncryptionType">
<xs:sequence>
<xs:element name="Key" type="xs:normalizedString"/>
<xs:element name="IV" type="xs:normalizedString"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="RulePackNameType">
<xs:restriction base="xs:token">
<xs:minLength value="1"/>
<xs:maxLength value="64"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="NameType">
<xs:restriction base="xs:normalizedString">
<xs:minLength value="1"/>
<xs:maxLength value="256"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OptionalNameType">
<xs:restriction base="xs:normalizedString">
<xs:minLength value="0"/>
<xs:maxLength value="256"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="RestrictedTermType">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="RulesType">
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="Entity" type="mce:EntityType"/>
<xs:element name="Affinity" type="mce:AffinityType"/>
<xs:element name="Version" type="mce:VersionedRuleType"/>
</xs:choice>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Regex" type="mce:RegexType"/>
<xs:element name="Keyword" type="mce:KeywordType"/>
<xs:element name="Fingerprint" type="mce:FingerprintType"/>
<xs:element name="ExtendedKeyword" type="mce:ExtendedKeywordType"/>
</xs:choice>
<xs:element name="LocalizedStrings" type="mce:LocalizedStringsType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="EntityType">
<xs:sequence>
<xs:element name="Pattern" type="mce:PatternType" maxOccurs="unbounded"/>
<xs:element name="Version" type="mce:VersionedPatternType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="id" type="mce:GuidType" use="required"/>
<xs:attribute name="patternsProximity" type="mce:ProximityType" use="required"/>
<xs:attribute name="recommendedConfidence" type="mce:ProbabilityType"/>
<xs:attribute name="workload" type="mce:WorkloadType"/>
</xs:complexType>
<xs:complexType name="PatternType">
<xs:sequence>
<xs:element name="IdMatch" type="mce:IdMatchType"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Match" type="mce:MatchType"/>
<xs:element name="Any" type="mce:AnyType"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="confidenceLevel" type="mce:ProbabilityType" use="required"/>
</xs:complexType>
<xs:complexType name="AffinityType">
<xs:sequence>
<xs:element name="Evidence" type="mce:EvidenceType" maxOccurs="unbounded"/>
<xs:element name="Version" type="mce:VersionedEvidenceType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="id" type="mce:GuidType" use="required"/>
<xs:attribute name="evidencesProximity" type="mce:ProximityType" use="required"/>
<xs:attribute name="thresholdConfidenceLevel" type="mce:ProbabilityType" use="required"/>
<xs:attribute name="workload" type="mce:WorkloadType"/>
</xs:complexType>
<xs:complexType name="EvidenceType">
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="Match" type="mce:MatchType"/>
<xs:element name="Any" type="mce:AnyType"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="confidenceLevel" type="mce:ProbabilityType" use="required"/>
</xs:complexType>
<xs:complexType name="IdMatchType">
<xs:attribute name="idRef" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="MatchType">
<xs:attribute name="idRef" type="xs:string" use="required"/>
<xs:attribute name="minCount" type="xs:positiveInteger" use="optional"/>
<xs:attribute name="uniqueResults" type="xs:boolean" use="optional"/>
</xs:complexType>
<xs:complexType name="AnyType">
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="Match" type="mce:MatchType"/>
<xs:element name="Any" type="mce:AnyType"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="minMatches" type="xs:nonNegativeInteger" default="1"/>
<xs:attribute name="maxMatches" type="xs:nonNegativeInteger" use="optional"/>
</xs:complexType>
<xs:simpleType name="ProximityType">
<xs:union>
<xs:simpleType>
<xs:restriction base='xs:string'>
<xs:enumeration value="unlimited"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType name="ProbabilityType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="WorkloadType">
<xs:restriction base="xs:string">
<xs:enumeration value="Exchange"/>
<xs:enumeration value="Outlook"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="EngineVersionType">
<xs:restriction base="xs:token">
<xs:pattern value="^\d{2}\.01?\.\d{3,4}\.\d{1,3}$"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="VersionedRuleType">
<xs:choice maxOccurs="unbounded">
<xs:element name="Entity" type="mce:EntityType"/>
<xs:element name="Affinity" type="mce:AffinityType"/>
</xs:choice>
<xs:attribute name="minEngineVersion" type="mce:EngineVersionType" use="required" />
</xs:complexType>
<xs:complexType name="VersionedPatternType">
<xs:sequence>
<xs:element name="Pattern" type="mce:PatternType" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="minEngineVersion" type="mce:EngineVersionType" use="required" />
</xs:complexType>
<xs:complexType name="VersionedEvidenceType">
<xs:sequence>
<xs:element name="Evidence" type="mce:EvidenceType" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="minEngineVersion" type="mce:EngineVersionType" use="required" />
</xs:complexType>
<xs:simpleType name="FingerprintValueType">
<xs:restriction base="xs:string">
<xs:minLength value="2732"/>
<xs:maxLength value="2732"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="FingerprintType">
<xs:simpleContent>
<xs:extension base="mce:FingerprintValueType">
<xs:attribute name="id" type="xs:token" use="required"/>
<xs:attribute name="threshold" type="mce:ProbabilityType" use="required"/>
<xs:attribute name="shingleCount" type="xs:positiveInteger" use="required"/>
<xs:attribute name="description" type="xs:string" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="RegexType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:token" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="KeywordType">
<xs:sequence>
<xs:element name="Group" type="mce:GroupType" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:token" use="required"/>
</xs:complexType>
<xs:complexType name="GroupType">
<xs:sequence>
<xs:choice>
<xs:element name="Term" type="mce:TermType" maxOccurs="unbounded"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="matchStyle" default="word">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="word"/>
<xs:enumeration value="string"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="TermType">
<xs:simpleContent>
<xs:extension base="mce:RestrictedTermType">
<xs:attribute name="caseSensitive" type="xs:boolean" default="false"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="ExtendedKeywordType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:token" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="LocalizedStringsType">
<xs:sequence>
<xs:element name="Resource" type="mce:ResourceType" maxOccurs="unbounded">
<xs:key name="UniqueLangCodeUsedInNamePerResource">
<xs:selector xpath="mce:Name"/>
<xs:field xpath="@langcode"/>
</xs:key>
<xs:key name="UniqueLangCodeUsedInDescriptionPerResource">
<xs:selector xpath="mce:Description"/>
<xs:field xpath="@langcode"/>
</xs:key>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ResourceType">
<xs:sequence>
<xs:element name="Name" type="mce:ResourceNameType" maxOccurs="unbounded"/>
<xs:element name="Description" type="mce:DescriptionType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="idRef" type="mce:GuidType" use="required"/>
</xs:complexType>
<xs:complexType name="ResourceNameType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="default" type="xs:boolean" default="false"/>
<xs:attribute name="langcode" type="mce:LangType" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="DescriptionType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="default" type="xs:boolean" default="false"/>
<xs:attribute name="langcode" type="mce:LangType" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>