PowerShell を使用してカスタムの機密情報の種類を作成する

この記事では、カスタム機密情報の種類を定義する XML ルール パッケージ ファイルを作成する方法について説明します。 この記事では、従業員 ID を識別するカスタム機密情報の種類について説明します。 この記事のサンプル XML は、独自の XML ファイルの開始点として使用できます。

機密情報の種類の詳細については、「機密情報の 種類について」を参照してください。

整形式の XML ファイルを作成したら、PowerShell を使用して Microsoft 365 にアップロードできます。 次に、ポリシーでカスタム機密情報の種類を使用する準備ができました。 意図したとおりに機密情報を検出する際に、その有効性をテストできます。

注:

PowerShell で提供されるきめ細かい制御が必要ない場合は、Microsoft Purview コンプライアンス ポータルでカスタムの機密情報の種類を作成できます。 詳細については、「カスタムの機密情報の種類を作成する」をご覧ください。

ヒント

E5 のお客様でない場合は、90 日間の Microsoft Purview ソリューション試用版を使用して、Purview の追加機能が組織のデータ セキュリティとコンプライアンスのニーズの管理にどのように役立つかを確認してください。 Microsoft Purview コンプライアンス ポータルのトライアル ハブで今すぐ開始してください。 サインアップと試用期間の詳細については、こちらをご覧ください。

重要な免責事項

Microsoft サポートでは、コンテンツマッチング定義を作成できません。

カスタム コンテンツ マッチングの開発、テスト、デバッグには、独自の内部 IT リソースを使用するか、Microsoft コンサルティング サービス (MCS) などのコンサルティング サービスを使用する必要があります。 Microsoft サポートエンジニアは、この機能のサポートを制限できますが、カスタム コンテンツマッチングの提案がニーズを完全に満たすことを保証することはできません。

MCS は、テスト目的で正規表現を提供できます。 また、1 つの特定のコンテンツの例で期待どおりに動作しない既存の RegEx パターンのトラブルシューティングに関する支援を提供することもできます。

この記事の「 潜在的な検証の問題 」を参照してください。

テキストを処理するために使用されている Boost.RegEx (以前の RegEx++) エンジンの詳細については、「Boost.Regex 5.1.3」を参照してください。

注:

カスタム機密情報の種類でキーワード (keyword)の一部としてアンパサンド文字 (&) を使用する場合は、文字の周囲にスペースを含む用語を追加する必要があります。 たとえば、not を使用しますL&PL & 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 スキーマの基本的な構造を理解しておくことが重要です。 構造を理解すると、カスタムの機密情報の種類が適切なコンテンツを識別するのに役立ちます。

ルールは、1 つ以上のエンティティ (機密情報の種類とも呼ばれます) を定義します。 各エンティティは、1 つ以上のパターンを定義します。 パターンとは、ポリシーがコンテンツ (電子メールやドキュメントなど) を評価するときに検索するパターンです。

XML マークアップでは、"ルール" は機密情報の種類を定義するパターンを意味します。 この記事のルールへの参照を、他の Microsoft 機能で一般的な "条件" または "アクション" に関連付けないでください。

最もシンプルなシナリオ: パターンが 1 つのエンティティ

簡単なシナリオを次に示します。ポリシーで、organizationで使用される 9 桁の従業員 ID を含むコンテンツを特定します。 パターンは、9 桁の数値を識別する規則の正規表現を参照します。 9 桁の数値を含むコンテンツは、パターンを満たします。

1 つのパターンを持つエンティティの図。

ただし、このパターンでは、長い数字や、従業員 ID ではない他の種類の 9 桁の数字など、 任意 の 9 桁の数値を識別できます。 この種類の望ましくない一致は、 誤検知と呼ばれます。

より一般的なシナリオ: パターンが複数あるエンティティ

誤検知の可能性があるため、通常は複数のパターンを使用してエンティティを定義します。 複数のパターンによって、ターゲット エンティティのサポート証拠が提供されます。 たとえば、追加のキーワード、日付、またはその他のテキストは、元のエンティティ (たとえば、9 桁の従業員番号) を識別するのに役立ちます。

たとえば、従業員 ID を含むコンテンツを識別する可能性を高めるために、検索する他のパターンを定義できます。

  • 採用日を識別するパターン。
  • 採用日と "従業員 ID" キーワード (keyword)の両方を識別するパターン。

複数のパターンを持つエンティティの図。

複数パターンの一致について考慮すべき重要な点があります。

  • より多くの証拠が必要なパターンの方が信頼度が高くなります。 信頼レベルに基づいて、次のアクションを実行できます。

    • 信頼度の高い一致で、より制限の厳しいアクション (コンテンツのブロックなど) を使用します。
    • 信頼性の低い一致で制限の少ないアクション (通知の送信など) を使用します。
  • サポートIdMatch要素とMatch要素は、実際には 要素の子である RegExes とキーワードをRulePattern参照します。これは、 ではありません。 要素をPattern サポートする参照が、 に Rule含まれています。 この動作は、正規表現やキーワード (keyword)リストなどのサポート要素の 1 つの定義を、複数のエンティティとパターンで参照できることを意味します。

識別する必要があるエンティティは何ですか? [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 、1 つの IdMatch 要素が必要です。

1 つの Regex 要素を参照する複数の Pattern 要素を示す XML マークアップ。

満たされたパターンの一致は、カウントと信頼度レベルを返します。これは、ポリシーの条件で使用できます。 機密情報の種類を検出するための条件をポリシーに追加すると、次の図に示すように、カウントと信頼度レベルを編集できます。 信頼レベル (一致精度とも呼ばれます) については、この記事の後半で説明します。

インスタンス数と一致精度のオプション。

正規表現は強力であるため、知っておくべき問題があります。 たとえば、あまりにも多くのコンテンツを識別する RegEx は、パフォーマンスに影響を与える可能性があります。 これらの問題の詳細については、この記事の後半の「 注意すべき潜在的な検証の問題 」セクションを参照してください。

追加の証拠を必要としますか? [Match 要素、minCount 属性]

IdMatch加えて、パターンでは、 要素をMatch使用して、キーワード (keyword)、RegEx、日付、住所などの追加のサポート証拠を要求できます。

には Pattern 、複数の Match 要素が含まれる場合があります。

  • 要素内で Pattern 直接。
  • 要素を使用して Any 結合します。

Match 要素は暗黙的な AND 演算子で結合されます。 つまり、パターンを一致させるには、すべての Match 要素を満たす必要があります。

要素を Any 使用して、AND 演算子または OR 演算子を導入できます。 要素については Any 、この記事の後半で説明します。

省略可能な minCount 属性を使用して、各 Match 要素に対して一致する必要がある一致のインスタンスの数を指定できます。 たとえば、キーワード (keyword) リストから少なくとも 2 つのキーワードが見つかった場合にのみ、パターンが満たされるように指定できます。

minOccurs 属性を持つ Match 要素を示す XML マークアップ。

キーワード [Keyword 要素、Group 要素、Term 要素、matchStyle 属性、caseSensitive 属性]

前述のように、機密情報を特定するには、多くの場合、裏付け的な証拠として追加のキーワードが必要です。 たとえば、9 桁の数値に一致するだけでなく、Keyword 要素を使用して "カード"、"バッジ"、"ID" などの単語を検索できます。 Keyword要素には、複数のIDパターンまたはエンティティ内の複数Matchの要素によって参照できる属性があります。

キーワードは、要素内Groupの要素のTermリストとして含まれます。 要素には Group 、次の matchStyle 2 つの可能な値を持つ属性があります。

  • matchStyle="word": 単語の一致は、空白またはその他の区切り記号で囲まれた単語全体を識別します。 アジア言語の 単語または単語 の一部を一致させる必要がない限り、常に単語を使用する必要があります。

  • matchStyle="string": 文字列の一致は、文字列が囲まれたものに関係なく、文字列を識別します。 たとえば、"ID" は "bid" と "idea" の両方に一致します。 アジアの単語と一致させる必要がある場合、またはキーワード (keyword)が他の文字列に含まれている可能性がある場合にのみ使用stringします。

最後に、 要素の 属性をcaseSensitiveTerm使用して、コンテンツが小文字や大文字など、キーワード (keyword)と正確に一致する必要があることを指定できます。

キーワードを参照する Match 要素を示す XML マークアップ。

正規表現 [Regex 要素]

この例では、従業員 ID エンティティは既に 要素を IdMatch 使用してパターンの正規表現を参照しています。空白で囲まれた 9 桁の数値です。 さらに、パターンでは、 要素を Match 使用して追加 Regex の要素を参照して、米国の郵便番号の形式で 5 桁または 9 桁の数字などの裏付けとなる証拠を識別できます。

日付や住所などのその他のパターン [組み込み関数]

機密情報の種類では、組み込みの関数を使用して、裏付けの証拠を識別することもできます。 たとえば、米国の日付、EU の日付、有効期限、米国の住所などです。 Microsoft 365 では、独自のカスタム関数のアップロードはサポートされていません。 ただし、カスタム機密情報の種類を作成すると、エンティティは組み込みの関数を参照できます。

たとえば、従業員 ID バッジには雇用日があるため、このカスタム エンティティは組み込み Func_us_date 関数を使用して、米国でよく使用される形式で日付を識別できます。

詳細については、「 機密情報の種類の関数」を参照してください。

組み込み関数を参照する Match 要素を示す XML マークアップ。

証拠のさまざまな組み合わせ [Any 要素、minMatches 属性、maxMatches 属性]

Pattern要素では、すべてのIdMatch要素とMatch要素が暗黙的な AND 演算子と結合されます。 つまり、パターンを満たす前にすべての一致を満たす必要があります。

要素を使用して Any 要素をグループ Match 化することで、より柔軟な照合ロジックを作成できます。 たとえば、 要素を Any 使用して、すべて、なし、またはその子 Match 要素の正確なサブセットと一致させることができます。

Any要素には、パターンが一致する前に満たす必要がある子Match要素の数を定義するために使用できる省略可能なminMatches属性とmaxMatches属性があります。 これらの属性は、一致する証拠のMatchインスタンスの数ではなく、要素のを定義します。 リストの 2 つのキーワードなど、特定の一致のインスタンスの最小数を定義するには、要素の minCount 属性 Match を使用します (上記を参照)。

少なくとも 1 つの子 Match 要素に一致する

最小数の Match 要素のみを必要とするには、 属性を minMatches 使用できます。 実際には、これらの Match 要素は暗黙的な OR 演算子と結合されます。 このAny要素は、米国形式の日付またはいずれかのリストのキーワード (keyword)が見つかった場合に満たされます。

<Any minMatches="1" >
     <Match idRef="Func_us_date" />
     <Match idRef="Keyword_employee" />
     <Match idRef="Keyword_badge" />
</Any>

任意の子 Match 要素の完全サブセットと一致する

要素のMatch正確な数を要求するには、 と maxMatches を同じ値に設定minMatchesします。 このAny要素は、正確に 1 つの日付またはキーワード (keyword)が見つかった場合にのみ満たされます。 一致するものがそれ以上ある場合、パターンは一致しません。

<Any minMatches="1" maxMatches="1" >
     <Match idRef="Func_us_date" />
     <Match idRef="Keyword_employee" />
     <Match idRef="Keyword_badge" />
</Any>

子の "一致" 要素に一致しない

パターンを満たす特定の証拠がないことを要求する場合は、minMatches と maxMatches の両方を 0 に設定できます。 これは、誤検知を示す可能性があるキーワード (keyword)リストやその他の証拠がある場合に便利です。

たとえば、従業員 ID エンティティは"ID カード" を参照する可能性があるため、キーワード (keyword) "カード" を検索します。 ただし、"クレジット カード" という語句にのみカードが表示される場合、このコンテンツの "カード" は "ID カード" を意味する可能性は低いです。 そのため、"クレジット カード" をキーワード (keyword)として、パターンを満たすことから除外する用語の一覧に追加できます。

<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" などのキーワード (keyword)のような裏付けとなる証拠も探しています。 この証拠が近いほど、パターンが実際の従業員 ID である可能性が高くなります。 Entity 要素の必須 patternsProximity 属性を使用して、パターン内の他の証拠がエンティティにどの程度近い必要があるかどうかを判断できます。

patternsProximity 属性を示す XML マークアップ。

エンティティ内の各パターンについて、patternsProximity 属性値は、そのパターンに指定されている他のすべての一致の IdMatch 位置からの距離 (Unicode 文字) を定義します。 近接ウィンドウは、IdMatch の場所によってアンカーされ、IdMatch の左側と右側にウィンドウが展開されます。

近接ウィンドウの図。

次の例は、従業員 ID カスタム エンティティの IdMatch 要素がキーワード (keyword)または日付の少なくとも 1 つの照合を必要とするパターン マッチングに近接ウィンドウがどのように影響するかを示しています。 ID2 と ID3 の場合は、近接ウィンドウ内に証拠が見つからないか、部分的な検証証拠しか見つからないため、ID1 のみが一致します。

実証証拠と近接ウィンドウの図。

電子メールの場合、メッセージ本文と各添付ファイルは個別のアイテムとして扱われます。 つまり、近接ウィンドウは、これらの各項目の末尾を超えて拡張されません。 アイテム (添付ファイルまたは本文) ごとに、idMatch と corroborative の両方の証拠がその項目に存在する必要があります。

さまざまなパターンに適した信頼度レベルは何ですか? [confidenceLevel 属性、recommendedConfidence 属性]

パターンに必要な証拠が多いほど、パターンが一致したときに実際のエンティティ (従業員 ID など) が識別されたという信頼度が高まります。 たとえば、9 桁の ID 番号のみを必要とするパターンよりも、9 桁の ID 番号、雇用日、キーワード (keyword)を近接して必要とするパターンに対する信頼度が高くなります。

Pattern 要素には必須の confidenceLevel 属性があります。 confidenceLevel の値 (低/中/高信頼レベルを示す 65/75/85 の値) は、エンティティ内の各パターンの一意の ID と考えることができます。 カスタムの機密情報の種類をアップロードし、ポリシーを作成したら、作成するルールの条件でその信頼度を参照できます。

confidenceLevel 属性の値が異なる Pattern 要素を示す XML マークアップ。

Entity には各パターン の confidenceLevel に加え、 recommendedConfidence 属性があります。 recommendedConfidence 属性は、ルールの既定の信頼度と考えることができます。 ポリシーでルールを作成するときに、使用するルールの信頼レベルを指定しない場合、そのルールはエンティティの推奨信頼レベルに基づいて一致します。 規則パッケージの各エンティティ ID に対して recommendedConfidence 属性が必須であることに注意してください。見つからない場合は、機密情報の種類を使用するポリシーを保存できません。

コンプライアンス ポータルの UI で他の言語をサポートしますか? [LocalizedStrings 要素]

コンプライアンス チームがMicrosoft Purview コンプライアンス ポータルを使用して、異なるロケールと異なる言語でポリシーを作成する場合は、カスタム機密情報の種類の名前と説明のローカライズされたバージョンを指定できます。 コンプライアンス チームが、サポートしている言語で Microsoft 365 を使用すると、UI にローカライズされた名前が表示されます。

インスタンス数と一致精度の構成。

Rules 要素には LocalizedStrings 要素が含まれている必要があります。この要素には、カスタム エンティティの GUID を参照する Resource 要素が含まれています。 さらに、各 Resource 要素には、それぞれ属性を使用して特定の言語のローカライズされた文字列を langcode 提供する 1 つ以上の Name 要素と Description 要素が含まれています。

LocalizedStrings 要素の内容を示す XML マークアップ。

ローカライズされた文字列は、カスタムの機密情報の種類がコンプライアンス センターの UI で表示される方法にのみ使用します。 ローカライズされた文字列を使用して、キーワード リストまたは正規表現の複数のローカライズ バージョンを提供することはできません。

その他のルール パッケージ マークアップ [RulePack GUID]

最後に、各 RulePackage の先頭には、入力する必要がある一般的な情報が含まれています。 次のマークアップをテンプレートとして使用し、 を置き換えることができます。 . ." プレースホルダーには、独自の情報が含まれます。

最も重要なのは、RulePack の GUID を生成する必要があります。 前に、エンティティの GUID を生成しました。これは RulePack の 2 番目の 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 では、バリデーターとして一般的に使用される SID の関数プロセッサが公開されています。 それらの一覧を次に示します。

現在使用可能なバリデーターの一覧

  • 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 を使用できます。

次の例では、Credit カード に対して正規表現 - 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 には、2 つの汎用バリデーターが用意されています

チェックサム バリデーター

この例では、従業員 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 部分に対して日付検証コントロールが定義されています。

<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 コンプライアンス ポータルの両方で使用できるようになりました。 この改善の一環として、Security & Compliance PowerShell を使用してカスタム機密情報の種類をインポートする必要があります。PowerShell からインポートすることはできませんExchange Online。 カスタムの機密情報の種類は以前と同様に使用できますが、コンプライアンス センターでカスタムの機密情報の種類を変更した場合、Exchange 管理センターに表示されるまでに最大 1 時間かかる可能性があります。

コンプライアンス センターでは、New-DlpSensitiveInformationTypeRulePackage コマンドレットを入力して、ルール パッケージをアップロードします。 (以前は、Exchange 管理センターで ClassificationRuleCollection のコマンドレットを使用しました)。

ルール パッケージをアップロードする

ルール パッケージをアップロードするには、次の手順を実行します。

  1. ルールを Unicode エンコードで .xml ファイルとして保存します。

  2. セキュリティ/コンプライアンス PowerShell に接続する

  3. 次の構文を使用してください。

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

    この例では、MyNewRulePack.xml という名前の Unicode XML ファイルを C:\My Documents からアップロードします。

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

    構文とパラメーターの詳細情報については、New-dlpsensitiveinformationtyperulepackage をご覧ください。

    注:

    サポートされるルール パッケージの最大数は 10 ですが、各パッケージには複数の機密情報の種類の定義を含めることができます。

  4. 新しい機密情報の種類が正常に作成されたことを確認するには、次に示す手順のいずれかを実行します。

    • Get-DlpSensitiveInformationTypeRulePackage コマンドレットを実行して、新しいルール パッケージが一覧表示されることを確認します。

      Get-DlpSensitiveInformationTypeRulePackage
      
    • Get-DlpSensitiveInformationType コマンドレットを使用して、機密情報の種類が一覧表示されることを確認します。

      Get-DlpSensitiveInformationType
      

      カスタムの機密情報の種類の場合、Publisher プロパティ値を Microsoft Corporation 以外に設定します。

    • <Name> を機密情報の種類の名前値 (たとえば、従業員 ID) に置き換えて、Get-DlpSensitiveInformationType コマンドレットを実行します。

      Get-DlpSensitiveInformationType -Identity "<Name>"
      

注意する必要がある潜在的な検証の問題

ルール パッケージ XML ファイルをアップロードすると、システムは XML を検証し、既知の不適切なパターンと明らかなパフォーマンスの問題をチェックします。 検証でチェックされる既知の問題を次に示します。正規表現は次のとおりです。

  • 正規表現の Lookbehind アサーションは、固定長でのみ指定する必要があります。 可変長アサーションではエラーが発生します。

    たとえば、 "(?<=^|\s|_)" 検証は渡されません。 最初のパターン (^) は長さが 0 で、次の 2 つのパターン (\s_) の長さは 1 です。 この正規表現を記述する別の方法は です "(?:^|(?<=\s|_))"

  • alternator |で開始または終了することはできません。これは、空の一致と見なされるため、すべてと一致します。

    たとえば、 |a または b| は検証に合格しません。

  • 機能目的がなく、パフォーマンスのみを損なうパターンで .{0,m} 開始または終了することはできません。

    たとえば、 .{0,50}ASDF または ASDF.{0,50} は検証に合格しません。

  • .{0,m}.{1,m}または をグループに含めることはできません。また、グループ内にまたは .+ を含.\*めることはできません。

    たとえば、 (.{0,50000}) 検証は渡されません。

  • グループ内のまたは{1,m}リピーターを持つ{0,m}文字を持つことはできません。

    たとえば、 (a\*) 検証は渡されません。

  • で開始または終了 .{1,m}することはできません。代わりに、 を使用します .

    たとえば、 .{1,m}asdf 検証は渡されません。 代わりに、 を使用します .asdf

  • グループに無制限のリピータ (や +など*) を含めることはできません。

    たとえば、 (xx)\*(xx)+ 検証に合格しません。

  • キーワードの長さは最大 50 文字です。 グループ内にこれを超えるキーワードがある場合、推奨される解決策は、用語のグループをキーワード ディクショナリとして作成し、ファイル内の Match または idMatch のエンティティの一部として XML 構造内のキーワード ディクショナリの GUID を参照することです。

  • 各カスタム機密情報タイプには、合計で最大 2048 個のキーワードを含めることができます。

  • 1 つのテナント内のキーワード ディクショナリの最大サイズは、AD スキーマの制限に準拠するために圧縮された 480 KB です。 カスタムの機密情報の種類を作成する場合、同じ辞書を必要な回数だけ参照します。 キーワード リストに 2048 個を超えるキーワードがある場合、またはキーワードの長さが 50 文字を超える場合は、まず機密情報の種類のカスタム キーワード リストを作成し、キーワード辞書を使用します。

  • テナントでは、最大 50 のキーワード辞書ベースの機密情報の種類が許可されます。

  • 各 Entity 要素に recommendedConfidence 属性が含まれていることを確認します。

  • PowerShell コマンドレットを使用する場合、逆シリアル化されたデータの最大戻りサイズは約 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 for Business サイトのコンテンツが更新されると、自動的に再クロールされます。 ただし、既存のすべてのコンテンツで新しいカスタムの機密情報の種類を特定するには、そのコンテンツを再クロールする必要があります。

Microsoft 365 では、organization全体の再クロールを手動で要求することはできませんが、サイト コレクション、リスト、またはライブラリの再クロールを手動で要求できます。 詳細については、「サイト、 ライブラリ、またはリストのクロールとインデックス再作成を手動で要求する」を参照してください。

リファレンス: ルール パッケージ 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>

詳細情報