カスタム辞書は、語句のリストを照合するシンプルで強力な機能を提供します。カスタム辞書は、検出機能として、または組み込みの検出機能の例外リストとして使用できます。さらに、カスタム辞書を使用して組み込みの infoType 検出器を拡張することで、結果に対して追加の照合を実施できます。
このセクションでは、単語リストから標準のカスタム辞書検出器を作成する方法について説明します。
辞書のカスタム infoType 検出器の詳細
辞書のカスタム infoType 検出器を作成するには、API の概要で説明されているように、以下を含む CustomInfoType
オブジェクトを定義します。
- カスタム infoType 検出器に付ける名前。
InfoType
オブジェクト内に指定します。 - オプションの
Likelihood
値。このフィールドを指定しない場合、辞書項目と一致したものについて、デフォルトの可能性の値VERY_LIKELY
が返されます。 - オプションの
DetectionRule
オブジェクト、またはホットワード ルール。こうしたルールを適用すると、指定したホットワードの所定の近接範囲内にある結果の可能性を調整できます。ホットワード ルールの詳細については、一致の可能性のカスタマイズをご覧ください。 オプションの
SensitivityScore
値。このフィールドを省略すると、辞書項目と一致したものについて、デフォルトの機密レベルHIGH
が返されます。機密性スコアはデータ プロファイルで使用されます。データのプロファイリング時に、機密データの保護は、infoType の機密性スコアを使用して機密性レベルを計算します。
スキャンする単語のリストを含む
WordList
、またはスキャンする改行区切りのリストを含む単一のテキスト ファイルへのCloudStoragePath
としてのDictionary
。
辞書のカスタム infoType 検出器は JSON オブジェクトとしてすべての任意指定コンポーネントを含み、次のようになりますこの JSON には、Cloud Storage に保存されている辞書テキスト ファイルへのパスが含まれています。インラインの単語リストを表示するには、このトピックの後半の例をご覧ください。
{
"customInfoTypes":[
{
"infoType":{
"name":"CUSTOM_INFOTYPE_NAME"
},
"likelihood":"LIKELIHOOD_LEVEL",
"detectionRules":[
{
"hotwordRule":{
HOTWORD_RULE
}
},
...
],
"sensitivityScore":{
"score": "SENSITIVITY_SCORE"
},
"dictionary":
{
"cloudStoragePath":
{
"path": "gs://PATH_TO_TXT_FILE"
}
}
}
],
...
}
辞書での照合について
以下は、機密データの保護で辞書の単語とフレーズを照合する仕組みに関するガイダンスです。ここに示す内容は、標準カスタム辞書と大規模なカスタム辞書の両方に適用されます。
- 辞書の単語では大文字と小文字が区別されません。辞書に
Abby
が含まれている場合、abby
、ABBY
、Abby
などと一致します。 - スキャン対象の辞書やコンテンツ内のすべての文字(Unicode 基本多言語面に含まれる英字、数字、その他のアルファベット文字以外)は、照合のためのスキャン時に空白と見なされます。辞書で
Abby Abernathy
をスキャンすると、abby abernathy
、Abby, Abernathy
、Abby (ABERNATHY)
などと一致します。 - 一致する文字の前後の文字は、その単語内の隣接する文字とは異なるタイプ(文字または数字)でなければなりません。辞書で
Abi
をスキャンすると、Abi904
の最初の 3 文字と一致しますが、Abigail
の最初の 3 文字とは一致しません。 - Unicode 標準の補助多言語面の文字を含む辞書の単語は、予期しない結果になる可能性があります。そのような文字の例には、絵文字、科学記号、歴史的な文字があります。
文字、数字、その他のアルファベット文字は次のように定義されます。
- 文字: Unicode 仕様の一般カテゴリが
Lu
、Ll
、Lt
、Lm
、Lo
の文字 - 数字: Unicode 仕様で一般カテゴリ
Nd
の文字 - その他のアルファベット文字: Unicode 仕様の一般カテゴリが
Nl
の文字、または Unicode 標準で定義されている補助プロパティがOther_Alphabetic
の文字
例
単純な単語リスト
通院患者の治療に使用された病室の情報を含むデータがあるとします。こうした場所は特定のデータセットで機密扱いになる可能性がありますが、機密データの保護の組み込みの検出器では検出されません。
病室のリストは次のようなものでした。
- "RM-ORANGE"
- "RM-YELLOW"
- "RM-GREEN"
C#
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
REST
次の JSON の例では、カスタムの病室番号を匿名化するためのカスタム辞書を定義しています。
JSON 入力:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"Patient was seen in RM-YELLOW then transferred to rm green."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"primitiveTransformation":{
"replaceWithInfoTypeConfig":{
}
}
}
]
}
},
"inspectConfig":{
"customInfoTypes":[
{
"infoType":{
"name":"CUSTOM_ROOM_ID"
},
"dictionary":{
"wordList":{
"words":[
"RM-GREEN",
"RM-YELLOW",
"RM-ORANGE"
]
}
}
}
]
}
}
JSON 出力:
POST でこの JSON を content:deidentify
に送信すると、次の JSON レスポンスが返されます。
{
"item":{
"value":"Patient was seen in [CUSTOM_ROOM_ID] then transferred to [CUSTOM_ROOM_ID]."
},
"overview":{
"transformedBytes":"17",
"transformationSummaries":[
{
"infoType":{
"name":"CUSTOM_ROOM_ID"
},
"transformation":{
"replaceWithInfoTypeConfig":{
}
},
"results":[
{
"count":"2",
"code":"SUCCESS"
}
],
"transformedBytes":"17"
}
]
}
}
機密データの保護によって、カスタム辞書の WordList
メッセージで指定された病室番号が正しく識別されました。2 番目の例「rm green」のように、大文字とハイフン(-
)が見つからない場合でも項目が一致することに注意してください。
例外リスト
メールアドレスなどの顧客識別子を含むログデータがあり、この情報を編集するとします。ただし、これらのログには内部開発者のメールアドレスも含まれており、これらを編集する必要はありません。
C#
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
REST
次の JSON の例では、WordList
メッセージ内のメールアドレスのサブセット(jack@example.org と jill@example.org)をリストするカスタム辞書を作成し、カスタム infoType 名 DEVELOPER_EMAIL
を割り当てています。この JSON は機密データの保護に対し、指定されたメールアドレスを無視して、検出した他のメールアドレスをその infoType(この場合は EMAIL_ADDRESS
)に対応する文字列に置き換えるよう指示します。
JSON 入力:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"jack@example.org accessed customer record of user5@example.com"
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"primitiveTransformation":{
"replaceWithInfoTypeConfig":{
}
},
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
]
}
},
"inspectConfig":{
"customInfoTypes":[
{
"infoType":{
"name":"DEVELOPER_EMAIL"
},
"dictionary":{
"wordList":{
"words":[
"jack@example.org",
"jill@example.org"
]
}
}
}
],
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
"ruleSet": [
{
"infoTypes": [
{
"name": "EMAIL_ADDRESS"
}
],
"rules": [
{
"exclusionRule": {
"excludeInfoTypes": {
"infoTypes": [
{
"name": "DEVELOPER_EMAIL"
}
]
},
"matchingType": "MATCHING_TYPE_FULL_MATCH"
}
}
]
}
]
}
}
JSON 出力:
POST でこの JSON を content:deidentify
に送信すると、次の JSON レスポンスが返されます。
{
"item":{
"value":"jack@example.org accessed customer record of [EMAIL_ADDRESS]"
},
"overview":{
"transformedBytes":"17",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"replaceWithInfoTypeConfig":{
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"17"
}
]
}
}
この出力では、user1@example.com が EMAIL_ADDRESS
infoType 検出器に一致するものとして、jack@example.org は DEVELOPER_EMAIL
カスタム infoType 検出器に一致するものとして、それぞれ正しく識別されています。EMAIL_ADDRESS
だけを変換することにしたため、jack@example.org は変更されていません。
組み込みの infoType 検出器の拡張
組み込みの infoType 検出器で正しい値が返されない場合について考えてみます。たとえば、個人名の一致を返したいときに、データセットに共通の個人名の一部が機密データの保護の組み込み PERSON_NAME
検出器で返されないとします。
機密データの保護では、次の例のようにカスタム infoType 検出器の宣言に組み込み検出器を追加することで、組み込みの infoType 検出器を強化できます。このスニペットは、組み込みの PERSON_NAME
infoType 検出器で名前「Quasimodo」が照合されるように機密データの保護を構成する方法を示しています。
C#
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
REST
... "inspectConfig":{ "customInfoTypes":[ { "infoType":{ "name":"PERSON_NAME" }, "dictionary":{ "wordList":{ "words":[ "quasimodo" ] } } } ] } ...
次のステップ
大規模なカスタム辞書について学ぶ。