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」を参照してください。
注:
カスタム機密情報の種類でキーワードの一部としてアンパサンド文字 (&) を使用する場合は、文字の周囲にスペースを含む用語を追加する必要があります。 たとえば、 L & P
notL&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 つのエンティティ
簡単なシナリオを次に示します。組織で使用される 9 桁の従業員 ID を含むコンテンツをポリシーで特定する必要があります。 パターンは、9 桁の数値を識別する規則の正規表現を参照します。 9 桁の数値を含むコンテンツは、パターンを満たします。
ただし、このパターンでは、長い数字や、従業員 ID ではない他の種類の 9 桁の数字など、 任意 の 9 桁の数値を識別できます。 この種類の望ましくない一致は、 誤検知と呼ばれます。
より一般的なシナリオ: パターンが複数あるエンティティ
誤検知の可能性があるため、通常は複数のパターンを使用してエンティティを定義します。 複数のパターンによって、ターゲット エンティティのサポート証拠が提供されます。 たとえば、追加のキーワード、日付、またはその他のテキストは、元のエンティティ (たとえば、9 桁の従業員番号) を識別するのに役立ちます。
たとえば、従業員 ID を含むコンテンツを識別する可能性を高めるために、検索する他のパターンを定義できます。
- 採用日を識別するパターン。
- 採用日と "従業員 ID" キーワードの両方を識別するパターン。
複数パターンの一致について考慮すべき重要な点があります。
より多くの証拠が必要なパターンの方が信頼度が高くなります。 信頼レベルに基づいて、次のアクションを実行できます。
- 信頼度の高い一致で、より制限の厳しいアクション (コンテンツのブロックなど) を使用します。
- 信頼性の低い一致で制限の少ないアクション (通知の送信など) を使用します。
サポート
IdMatch
要素とMatch
要素は、Pattern
ではなく、実際にはRule
要素の子である RegEx とキーワードを参照します。Pattern
はサポートする要素を参照しますが、Rule
に含まれています。 この動作は、正規表現やキーワード リストなどのサポート要素の 1 つの定義を、複数のエンティティとパターンで参照できることを意味します。
識別する必要があるエンティティは何ですか? [Entity 要素、ID 属性]
エンティティは、適切に定義されたパターンを持つ機密情報の種類 (クレジット カード番号など) です。 各エンティティには、その ID として一意の GUID があります。
エンティティに名前を付けて GUID を生成する
- 任意の XML エディターで、
Rules
とEntity
要素を追加します。 - 従業員 ID など、カスタム エンティティの名前を含むコメントを追加します。 後で、ローカライズされた文字列セクションにエンティティ名を追加すると、ポリシーを作成するときに管理センターにその名前が表示されます。
- エンティティの一意の GUID を生成します。 たとえば、Windows PowerShell では、コマンド
[guid]::NewGuid()
を実行できます。 後で、エンティティのローカライズされた文字列セクションにも GUID を追加します。
どのパターンに一致しますか? [Pattern 要素、IdMatch 要素、Regex 要素]
パターンには、機密情報の種類が探しているものの一覧が含まれています。 パターンには、RegExes、キーワード、組み込み関数を含めることができます。 関数は、RegExes を実行して日付やアドレスを見つけるなどのタスクを実行します。 機密情報の種類には、固有の信頼レベルを持つ複数のパターンを指定することができます。
次の図では、すべてのパターンが同じ正規表現を参照しています。 この RegEx は、空白(\s) ... (\s)
で囲まれた 9 桁の数値(\d{9})
を検索します。
IdMatch
要素は、この正規表現を参照し、Employee ID エンティティを検索するすべてのパターンに対する一般的な要件です。
IdMatch
は、パターンが一致しようとしている識別子です。
Pattern
要素には、IdMatch
要素が 1 つだけ必要です。
満たされたパターンの一致は、カウントと信頼度レベルを返します。これは、ポリシーの条件で使用できます。 機密情報の種類を検出するための条件をポリシーに追加すると、次の図に示すように、カウントと信頼度レベルを編集できます。 信頼レベル (一致精度とも呼ばれます) については、この記事の後半で説明します。
正規表現は強力であるため、知っておくべき問題があります。 たとえば、あまりにも多くのコンテンツを識別する RegEx は、パフォーマンスに影響を与える可能性があります。 これらの問題の詳細については、この記事の後半の「 注意すべき潜在的な検証の問題 」セクションを参照してください。
追加の証拠を必要としますか? [Match 要素、minCount 属性]
IdMatch
に加えて、パターンでは Match
要素を使用して、キーワード、RegEx、日付、アドレスなどの追加のサポート証拠を要求できます。
Pattern
には、複数のMatch
要素が含まれる場合があります。
-
Pattern
要素内で直接。 -
Any
要素を使用して結合します。
Match
要素は暗黙的な AND 演算子で結合されます。 つまり、パターンを一致させるには、すべての Match
要素を満たす必要があります。
Any
要素を使用して、AND 演算子または OR 演算子を導入できます。
Any
要素については、この記事の後半で説明します。
省略可能な minCount
属性を使用して、 Match
要素ごとに一致する必要がある一致のインスタンスの数を指定できます。 たとえば、1 つのキーワード リストから少なくとも 2 つのキーワードが見つかった場合にのみ、パターンが満たされるように指定できます。
キーワード [Keyword 要素、Group 要素、Term 要素、matchStyle 属性、caseSensitive 属性]
前述のように、機密情報を特定するには、多くの場合、裏付け的な証拠として追加のキーワードが必要です。 たとえば、9 桁の数値の照合に加えて、Keyword 要素を使用して "card"、"badge"、または "ID" などの単語を検索できます。
Keyword
要素には、複数のパターンまたはエンティティ内の複数のMatch
要素によって参照できるID
属性があります。
キーワードは、Group
要素のTerm
要素の一覧として含まれます。
Group
要素には、次の 2 つの値を持つmatchStyle
属性があります。
matchStyle="word": 単語の一致は、空白またはその他の区切り記号で囲まれた単語全体を識別します。 アジア言語の 単語または単語 の一部を一致させる必要がない限り、常に単語を使用する必要があります。
matchStyle="string": 文字列の一致は、文字列が囲まれたものに関係なく、文字列を識別します。 たとえば、"ID" は "bid" と "idea" の両方に一致します。
string
は、アジアの単語と一致させる必要がある場合、またはキーワードが他の文字列に含まれている可能性がある場合にのみ使用します。
最後に、Term
要素の caseSensitive
属性を使用して、コンテンツが小文字や大文字など、キーワードと正確に一致する必要があることを指定できます。
正規表現 [Regex 要素]
この例では、従業員 ID
エンティティは、既に IdMatch
要素を使用して、パターンの正規表現 (空白で囲まれた 9 桁の数値) を参照しています。 さらに、パターンでは、 Match
要素を使用して追加の Regex
要素を参照して、米国の郵便番号の形式で 5 桁または 9 桁の番号などの裏付けとなる証拠を識別できます。
日付や住所などのその他のパターン [組み込み関数]
機密情報の種類では、組み込みの関数を使用して、裏付けの証拠を識別することもできます。 たとえば、米国の日付、EU の日付、有効期限、米国の住所などです。 Microsoft 365 では、独自のカスタム関数のアップロードはサポートされていません。 ただし、カスタム機密情報の種類を作成すると、エンティティは組み込みの関数を参照できます。
たとえば、従業員 ID バッジには雇用日があるため、このカスタム エンティティは組み込みの Func_us_date
関数を使用して、米国でよく使用される形式で日付を識別できます。
詳細については、「 機密情報の種類の関数」を参照してください。
証拠のさまざまな組み合わせ [Any 要素、minMatches 属性、maxMatches 属性]
Pattern
要素では、すべてのIdMatch
要素とMatch
要素が暗黙的な AND 演算子と結合されます。 つまり、パターンを満たす前にすべての一致を満たす必要があります。
Any
要素を使用してMatch
要素をグループ化することで、より柔軟な照合ロジックを作成できます。 たとえば、 Any
要素を使用して、子 Match
要素のすべて、なし、または正確なサブセットと一致させることができます。
Any
要素には、省略可能なminMatches
とmaxMatches
属性があり、パターンが一致する前に満たす必要がある子Match
要素の数を定義するために使用できます。 これらの属性は、一致する証拠のインスタンスの 数 ではなく、 Match
要素の数を定義します。 リストの 2 つのキーワードなど、特定の一致のインスタンスの最小数を定義するには、Match
要素の minCount
属性を使用します (上記を参照)。
少なくとも 1 つの子 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
要素の正確な数を要求するには、minMatches
とmaxMatches
を同じ値に設定します。 この Any
要素は、正確に 1 つの日付またはキーワードが見つかった場合にのみ満たされます。 一致するものがそれ以上ある場合、パターンは一致しません。
<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 属性値は、そのパターンに指定されている他のすべての一致の IdMatch 位置からの距離 (Unicode 文字) を定義します。 近接ウィンドウは、IdMatch の場所によってアンカーされ、IdMatch の左側と右側にウィンドウが展開されます。
次の例は、従業員 ID カスタム エンティティの IdMatch 要素がキーワードまたは日付の少なくとも 1 つの照合を必要とするパターン マッチングに近接ウィンドウがどのように影響するかを示しています。 ID2 と ID3 の場合は、近接ウィンドウ内に証拠が見つからないか、部分的な検証証拠しか見つからないため、ID1 のみが一致します。
電子メールの場合、メッセージ本文と各添付ファイルは個別のアイテムとして扱われます。 つまり、近接ウィンドウは、これらの各項目の末尾を超えて拡張されません。 アイテム (添付ファイルまたは本文) ごとに、idMatch と corroborative の両方の証拠がその項目に存在する必要があります。
さまざまなパターンに適した信頼度レベルは何ですか? [confidenceLevel 属性、recommendedConfidence 属性]
パターンに必要な証拠が多いほど、パターンが一致したときに実際のエンティティ (従業員 ID など) が識別されたという信頼度が高まります。 たとえば、9 桁の ID 番号のみを必要とするパターンよりも、近接して 9 桁の ID 番号、雇用日、キーワードを必要とするパターンに対する信頼度が高くなります。
Pattern 要素には必須の confidenceLevel 属性があります。 confidenceLevel の値 (低/中/高信頼レベルを示す 65/75/85 の値) は、エンティティ内の各パターンの一意の ID と考えることができます。 カスタムの機密情報の種類をアップロードし、ポリシーを作成したら、作成するルールの条件でその信頼度を参照できます。
Entity には各パターン の confidenceLevel に加え、 recommendedConfidence 属性があります。 recommendedConfidence 属性は、ルールの既定の信頼度と考えることができます。 ポリシーでルールを作成するときに、使用するルールの信頼レベルを指定しない場合、そのルールはエンティティの推奨信頼レベルに基づいて一致します。 規則パッケージの各エンティティ ID に対して recommendedConfidence 属性が必須であることに注意してください。見つからない場合は、機密情報の種類を使用するポリシーを保存できません。
コンプライアンス ポータルの UI で他の言語をサポートしますか? [LocalizedStrings 要素]
コンプライアンス チームが Microsoft Purview コンプライアンス ポータルを使用して、異なるロケールと異なる言語でポリシーを作成する場合は、カスタム機密情報の種類の名前と説明のローカライズされたバージョンを指定できます。 コンプライアンス チームが、サポートしている言語で Microsoft 365 を使用すると、UI にローカライズされた名前が表示されます。
Rules 要素には LocalizedStrings 要素が含まれている必要があります。この要素には、カスタム エンティティの GUID を参照する Resource 要素が含まれています。 さらに、各 Resource 要素には、 langcode
属性を使用して特定の言語のローカライズされた文字列を提供する 1 つ以上の Name 要素と Description 要素が含まれています。
ローカライズされた文字列は、カスタムの機密情報の種類がコンプライアンス センターの 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 要素は次のようになります。
バリデーター
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 を使用できます。
次の例では、クレジット カードに対して正規表現 - 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 を使用してカスタム機密情報の種類をインポートする必要があります。Exchange Online PowerShell からインポートすることはできません。 カスタムの機密情報の種類は以前と同様に使用できますが、コンプライアンス センターでカスタムの機密情報の種類を変更した場合、Exchange 管理センターに表示されるまでに最大 1 時間かかる可能性があります。
コンプライアンス センターでは、New-DlpSensitiveInformationTypeRulePackage コマンドレットを入力して、ルール パッケージをアップロードします。 (以前は、Exchange 管理センターで ClassificationRuleCollection のコマンドレットを使用しました)。
ルール パッケージをアップロードする
ルール パッケージをアップロードするには、次の手順を実行します。
ルールを Unicode エンコードで .xml ファイルとして保存します。
次の構文を使用してください。
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 ですが、各パッケージには複数の機密情報の種類の定義を含めることができます。
新しい機密情報の種類が正常に作成されたことを確認するには、次に示す手順のいずれかを実行します。
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})
は検証に合格しません。グループ内の
{0,m}
または{1,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 では、組織全体の再クロールを手動で要求することはできませんが、サイト コレクション、リスト、またはライブラリの再クロールを手動で要求できます。 詳細については、「サイト、 ライブラリ、またはリストのクロールとインデックス再作成を手動で要求する」を参照してください。
リファレンス: ルール パッケージ 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>