Sensitive Data Protection により、テーブルなどのコンテナ構造に保存されたテキストを含む、テキスト コンテンツ内の機密データを匿名化できます。匿名化は、個人を特定できる情報をデータから取り除くプロセスです。この API は、個人情報(PII)などの機密データを検出し、匿名化変換を使用してデータのマスキング、削除、難読化を行います。たとえば、匿名化では次のような処理を行います。
- 文字の一部またはすべてをアスタリスク(*)やハッシュ(#)などの記号で置換し、機密データをマスキングします。
- 機密データのインスタンスをトークンまたはサロゲートで置換します。
- ランダムに生成された鍵または事前定義の鍵で機密データを暗号化します。
API には、JSON を使用して HTTPS 経由で情報を渡します。また、CLI やプログラミング言語でSensitive Data Protection のクライアント ライブラリを使用することもできます。CLI の設定方法については、クイックスタートをご覧ください。JSON 形式で情報を送信する方法については、JSON クイックスタートをご覧ください。
API の概要
機密データを匿名化するには、Sensitive Data Protection の content.deidentify メソッドを使用します。
匿名化 API 呼び出しには 3 つの部分があります。
- 検査するデータ: API で検査する文字列またはテーブル構造(
ContentItemオブジェクト)。 検査対象: 検出構成情報(
InspectConfig)。たとえば、検索するデータの種類(または infoTypes)、特定の可能性しきい値を超える検出結果をフィルタするかどうか、特定の数の結果のみを返すかどうかなど。InspectConfigオブジェクトに、スキャンする infoType を含めるようにします。それ以外の場合、Sensitive Data Protection はデフォルトの infoType セット(ALL_BASIC)をスキャンします。これには、不要な infoType が含まれる場合があります。不要な infoType をスキャンすると、リクエストに不要なレイテンシが追加される可能性があります。リクエストには
InspectConfigオブジェクトが必要です。ただし、1 つの例外があります。詳細については、このページのレコード変換をご覧ください。検査結果の処理方法: 機密データの匿名化方法を定義する構成情報(
DeidentifyConfig)。この引数については、後のセクションで詳しく説明します。
API は指定された項目を同じ形式で返しますが、機密情報が含まれるとみなされたテキストは条件に従って匿名化されます。
検出基準を指定する
情報タイプ(「infoType」)検出機能は、Sensitive Data Protection がセンシティブ データ検出するために使用するメカニズムです。
Sensitive Data Protection には、いくつかの種類の infoType 検出機能があります。ここではすべての種類をまとめています。
- 組み込みの infoType 検出機能は、Sensitive Data Protection に組み込まれています。国またはリージョンに固有の機密データのタイプと、世界中のどこでも適用できるデータタイプに対応する検出器が含まれています。
- カスタム infoType 検出機能は、ユーザーが作成する検出機能です。カスタム infoType 検出機能には、次の 3 種類があります。
- 標準のカスタム辞書検出器は、Sensitive Data Protection が照合する単純な単語リストです。含まれる単語やフレーズの数が数万個までのリストでは、標準のカスタム辞書検出器を使用します。単語リストが大幅に変更される予定がない場合、標準のカスタム辞書検出器の使用をおすすめします。
- 格納されるカスタム辞書検出器は、Cloud Storage または BigQuery に保存されている単語やフレーズの大規模なリストを使用して、Sensitive Data Protection によって生成されます。含まれる単語やフレーズの数が数千万個までの大規模なリストでは、格納されるカスタム辞書検出器を使用します。
- 正規表現(regex)検出機能を使用すると、Sensitive Data Protection は正規表現パターンに基づいて一致を検出できます。
スキャン結果を絞り込むには、検査ルールを作成します。
匿名化変換
匿名化構成(DeidentifyConfig)を設定するときは、1 つ以上の変換を指定する必要があります。変換には次の 2 つのカテゴリがあります。
InfoTypeTransformations: 送信されたテキスト内で特定の infoType として識別された値にのみ適用される変換。RecordTransformations: 送信された表形式のテキストデータ内で、特定の infoType として識別された値または表形式データの列全体にのみ適用される変換。
infoType 変換
リクエストごとに 1 つ以上の infoType 変換を指定できます。各 InfoTypeTransformation オブジェクトに、次の両方を指定します。
- 変換を適用する 1 つ以上の infoType(
infoTypes[]配列オブジェクト) - プリミティブ変換(
PrimitiveTransformationオブジェクト)
infoType の指定はオプションですが、InspectConfig 引数に 1 つも infoType を指定しないと、変換が指定されていないすべての組み込み infoType に変換を適用されてしまいます。この方法は、パフォーマンスの低下とコストの増加の原因となる可能性があるため、おすすめしません。
プリミティブ変換
特定の infoType に適用するのか、テキスト文字列全体に適用するのかに関係なく、入力テキストに適用するプリミティブ変換を 1 つ以上指定する必要があります。以降のセクションでは、使用可能な変換方法の例について説明します。Sensitive Data Protection が提供するすべての変換方法の一覧については、変換のリファレンスをご覧ください。
replaceConfig
replaceConfig を ReplaceValueConfig オブジェクトに設定すると、一致した入力値が指定値で置換されます。
たとえば、すべての EMAIL_ADDRESS infoType で replaceConfig を [email-address] に設定し、次の文字列を Sensitive Data Protection に送信するとします。
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
次の文字列が返されます。
My name is Alicia Abernathy, and my email address is [email-address].
次の JSON の例と、いくつかの言語でのコードは、API リクエストの作成方法と、DLP API の戻り値を示しています。
Python
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
REST
JSON で DLP API を使用する方法については、JSON クイックスタートをご覧ください。
JSON 入力:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"replaceConfig":{
"newValue":{
"stringValue":"[email-address]"
}
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
JSON 出力:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is [email-address]."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"replaceConfig":{
"newValue":{
"stringValue":"[email-address]"
}
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
redactConfig
redactConfig を指定すると、値が完全に削除されます。redactConfig メッセージに引数はありません。指定すると、変換が有効になります。
たとえば、すべての EMAIL_ADDRESS infoType に redactConfig を指定し、次の文字列を Sensitive Data Protection に送信したとします。
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
次の文字列が返されます。
My name is Alicia Abernathy, and my email address is .
次の例は、API リクエストの作成方法と、DLP API の戻り値を示しています。
C#
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
REST
JSON 入力:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"redactConfig":{
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
JSON 出力:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is ."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"redactConfig":{
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
characterMaskConfig
characterMaskConfig を CharacterMaskConfig オブジェクトに設定すると、指定した文字数が固定文字で置換され、文字列が部分的にマスキングされます。マスキングは、文字列の先頭または末尾から開始できます。この変換は、長整数などの数値型にも対応しています。
CharacterMaskConfig オブジェクトには、次に示す複数の独自の引数があります。
maskingCharacter: 機密値の各文字のマスキングに使用する文字。たとえば、アスタリスク(*)またはハッシュ(#)を指定して、クレジット カード番号などの一連の番号をマスキングできます。numberToMask: マスキングする文字数。この値を設定しない場合、一致するすべての文字がマスクされます。reverseOrder: 文字を逆順でマスキングするかどうかを指定します。reverseOrderを true に設定すると、一致した値の文字が、値の末尾から先頭に向かってマスキングされます。false に設定すると、値の先頭からマスキングされます。charactersToIgnore[]: 値のマスキング時にスキップする、1 つ以上の文字。たとえばここでハイフンを指定すると、電話番号をマスキングする際にハイフンをそのまま残せます。また、マスキングする際に無視する共通の文字グループ(CharsToIgnore)も指定できます。
たとえば、EMAIL_ADDRESS の infoType を、「.」と「@」の文字を除いて、「#」でマスクするようにcharacterMaskConfigを設定したとします。次の文字列が Sensitive Data Protection に送信された場合:
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
返される文字列は次のようになります。
My name is Alicia Abernathy, and my email address is ##########@#######.###.
以下の例は、DLP API を使用してマスキング手法で機密データを匿名化する方法を示しています。
Java
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
C#
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
REST
次の JSON の例は、API リクエストの作成方法と、DLP API で返されるものを示しています。
JSON 入力:
POST https://dlp.googleapis.com/v2/projects/[PROJECT_ID]/content:deidentify?key={YOUR_API_KEY}
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is aabernathy@example.com."
},
"deidentifyConfig":{
"infoTypeTransformations":{
"transformations":[
{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
],
"primitiveTransformation":{
"characterMaskConfig":{
"maskingCharacter":"#",
"reverseOrder":false,
"charactersToIgnore":[
{
"charactersToSkip":".@"
}
]
}
}
}
]
}
},
"inspectConfig":{
"infoTypes":[
{
"name":"EMAIL_ADDRESS"
}
]
}
}
JSON 出力:
{
"item":{
"value":"My name is Alicia Abernathy, and my email address is ##########@#######.###."
},
"overview":{
"transformedBytes":"22",
"transformationSummaries":[
{
"infoType":{
"name":"EMAIL_ADDRESS"
},
"transformation":{
"characterMaskConfig":{
"maskingCharacter":"#",
"charactersToIgnore":[
{
"charactersToSkip":".@"
}
]
}
},
"results":[
{
"count":"1",
"code":"SUCCESS"
}
],
"transformedBytes":"22"
}
]
}
}
cryptoHashConfig
cryptoHashConfig を CryptoHashConfig オブジェクトに設定すると、暗号学的ハッシュを使用してサロゲート値を生成することで、入力値の仮名化が実行されます。
この方法では、暗号化された「ダイジェスト」(ハッシュ値)で入力値を置き換えます。ダイジェストは、入力値の SHA-256 ハッシュを取って計算されます。ハッシュの作成で使用される暗号鍵は CryptoKey オブジェクトで、サイズは 32 バイトまたは 64 バイトでなければなりません。
この方法では、ハッシュされた出力の base64 エンコード表現を出力します。現時点では、ハッシュできるのは文字列と整数値のみです。
たとえば、すべての EMAIL_ADDRESS infoType に cryptoHashConfig を指定し、CryptoKey オブジェクトがランダムに生成された鍵(TransientCryptoKey)で構成されているとします。そして、次の文字列が Sensitive Data Protection に送信されます。
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
暗号的に生成されて返される文字列は、次のようになります。
My name is Alicia Abernathy, and my email address is 41D1567F7F99F1DC2A5FAB886DEE5BEE.
生成される 16 進文字列は暗号化されているため、上記のものとは異なります。
dateShiftConfig
DateShiftConfig オブジェクトに dateShiftConfig を設定すると、日付をランダムな日数だけシフトすることによって、日付入力値の日付シフトが行われます。
日付シフト手法では、日付のセットがランダムにシフトされますが、期間の順序と持続時間は保持されます。通常、日付シフトは、個人またはエンティティのコンテキストで行われます。特定の個人の日付はすべて同じシフト差異でシフトされますが、別の個人には異なるシフト差異が使用されます。
日付シフトの詳細については、日付シフトの概念トピックをご覧ください。
以下に、DLP API を使用して日付の匿名化(日付シフト)を行うサンプルコードをいくつかの言語で示します。
Java
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
C#
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
cryptoReplaceFfxFpeConfig
CryptoReplaceFfxFpeConfig オブジェクトに cryptoReplaceFfxFpeConfig を設定すると、入力値がトークンで置換され、入力値の仮名化が行われます。トークンの特徴は次のとおりです。
- 暗号化された入力値です。
- 入力値と同じ長さです。
cryptoKeyで指定された暗号鍵の、FFX モードのフォーマット保持暗号化(FPE-FFX)を使用して計算されます。alphabetで指定された文字から構成されます。有効な選択肢は次の通りです。NUMERICHEXADECIMALUPPER_CASE_ALPHA_NUMERICALPHA_NUMERIC
入力値は次に従うものとします。
- 2 文字以上にするか、空の文字列にする必要があります。
alphabetで指定された文字で構成する必要があります。alphabetは 2~95 文字で構成できます。(95 文字のalphabetには、US-ASCII 文字セットの印刷可能な文字がすべて含まれます。)
機密データの保護では、暗号鍵を使用して置換トークンが計算されます。この鍵は、次の 3 つの方法のいずれかで指定します。
- 暗号化せずに API リクエストに埋め込む。これは推奨されません。
- Sensitive Data Protection が生成するようにリクエストする。
- 暗号化して API リクエストに埋め込む。
API リクエストに鍵を埋め込む場合は、鍵を作成し、Cloud Key Management Service(Cloud KMS)鍵を使用してそれをラップ(暗号化)する必要があります。返される値は、デフォルトでは Base64 でエンコードされた文字列です。この値を Sensitive Data Protection で設定するには、バイト文字列にデコードする必要があります。次のコード スニペットは、この方法をいくつかの言語で示しています。 これらのスニペットに続いて、エンドツーエンドの例が示されています。
Java
KmsWrappedCryptoKey.newBuilder()
.setWrappedKey(ByteString.copyFrom(BaseEncoding.base64().decode(wrappedKey)))
Python
# The wrapped key is base64-encoded, but the library expects a binary
# string, so decode it here.
import base64
wrapped_key = base64.b64decode(wrapped_key)
PHP
// Create the wrapped crypto key configuration object
$kmsWrappedCryptoKey = (new KmsWrappedCryptoKey())
->setWrappedKey(base64_decode($wrappedKey))
->setCryptoKeyName($keyName);
C#
WrappedKey = ByteString.FromBase64(wrappedKey)
Cloud KMS を使用したデータの暗号化と復号の詳細については、データの暗号化と復号をご覧ください。
設計上、FPE-FFX は入力テキストの長さと文字セットを保持します。つまり、認証と初期化ベクトルがないため、出力トークンは長くなると想定されます。AES-SIV などの他の方法は、こうした強力なセキュリティが保証されているため、以前のデータに対する下位互換性など、長さと文字セットの維持が厳格な要件となる場合を除き、トークン化のユースケースにおすすめします。
以下は、Sensitive Data Protection を使用して、入力値をトークンに置き換えてセンシティブ データを匿名化する方法を示すいくつかの言語でのサンプルコードです。
Java
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
C#
Sensitive Data Protection 用のクライアント ライブラリをインストールして使用する方法については、Sensitive Data Protection のクライアント ライブラリをご覧ください。
Sensitive Data Protection の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Sensitive Data Protection を使用して、CryptoReplaceFfxFpeConfig 変換方法を通じて匿名化されたセンシティブ データを再識別する方法を示すコードサンプルについては、フォーマット保持暗号化: 再識別の例をご覧ください。
fixedSizeBucketingConfig
バケット変換(これと bucketingConfig)は、数値データを範囲に「バケット化」してマスクします。結果の数値範囲は、下限、ハイフン、上限から構成されるハイフン付きの文字列になります。
FixedSizeBucketingConfig オブジェクトに fixedSizeBucketingConfig を設定すると、固定サイズの範囲に基づいて入力値がバケット化されます。FixedSizeBucketingConfig オブジェクトは次の要素から構成されます。
lowerBound: すべてのバケットの下限値。これより小さい値は 1 つのバケットにグループ化されます。upperBound: すべてのバケットの上限値。これより大きい値は 1 つのバケットにグループ化されます。bucketSize: 最小バケットと最大バケット以外の、各バケットのサイズ。
たとえば、lowerBound が 10、upperBound が 89、bucketSize が 10 に設定されている場合、10 未満、10~20、20~30、30〜40、40〜50、50〜60、60〜70、70〜80、80〜89、89 超、のバケットが使用されます。
バケット化の概念の詳細については、一般化とバケット化をご覧ください。
bucketingConfig
bucketingConfig 変換は、もう 1 つのバケット変換 fixedSizeBucketingConfig よりも柔軟性があります。上限値、下限値、均等サイズのバケットを作成する間隔値を指定せずに、作成するバケットの最大値と最小値を指定します。最大値と最小値のペアは同じ型でなければなりません。
BucketingConfig オブジェクトに bucketingConfig を設定すると、カスタム バケットが指定されます。BucketingConfig オブジェクトは、Bucket オブジェクトの buckets[] 配列から構成されます。各 Bucket オブジェクトは次の要素から構成されます。
min: バケットの範囲の下限。下限のないバケットを作成する場合、この値は省略します。max: バケットの範囲の上限。上限のないバケットを作成する場合、この値は省略します。replacementValue: 元の値が下限と上限の範囲内の場合に置換する値。replacementValueを指定しない場合は、代わりにハイフンで区切られたmin-max範囲が使用されます。
定義された範囲外の値の場合は、戻り値の TransformationSummary にエラー メッセージが含まれます。
たとえば、次の設定の bucketingConfig 変換について考えてみましょう。
"bucketingConfig":{
"buckets":[
{
"min":{
"integerValue":"1"
},
"max":{
"integerValue":"30"
},
"replacementValue":{
"stringValue":"LOW"
}
},
{
"min":{
"integerValue":"31"
},
"max":{
"integerValue":"65"
},
"replacementValue":{
"stringValue":"MEDIUM"
}
},
{
"min":{
"integerValue":"66"
},
"max":{
"integerValue":"100"
},
"replacementValue":{
"stringValue":"HIGH"
}
}
]
}
これにより、次のような動作が定義されます。
- 1〜30 の整数値は、
LOWで置換することでマスキングされます。 - 31〜65 の整数値は、
MEDIUMで置換することでマスキングされます。 - 66~100 の整数値は、
HIGHで置換することでマスキングされます。
バケット化の概念の詳細については、一般化とバケット化をご覧ください。
replaceWithInfoTypeConfig
replaceWithInfoTypeConfig を指定すると、一致した値が infoType 名に置換されます。replaceWithInfoTypeConfig メッセージに引数はありません。指定すると、変換が有効になります。
たとえば、すべての EMAIL_ADDRESS infoType に replaceWithInfoTypeConfig を指定し、次の文字列を Sensitive Data Protection に送信したとします。
My name is Alicia Abernathy, and my email address is aabernathy@example.com.
次の文字列が返されます。
My name is Alicia Abernathy, and my email address is EMAIL_ADDRESS.
timePartConfig
TimePartConfig オブジェクトに timePartConfig を設定すると、一致した値のうち Date、Timestamp、TimeOfDay の値を含む部分が保持されます。TimePartConfig オブジェクトは partToExtract 引数で構成され、TimePart で列挙された値(年、月、日にちなど)に設定できます。
たとえば、partToExtract を YEAR に設定して timePartConfig 変換を構成したとします。次の最初の列のデータを Sensitive Data Protection に送信すると、結果的に 2 番目の列の値に変換されます。
| 元の値 | 変換後の値 |
|---|---|
9/21/1976 |
1976 |
6/7/1945 |
1945 |
1/20/2009 |
2009 |
7/4/1776 |
1776 |
8/1/1984 |
1984 |
4/21/1982 |
1982 |
レコード変換
レコード変換(RecordTransformations オブジェクト)は、特定の infoType と識別された表形式データ内の値にのみ適用されます。RecordTransformations には、さらに 2 つのサブカテゴリがあります。
fieldTransformations[]: さまざまなフィールド変換を適用する変換。recordSuppressions[]: 完全に抑止されるレコードを定義するルール。recordSuppressions[]内で抑止ルールに一致するレコードは、出力から除外されます。
フィールド変換
各 FieldTransformation オブジェクトには 3 つの引数があります。
fields: 変換が適用される 1 つ以上の入力フィールド(FieldIDオブジェクト)。condition: 変換の適用で true と評価される条件(RecordConditionオブジェクト)。たとえば、あるレコードの郵便番号列が特定の範囲にある場合に限り、同じレコードの年齢列にバケット変換を適用します。または、誕生日フィールドの年齢が 85 歳以上の場合に限り、フィールドを削除します。以下のいずれかの変換型引数。いずれかを指定する必要があります。
infoTypeTransformations: フィールドのコンテンツをフリーテキストとして扱い、InfoTypeに一致するコンテンツにのみPrimitiveTransformationを適用します。この種の変換については、このトピックの前半で説明しました。primitiveTransformation: 指定されたプリミティブ変換(PrimitiveTransformationオブジェクト)をフィールド全体に適用します。この種の変換については、このトピックの前半で説明しました。RecordTransformationsオブジェクトにprimitiveTransformationのみが含まれ、infoTypeTransformationsが含まれていない場合は、リクエストにInspectConfigオブジェクトを含める必要はありません。指定した場合、Sensitive Data Protection はそれを無視します。
フィールド変換の例
次の例では、2 回のフィールド変換を伴う projects.content.deidentify リクエストを送信します。
最初のフィールド変換は、最初の 2 つの列(
column1とcolumn2)に適用されます。変換タイプはprimitiveTransformationオブジェクト(具体的にはCryptoDeterministicConfig)であるため、Sensitive Data Protection はフィールド全体を変換します。2 番目のフィールドの変換は 3 番目の列(
column3)に適用されます。変換タイプはinfoTypeTransformationsオブジェクトであるため、Sensitive Data Protection は、検査構成で設定された infoType と一致するコンテンツのみにプリミティブ変換(具体的にはReplaceWithInfoTypeConfig)を適用します。
リクエストのデータを使用する前に、次のように置き換えます。
-
PROJECT_ID: 実際の Google Cloud プロジェクト ID。 プロジェクト ID は英数字からなる文字列です(例:my-project)。
HTTP メソッドと URL:
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/content:deidentify
リクエストの本文(JSON):
{
"item": {
"table": {
"headers": [
{
"name": "column1"
},
{
"name": "column2"
},
{
"name": "column3"
}
],
"rows": [
{
"values": [
{
"stringValue": "Example string 1"
},
{
"stringValue": "Example string 2"
},
{
"stringValue": "My email address is dani@example.org"
}
]
},
{
"values": [
{
"stringValue": "Example string 1"
},
{
"stringValue": "Example string 3"
},
{
"stringValue": "My email address is cruz@example.org"
}
]
}
]
}
},
"deidentifyConfig": {
"recordTransformations": {
"fieldTransformations": [
{
"fields": [
{
"name": "column1"
},
{
"name": "column2"
}
],
"primitiveTransformation": {
"cryptoDeterministicConfig": {
"cryptoKey": {
"unwrapped": {
"key": "YWJjZGVmZ2hpamtsbW5vcA=="
}
}
}
}
},
{
"fields": [
{
"name": "column3"
}
],
"infoTypeTransformations": {
"transformations": [
{
"primitiveTransformation": {
"replaceWithInfoTypeConfig": {}
}
}
]
}
}
]
}
},
"inspectConfig": {
"infoTypes": [
{
"name": "EMAIL_ADDRESS"
}
]
}
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{
"item": {
"table": {
"headers": [
{
"name": "column1"
},
{
"name": "column2"
},
{
"name": "column3"
}
],
"rows": [
{
"values": [
{
"stringValue": "AWttmGlln6Z2MFOMqcOzDdNJS52XFxOOZsg0ckDeZzfc"
},
{
"stringValue": "AUBTE+sQB6eKZ5iD3Y0Ss682zANXbijuFl9KL9ExVOTF"
},
{
"stringValue": "My email address is [EMAIL_ADDRESS]"
}
]
},
{
"values": [
{
"stringValue": "AWttmGlln6Z2MFOMqcOzDdNJS52XFxOOZsg0ckDeZzfc"
},
{
"stringValue": "AU+oD2pnqUDTLNItE8RplY3E0fTHeO4rZkX4GeFHN2CI"
},
{
"stringValue": "My email address is [EMAIL_ADDRESS]"
}
]
}
]
}
},
"overview": {
"transformedBytes": "96",
"transformationSummaries": [
{
"field": {
"name": "column1"
},
"results": [
{
"count": "2",
"code": "SUCCESS"
}
],
"fieldTransformations": [
{
"fields": [
{
"name": "column1"
},
{
"name": "column2"
}
],
"primitiveTransformation": {
"cryptoDeterministicConfig": {
"cryptoKey": {
"unwrapped": {
"key": "YWJjZGVmZ2hpamtsbW5vcA=="
}
}
}
}
}
],
"transformedBytes": "32"
},
{
"field": {
"name": "column2"
},
"results": [
{
"count": "2",
"code": "SUCCESS"
}
],
"fieldTransformations": [
{
"fields": [
{
"name": "column1"
},
{
"name": "column2"
}
],
"primitiveTransformation": {
"cryptoDeterministicConfig": {
"cryptoKey": {
"unwrapped": {
"key": "YWJjZGVmZ2hpamtsbW5vcA=="
}
}
}
}
}
],
"transformedBytes": "32"
},
{
"infoType": {
"name": "EMAIL_ADDRESS",
"sensitivityScore": {
"score": "SENSITIVITY_MODERATE"
}
},
"field": {
"name": "column3"
},
"results": [
{
"count": "2",
"code": "SUCCESS"
}
],
"fieldTransformations": [
{
"fields": [
{
"name": "column3"
}
],
"infoTypeTransformations": {
"transformations": [
{
"primitiveTransformation": {
"replaceWithInfoTypeConfig": {}
}
}
]
}
}
],
"transformedBytes": "32"
}
]
}
}レコードの抑止
フィールド データに変換を適用するだけでなく、特定の抑止条件が true と評価された場合にレコードを抑止するだけで、Sensitive Data Protection にデータを匿名化するように指示することもできます。同じリクエストでフィールド変換とレコード抑止の両方を適用できます。
RecordTransformations オブジェクトの recordSuppressions メッセージを、1 つ以上の RecordSuppression オブジェクトの配列に設定します。
各 RecordSuppression オブジェクトには RecordCondition オブジェクトが 1 つ含まれ、このオブジェクトには同様に Expressions オブジェクトが 1 つ含まれます。
Expressions オブジェクトには次の要素が含まれます。
logicalOperator:LogicalOperator列挙型の 1 つ。conditions: 1 つ以上のConditionオブジェクトの配列を含むConditionsオブジェクト。Conditionは、フィールド値と他の値の比較です(値の型はどちらもstring、boolean、integer、double、Timestamp、TimeofDayのいずれか)。
比較条件が true と評価されると、レコードが抑止されます。その逆も同じです。比較値の型が異なる場合、警告が表示され、条件が false と評価されます。
元に戻すことが可能な変換
CryptoReplaceFfxFpeConfig や CryptoDeterministicConfig といった infoType 変換を使用してデータを匿名化する場合、データの匿名化に使用した CryptoKey が存在している限り、そのデータは再識別できます。
詳細については、暗号ベースのトークン化変換をご覧ください。
検出結果の数を制限する
リクエストの検出結果が 3,000 件を超える場合、Sensitive Data Protection は次のメッセージを返します。
Too many findings to de-identify. Retry with a smaller request.
Sensitive Data Protection から返される検出結果のリストは、リクエスト内のすべての検出結果の任意のサブセットです。すべての検出結果を取得するには、リクエストをより小さなバッチに分割します。
次のステップ
匿名化ワークフローが実際のデプロイに適用する方法について学習する。
Sensitive Data Protection によるセンシティブ データの削除の Codelab に取り組む。
ラップされた鍵の作成、コンテンツのトークン化、トークン化されたコンテンツの再識別の方法を示す例を確認する。
データの匿名化されたコピーのストレージ内への作成について確認する。