다음을 통해 공유


PowerShell을 사용한 사용자 지정 중요한 정보 유형 만들기

이 문서에서는 사용자 지정 중요한 정보 유형을 정의하는 XML 규칙 패키지 파일을 만드는 방법을 보여 줍니다. 이 문서에서는 직원 ID를 식별하는 사용자 지정 중요한 정보 유형을 설명합니다. 이 문서의 샘플 XML을 사용자 고유의 XML 파일의 시작점으로 사용할 수 있습니다.

중요한 정보 유형에 대한 자세한 내용은 중요한 정보 유형에 대해 알아보기를 참조하세요.

올바른 형식의 XML 파일을 만든 후에는 PowerShell을 사용하여 Microsoft 365에 업로드할 수 있습니다. 그런 다음 정책에서 사용자 지정 중요한 정보 유형을 사용할 준비가 된 것입니다. 의도한 대로 중요한 정보를 검색하는 효과를 테스트할 수 있습니다.

참고

PowerShell에서 제공하는 세분화된 컨트롤이 필요하지 않은 경우 Microsoft Purview 규정 준수 포털에서 사용자 지정 중요한 정보 유형을 만들 수 있습니다. 자세한 내용은 사용자 지정 중요한 정보 유형 만들기를 참조하세요.

E5 고객이 아닌 경우 90일 Microsoft Purview 솔루션 평가판을 사용하여 조직이 데이터 보안 및 규정 준수 요구 사항을 관리하는 데 도움이 되는 추가 Purview 기능을 살펴보세요. Microsoft Purview 규정 준수 포털 평가판 허브에서 지금 시작하세요. 등록 및 평가판 조건에 대한 세부 정보를 알아봅니다.

중요 고지 사항

Microsoft 지원은 콘텐츠 일치 정의를 만드는 데 도움이 되지 않습니다.

사용자 지정 콘텐츠 일치 개발, 테스트 및 디버깅의 경우 자체 내부 IT 리소스를 사용하거나 MCS(Microsoft Consulting Services)와 같은 컨설팅 서비스를 사용해야 합니다. Microsoft 지원 엔지니어는 이 기능에 대해 제한된 지원을 제공할 수 있지만 사용자 지정 콘텐츠 일치 제안이 요구 사항을 완전히 충족한다고 보장할 수는 없습니다.

MCS는 테스트를 위해 정규식을 제공할 수 있습니다. 또한 단일 특정 콘텐츠 예제에서 예상대로 작동하지 않는 기존 RegEx 패턴 문제를 해결하는 데 도움을 줄 수 있습니다.

이 문서에서 알아야 할 잠재적 유효성 검사 문제를 참조하세요.

텍스트 처리에 사용되는 Boost.RegEx(이전에는 RegEx++라고 함) 엔진에 대한 자세한 내용은 Boost.Regex 5.1.3을 참조하세요.

참고

사용자 지정 중요한 정보 형식에서 키워드의 일부로 앰퍼샌드 문자(&)를 사용하는 경우 문자 주위에 공백이 있는 용어를 추가해야 합니다. 예를 들어 를 사용하지 L & P않습니다L&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>

주요 요구 사항은 무엇인가요? [Rule, Entity, Pattern 요소]

규칙에 대한 XML 스키마의 기본 구조를 이해하는 것이 중요합니다. 구조를 이해하면 사용자 지정 중요한 정보 유형이 올바른 콘텐츠를 식별하는 데 도움이 됩니다.

규칙은 하나 이상의 엔터티(중요한 정보 형식이라고도 함)를 정의합니다. 각 엔터티는 하나 이상의 패턴을 정의합니다. 패턴은 콘텐츠(예: 전자 메일 및 문서)를 평가할 때 정책이 찾는 패턴입니다.

XML 태그에서 "규칙"은 중요한 정보 유형을 정의하는 패턴을 의미합니다. 이 문서의 규칙에 대한 참조를 다른 Microsoft 기능에서 흔히 볼 수 있는 "조건" 또는 "작업"과 연결하지 마세요.

가장 간단한 시나리오: 하나의 패턴을 갖는 엔터티

다음은 간단한 시나리오입니다. 정책에서 조직에서 사용되는 9자리 직원 ID가 포함된 콘텐츠를 식별하려고 합니다. 패턴은 9자리 숫자를 식별하는 규칙의 정규식을 나타냅니다. 9자리 숫자를 포함하는 모든 콘텐츠는 패턴을 충족합니다.

하나의 패턴이 있는 엔터티 다이어그램

그러나 이 패턴은 직원 ID가 아닌 더 긴 숫자 또는 기타 9자리 숫자 유형을 포함하여 9자리 숫자를 식별할 수 있습니다. 이러한 유형의 원치 않는 일치를 가양성이라고 합니다.

좀 더 일반적인 시나리오: 여러 패턴을 갖는 엔터티

가양성의 가능성 때문에 일반적으로 둘 이상의 패턴을 사용하여 엔터티를 정의합니다. 여러 패턴은 대상 엔터티에 대한 지원 증거를 제공합니다. 예를 들어 추가 키워드, 날짜 또는 기타 텍스트는 원래 엔터티(예: 9자리 직원 번호)를 식별하는 데 도움이 될 수 있습니다.

예를 들어 직원 ID가 포함된 콘텐츠를 식별할 가능성을 높이기 위해 찾을 다른 패턴을 정의할 수 있습니다.

  • 고용 날짜를 식별하는 패턴입니다.
  • 고용 날짜와 "직원 ID" 키워드를 모두 식별하는 패턴입니다.

여러 패턴이 있는 엔터티 다이어그램

여러 패턴 일치에 대해 고려해야 할 중요한 사항이 있습니다.

  • 더 많은 증거가 필요한 패턴은 더 높은 신뢰도 수준을 갖습니다. 신뢰도 수준에 따라 다음 작업을 수행할 수 있습니다.

    • 신뢰도가 높은 일치 항목으로 더 제한적인 작업(예: 콘텐츠 차단)을 사용합니다.
    • 신뢰도가 낮은 일치 항목으로 덜 제한적인 작업(예: 알림 보내기)을 사용합니다.
  • 지원 IdMatchMatch 요소는 RegExes 및 키워드를 참조하며, 실제로 는 가 아니라 Pattern요소의 Rule 자식입니다. Pattern 는 요소를 지원하는 참조이지만 에 Rule포함되어 있습니다. 이 동작은 정규식 또는 키워드 목록과 같은 지원 요소의 단일 정의를 여러 엔터티 및 패턴에서 참조할 수 있음을 의미합니다.

식별해야 하는 엔터티는 무엇인가요? [Entity 요소, ID 특성]

엔터티는 잘 정의된 패턴을 가진 신용 카드 번호와 같은 중요한 정보 유형입니다. 각 엔터티에는 ID로 고유한 GUID가 있습니다.

엔터티에 이름 지정 및 해당 GUID 생성

  1. 선택한 XML 편집기에서 및 Entity 요소를 추가 Rules 합니다.
  2. 직원 ID와 같은 사용자 지정 엔터티의 이름이 포함된 주석을 추가합니다. 나중에 지역화된 문자열 섹션에 엔터티 이름을 추가하고 정책을 만들 때 해당 이름이 관리 센터에 표시됩니다.
  3. 엔터티에 대한 고유한 GUID를 생성합니다. 예를 들어 Windows PowerShell에서 명령을 [guid]::NewGuid()실행할 수 있습니다. 나중에 엔터티의 지역화된 문자열 섹션에도 GUID를 추가합니다.

규칙 및 엔터티 요소를 보여 주는 XML 태그입니다.

일치하려는 패턴은 무엇인가요? [Pattern 요소, IdMatch 요소, Regex 요소]

패턴에는 중요한 정보 유형이 찾고 있는 항목 목록이 포함됩니다. 이 패턴에는 RegExes, 키워드 및 기본 제공 함수가 포함될 수 있습니다. 함수는 RegExes를 실행하여 날짜 또는 주소를 찾는 것과 같은 작업을 수행합니다. 중요한 정보 유형에는 고유한 신뢰도를 갖는 여러 개의 패턴이 있을 수 있습니다.

다음 다이어그램에서 모든 패턴은 동일한 정규식을 참조합니다. 이 RegEx는 공백(\s) ... (\s)으로 둘러싸인 9자리 숫자를 (\d{9}) 찾습니다. 요소는 IdMatch 이 정규식을 참조하며 Employee ID 엔터티를 찾는 모든 패턴에 대한 일반적인 요구 사항입니다. IdMatch 는 패턴이 일치하려고 하는 식별자입니다. 요소에는 Pattern 정확히 하나의 IdMatch 요소가 있어야 합니다.

단일 Regex 요소를 참조하는 여러 Pattern 요소를 보여 주는 XML 태그입니다.

만족 패턴 일치는 정책의 조건에서 사용할 수 있는 개수 및 신뢰도 수준을 반환합니다. 정책에 중요한 정보 유형을 검색하기 위한 조건을 추가하는 경우 다음 다이어그램과 같이 개수 및 신뢰도 수준을 편집할 수 있습니다. 신뢰도 수준(일치 정확도라고도 함)은 이 문서의 뒷부분에 설명되어 있습니다.

인스턴스 수 및 일치 정확도 옵션입니다.

정규식은 강력하므로 알아야 할 문제가 있습니다. 예를 들어 너무 많은 콘텐츠를 식별하는 RegEx는 성능에 영향을 줄 수 있습니다. 이러한 문제에 대한 자세한 내용은 이 문서의 뒷부분에 나오는 잠재적 유효성 검사 문제 섹션을 참조하세요.

추가 증거를 요구하시겠습니까? [Match 요소, minCount 특성]

외에도 IdMatch패턴은 요소를 사용하여 Match 키워드, RegEx, 날짜 또는 주소와 같은 추가 지원 증거를 요구할 수 있습니다.

에는 Pattern 다음과 같은 여러 Match 요소가 포함될 수 있습니다.

  • 요소에서 직접.Pattern
  • 요소를 사용하여 결합됩니다 Any .

Match 요소는 암시적 AND 연산자와 조인됩니다. 즉, 패턴이 일치하려면 모든 Match 요소가 충족되어야 합니다.

요소를 사용하여 Any AND 또는 OR 연산자를 소개할 수 있습니다. 요소는 이 Any 문서의 뒷부분에 설명되어 있습니다.

선택적 minCount 특성을 사용하여 각 Match 요소에 대해 일치하는 인스턴스 수를 지정할 수 있습니다. 예를 들어 키워드 목록에서 두 개 이상의 키워드를 찾을 때만 패턴이 충족되도록 지정할 수 있습니다.

minOccurs 특성이 있는 Match 요소를 보여 주는 XML 태그입니다.

키워드 [Keyword, Group 및 Term 요소, matchStyle 및 caseSensitive 특성]

앞에서 설명한 대로 중요한 정보를 식별하려면 종종 추가 키워드를 확증적인 증거로 사용해야 합니다. 예를 들어 9자리 숫자와 일치하는 것 외에도 Keyword 요소를 사용하여 "카드", "배지" 또는 "ID"와 같은 단어를 찾을 수 있습니다. 요소에는 KeywordID 여러 패턴 또는 엔터티의 여러 Match 요소에서 참조할 수 있는 특성이 있습니다.

키워드는 요소의 Term 요소 Group 목록으로 포함됩니다. 요소에는 Group 다음 두 개의 matchStyle 가능한 값이 있는 특성이 있습니다.

  • matchStyle="word": 단어 일치는 공백 또는 기타 구분 기호로 둘러싸인 전체 단어를 식별합니다. 단어 또는 단어의 일부를 아시아어로 일치시켜야 하는 경우가 아니면 항상 단어를 사용해야 합니다.

  • matchStyle="string": 문자열 일치는 문자열을 둘러싸는 항목에 관계없이 식별합니다. 예를 들어 "ID"는 "bid" 및 "idea"와 모두 일치합니다. 한글 단어를 일치시켜야 하거나 키워드가 다른 문자열에 포함될 수 있는 경우에만 사용합니다 string .

마지막으로 요소의 Term 특성을 사용하여 caseSensitive 콘텐츠가 소문자 및 대문자를 포함하여 키워드와 정확히 일치하도록 지정할 수 있습니다.

키워드를 참조하는 Match 요소를 보여 주는 XML 태그입니다.

정규식 [Regex 요소]

이 예제에서 직원 ID 엔터티는 이미 요소를 사용하여 IdMatch 패턴에 대한 정규식(공백으로 둘러싸인 9자리 숫자)을 참조합니다. 또한 패턴은 요소를 사용하여 Match 추가 Regex 요소를 참조하여 미국 우편 번호 형식의 5자리 또는 9자리 숫자와 같은 확증적 증거를 식별할 수 있습니다.

날짜 또는 주소와 같은 추가 패턴 [기본 제공 함수]

중요한 정보 유형은 기본 제공 함수를 사용하여 확증 증거를 식별할 수도 있습니다. 예를 들어 미국 날짜, EU 날짜, 만료 날짜 또는 미국 주소입니다. Microsoft 365는 사용자 지정 함수 업로드를 지원하지 않습니다. 그러나 사용자 지정 중요한 정보 형식을 만들 때 엔터티는 기본 제공 함수를 참조할 수 있습니다.

예를 들어 직원 ID 배지에는 고용 날짜가 있으므로 이 사용자 지정 엔터티는 기본 제공 Func_us_date 함수를 사용하여 미국에서 일반적으로 사용되는 형식으로 날짜를 식별할 수 있습니다.

자세한 내용은 중요한 정보 형식 함수를 참조하세요.

기본 제공 함수를 참조하는 Match 요소를 보여 주는 XML 태그입니다.

다양한 증거 조합 [Any 요소, minMatches 및 maxMatches 특성]

요소에서 Pattern 모든 IdMatchMatch 요소는 암시적 AND 연산자와 조인됩니다. 즉, 패턴이 충족되기 전에 모든 일치 항목이 충족되어야 합니다.

요소를 사용하여 요소를 그룹 Match 화하여 보다 유연한 일치 논리를 Any 만들 수 있습니다. 예를 들어 요소를 사용하여 자식 Match 요소의 Any 모든, 없음 또는 정확한 하위 집합을 일치시킬 수 있습니다.

요소에는 Any 패턴이 일치하기 전에 충족해야 하는 자식 Match 요소 수를 정의하는 데 사용할 수 있는 선택적 minMatchesmaxMatches 특성이 있습니다. 이러한 특성은 일치 항목에 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 엔터티는 "ID 카드"를 참조할 수 있으므로 "card" 키워드를 찾습니다. 그러나 카드가 "신용 카드"라는 문구에만 표시되는 경우 이 콘텐츠의 "카드"는 "ID 카드"를 의미하지 않을 수 있습니다. 따라서 패턴을 충족하지 않고 제외하려는 용어 목록에 키워드로 "신용 카드"를 추가할 수 있습니다.

<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>

이 예에는 3개 이상의 고유 일치 항목을 사용하여 급여 수정 사항에 대해 패턴이 정의되어 있습니다.

엔터티와 얼마나 가깝습니까? [patternsProximity 특성]

중요한 정보 유형은 직원 ID를 나타내는 패턴을 찾고 있으며 해당 패턴의 일부로 "ID"와 같은 키워드와 같은 확증적인 증거도 찾고 있습니다. 이 증거가 더 가까울수록 패턴이 실제 직원 ID일 가능성이 더 높습니다. Entity 요소의 필수 patternsProximity 특성을 사용하여 패턴의 다른 증명 정보가 엔터티에 얼마나 근접해야 하는지 확인할 수 있습니다.

patternsProximity 특성을 보여 주는 XML 태그입니다.

엔터티의 각 패턴에 대해 patternsProximity 특성 값은 해당 패턴에 지정된 다른 모든 일치 항목의 IdMatch 위치에서의 거리(유니코드 문자)를 정의합니다. 근접성 윈도우는 IdMatch 위치에 의해 IdMatch의 좌우로 확장되는 윈도우와 연결됩니다.

근접 창 다이어그램

아래 예제에서는 근접 창이 직원 ID 사용자 지정 엔터티의 IdMatch 요소에 키워드 또는 날짜의 하나 이상의 확증 일치가 필요한 패턴 일치에 미치는 영향을 보여 줍니다. ID1만 일치합니다. ID2 및 ID3의 경우 근접 창 내에서 일부 확증 증거가 없거나 일부만 발견되므로 일치합니다.

확증 증거 및 근접 창 다이어그램.

전자 메일의 경우 메시지 본문과 각 첨부 파일은 별도의 항목으로 처리됩니다. 즉, 근접 창이 이러한 각 항목의 끝 이상으로 확장되지 않습니다. 각 항목(첨부 파일 또는 본문)에 대해 idMatch 및 부식 증명 정보가 해당 항목에 있어야 합니다.

다양한 패턴에 적합한 신뢰도 수준은 무엇인가요? [confidenceLevel 특성, recommendedConfidence 특성]

패턴에 필요한 증거가 많을수록 패턴이 일치할 때 실제 엔터티(예: 직원 ID)가 식별되었다는 확신이 높아집니다. 예를 들어 9자리 ID 번호만 필요한 패턴보다 근접한 9자리 ID 번호, 고용 날짜 및 키워드가 필요한 패턴에 대한 신뢰도가 더 높습니다.

Pattern 요소는 confidenceLevel이라는 필수 속성을 갖습니다. confidenceLevel 값(낮은/중간/높은 신뢰도 수준을 나타내는 65/75/85 사이의 값)을 엔터티의 각 패턴에 대한 고유 ID로 생각할 수 있습니다. 사용자 지정 중요한 정보 유형을 업로드하고 정책을 만들었으면 이후 생성하는 규칙의 조건에서 신뢰도 수준을 참조할 수 있습니다.

confidenceLevel 특성에 대한 값이 서로 다른 패턴 요소를 보여 주는 XML 태그입니다.

Entity는 각 Pattern에 대핸 confidenceLevel 외에도 recommendedConfidence 속성을 갖습니다. 권장 신뢰도 속성은 규칙의 신뢰도 수준 기본값이라고 생각하면 됩니다. 정책에서 규칙을 만들 때 사용할 규칙에 대한 신뢰도 수준을 지정하지 않으면 해당 규칙은 엔터티의 권장 신뢰도 수준에 따라 일치합니다. 규칙 패키지의 각 엔터티 ID에 대해 recommendedConfidence 특성이 필수입니다. 누락된 경우 중요한 정보 유형을 사용하는 정책을 저장할 수 없습니다.

규정 준수 포털의 UI에서 다른 언어를 지원하시겠습니까? [LocalizedStrings 요소]

규정 준수 팀이 Microsoft Purview 규정 준수 포털을 사용하여 다른 로캘 및 다른 언어로 정책을 만드는 경우 사용자 지정 중요한 정보 유형에 대한 이름 및 설명의 지역화된 버전을 제공할 수 있습니다. 규정 준수 팀에서 지원되는 언어로 Microsoft 365를 사용하면 UI에 현지화된 이름이 표시됩니다.

인스턴스 수 및 일치 정확도 구성.

Rules 요소에는 사용자 지정 엔터티의 GUID를 참조하는 Resource 요소가 포함된 LocalizedStrings 요소가 포함되어야 합니다. 따라서 각 Resource 요소에는 각각 특성을 사용하여 langcode 특정 언어에 대해 지역화된 문자열을 제공하는 하나 이상의 Name 및 Description 요소가 포함됩니다.

LocalizedStrings 요소의 내용을 보여 주는 XML 태그입니다.

규정 준수 센터의 UI에 사용자 지정 중요한 정보 유형이 표시될 때만 지역화된 문자열을 사용합니다. 키워드 목록 또는 정규식의 다른 지역화된 버전을 제공할 때는 지역화된 문자열을 사용할 수 없습니다. 현지화된 문자열을 사용하여 키워드 목록이나 정규식의 현지화된 버전을 제공할 수는 없습니다.

다른 규칙 패키지 태그 [RulePack GUID]

마지막으로 각 RulePackage의 시작 부분에는 입력해야 하는 몇 가지 일반적인 정보가 포함되어 있습니다. 다음 태그를 템플릿으로 사용하고 "를 바꿀 수 있습니다. . " 사용자 고유의 정보가 있는 자리 표시자입니다.

가장 중요한 것은 RulePack에 대한 GUID를 생성해야 한다는 것입니다. 이전에는 엔터티에 대한 GUID를 생성했습니다. RulePack에 대한 두 번째 GUID입니다. GUID를 생성하는 방법에는 여러 가지가 있지만, PowerShell에서 [guid]::NewGuid()를 입력하면 간단하게 생성할 수 있습니다.

Version 요소도 중요합니다. 규칙 패키지를 처음으로 업로드하면 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 요소는 다음과 같습니다.

RulePack 요소를 보여 주는 XML 태그입니다.

유효성 검사기

Microsoft 365는 일반적으로 사용되는 SIT에 대한 함수 프로세서를 유효성 검사기로 노출합니다. 다음은 목록입니다.

현재 사용 가능한 유효성 검사기 목록

  • Func_credit_card
  • Func_ssn
  • Func_unformatted_ssn
  • Func_randomized_formatted_ssn
  • Func_randomized_unformatted_ssn
  • Func_aba_routing
  • Func_south_africa_identification_number
  • Func_brazil_cpf
  • Func_iban
  • Func_brazil_cnpj
  • Func_swedish_national_identifier
  • Func_india_aadhaar
  • Func_uk_nhs_number
  • Func_Turkish_National_Id
  • Func_australian_tax_file_number
  • Func_usa_uk_passport
  • Func_canadian_sin
  • Func_formatted_itin
  • Func_unformatted_itin
  • Func_dea_number_v2
  • Func_dea_number
  • Func_japanese_my_number_personal
  • Func_japanese_my_number_corporate

이렇게 하면 고유한 RegEx를 정의하고 유효성을 검사할 수 있습니다. 유효성 검사기를 사용하려면 고유한 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는 두 개의 일반 유효성 검사기를 제공합니다.

체크섬 유효성 검사기

이 예제에서는 EmployeeID용 RegEx의 유효성을 검사하기 위해 직원 ID에 대한 체크섬 유효성 검사기를 정의합니다.

<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 부분에 대해 날짜 유효성 검사기가 정의됩니다.

<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의 변경

이전에 DLP에 대한 사용자 지정 중요한 정보 유형을 가져오기 위해 Exchange Online PowerShell을 사용해 보았을 것입니다. 이제 Exchange 관리 센터]"https://go.microsoft.com/fwlink/p/?linkid=2059104") 및 Microsoft Purview 규정 준수 포털 모두에서 사용자 지정 중요한 정보 유형을 사용할 수 있습니다. 이 개선의 일환으로 보안 & 준수 PowerShell을 사용하여 사용자 지정 중요한 정보 유형을 가져와야 합니다. Exchange Online PowerShell에서 더 이상 가져올 수 없습니다. 사용자 지정 중요한 정보 유형은 전과 동일하게 계속 사용할 수 있지만, 규정 준수 센터에서 사용자 지정 중요한 정보 유형에 대한 변경 사항이 Exchange 관리 센터에 표시되려면 최대 1시간이 걸릴 수 있습니다.

규정 준수 센터에서 New-DlpSensitiveInformationTypeRulePackage cmdlet을 사용하여 규칙 패키지를 업로드할 수 있습니다. (이전에는 Exchange 관리 센터에서 ClassificationRuleCollection' cmdlet을 사용했습니다.)

규칙 패키지 업로드

규칙 패키지를 업로드하려면 다음 단계를 수행합니다.

  1. 유니코드 인코딩을 사용하여 .xml 파일로 저장합니다.

  2. Security & Compliance PowerShell에 연결

  3. 다음 구문을 사용합니다.

    New-DlpSensitiveInformationTypeRulePackage -FileData ([System.IO.File]::ReadAllBytes('PathToUnicodeXMLFile'))
    

    이 예제에서는 C:\My Documents에서 MyNewRulePack.xml이라는 유니코드 XML 파일을 업로드합니다.

    New-DlpSensitiveInformationTypeRulePackage -FileData ([System.IO.File]::ReadAllBytes('C:\My Documents\MyNewRulePack.xml'))
    

    구문과 매개 변수에 대한 자세한 내용은 새로 만들기-DlpSensitiveInformationTypeRulePackage를 참조하세요.

    참고

    지원되는 규칙 패키지의 최대 개수는 10개이지만 각 패키지에는 여러 중요한 정보 유형에 대한 정의가 포함될 수 있습니다.

  4. 새로운 중요한 정보 유형을 성공적으로 만들었는지 확인하려면 다음 단계를 수행합니다.

    • DlpSensitiveInformationTypeRulePackage cmdlet을 실행하여 새 규칙 패키지가 나열되는지 확인합니다.

      Get-DlpSensitiveInformationTypeRulePackage
      
    • DlpSensitiveInformationType cmdlet을 실행하여 중요한 정보 유형이 나열되는지 확인합니다.

      Get-DlpSensitiveInformationType
      

      사용자 지정 중요한 정보 유형의 경우 게시자 속성 값은 Microsoft Corporation이 아닌 다른 값이 됩니다.

    • <이름>을 중요한 정보 유형의 이름 값(예: 직원 ID)으로 바꾸고 Get-DlpSensitiveInformationType cmdlet을 실행합니다.

      Get-DlpSensitiveInformationType -Identity "<Name>"
      

인식해야 할 잠재적인 유효성 검사 문제

규칙 패키지 XML 파일을 업로드할 때 시스템은 XML의 유효성을 검사하고 알려진 잘못된 패턴과 명백한 성능 문제를 확인합니다. 유효성 검사에서 검사하는 몇 가지 알려진 문제인 정규식은 다음과 같습니다.

  • 정규식의 Lookbehind 어설션은 고정 길이여야 합니다. 가변 길이 어설션으로 인해 오류가 발생합니다.

    예를 들어 는 "(?<=^|\s|_)" 유효성 검사를 통과하지 않습니다. 첫 번째 패턴(^)은 길이가 0이고 다음 두 패턴(\s_)의 길이는 1입니다. 이 정규식을 작성하는 다른 방법은 입니다 "(?:^|(?<=\s|_))".

  • 빈 일치 항목으로 간주되므로 모든 항목과 일치하는 alternator |로 시작하거나 끝낼 수 없습니다.

    예를 들어 또는 b||a 유효성 검사를 통과하지 않습니다.

  • 기능적 목적이 없고 성능만 저하되는 패턴으로 .{0,m} 시작하거나 끝낼 수 없습니다.

    예를 들어 또는 ASDF.{0,50}.{0,50}ASDF 유효성 검사를 통과하지 않습니다.

  • 그룹에 또는 를 가질 .{0,m} 수 없으며 그룹에 또는 .+ 를 가질 .\*.{1,m} 없습니다.

    예를 들어 는 (.{0,50000}) 유효성 검사를 통과하지 않습니다.

  • 그룹에 또는 {1,m} 반복기가 있는 {0,m} 문자를 가질 수 없습니다.

    예를 들어 는 (a\*) 유효성 검사를 통과하지 않습니다.

  • 로 시작하거나 끝낼 .{1,m}수 없습니다. 대신 를 사용합니다 ..

    예를 들어 는 .{1,m}asdf 유효성 검사를 통과하지 않습니다. 대신 를 사용합니다 .asdf.

  • 그룹에 바인딩되지 않은 반복기(예: * 또는 +)를 가질 수 없습니다.

    예를 들어 및 (xx)+(xx)\* 유효성 검사를 통과하지 않습니다.

  • 키워드의 길이는 최대 50자입니다. 이 값을 초과하는 그룹에 키워드가 있는 경우 제안된 솔루션은 용어 그룹을 키워드 사전으로 만들고 파일의 일치 또는 ID 일치 엔티티의 일부로 XML 구조 내에서 키워드 사전의 GUID를 참조하는 것입니다.

  • 각 사용자 지정 중요 정보 유형은 최대 2048개의 키워드를 가질 수 있습니다.

  • 단일 테넌트에서 키워드 사전의 최대 크기는 AD 스키마 제한을 준수하도록 압축된 480KB입니다. 사용자 지정 중요한 정보 유형을 생성할 때 필요한 횟수만큼 동일한 사전을 참조합니다. 우선 중요한 정보 유형에 사용자 정의 키워드 목록을 만드는 것부터 시작하고 키워드 목록에 2048개 이상의 키워드가 있거나 키워드의 길이가 50자 이상인 경우 키워드 사전을 사용합니다.

  • 테넌트에는 최대 50개의 키워드 사전 기반 중요한 정보 유형이 허용됩니다.

  • 각 엔티티 요소에 권장되는 신뢰 속성이 포함되어 있는지 확인합니다.

  • PowerShell Cmdlet을 사용하는 경우 역직렬화된 데이터의 최대 반환 크기는 약 1메가바이트입니다. 규칙 팩 XML 파일 크기에 영향을 미칩니다. 업로드된 파일을 최대 770킬로바이트로 제한하여 오류 없이 일관된 결과를 얻으려면 제안된 제한을 사용하세요.

  • XML 구조에는 공백, 탭 또는 캐리지 리턴/줄 바꿈 항목과 같은 서식 문자가 필요하지 않습니다. 업로드 시 공간을 최적화할 때 이 점에 유의하세요. Microsoft Visual Code와 같은 도구는 XML 파일을 압축하기 위한 조인 라인 기능을 제공합니다.

사용자 지정 중요한 정보 유형에 성능에 영향을 줄 수 있는 문제가 포함된 경우 업로드되지 않으며 다음 오류 메시지 중 하나가 표시될 수 있습니다.

  • Generic quantifiers which match more content than expected (e.g., '+', '*')

  • Lookaround assertions

  • Complex grouping in conjunction with general quantifiers

콘텐츠를 다시 크롤링하여 중요한 정보 식별

Microsoft 365는 사이트 콘텐츠에서 중요한 정보를 식별하고 분류하기 위해 검색 크롤러를 사용합니다. SharePoint Online 및 비즈니스용 OneDrive의 콘텐츠는 업데이트될 때마다 자동으로 크롤링이 다시 수행됩니다. 그러나 기존의 모든 콘텐츠에서 새로운 사용자 지정 중요한 정보 유형을 식별하려면 해당 콘텐츠에 대한 크롤링을 다시 수행해야 합니다.

Microsoft 365에서는 전체 조직의 다시 크롤링을 수동으로 요청할 수는 없지만 사이트 모음, 목록 또는 라이브러리에 대한 다시 크롤링을 수동으로 요청할 수 있습니다. 자세한 내용은 사이트, 라이브러리 또는 목록의 크롤링 및 다시 인덱싱 수동 요청을 참조하세요.

참조: 규칙 패키지 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>

추가 정보