機密データの保護により、テーブルなどのコンテナ構造に保存されたテキストを含む、テキスト コンテンツ内の機密データを匿名化できます。匿名化は、身元がわかる情報をデータから取り除くプロセスです。この API は、個人識別情報(PII)などの機密データを検出し、匿名化変換を使用してデータのマスキングや削除、難読化を行います。たとえば、匿名化では次のような処理を行います。
- 文字の一部またはすべてをアスタリスク(*)やハッシュ(#)などの記号で置換し、機密データをマスキングします。
- 機密データのインスタンスをトークンまたはサロゲートで置換します。
- ランダムに生成された鍵または事前定義の鍵で機密データを暗号化します。
API には、JSON を使用して HTTP 経由で情報を渡します。また、CLI やプログラミング言語で機密データの保護のクライアント ライブラリを使用することもできます。CLI の設定方法については、クイックスタートをご覧ください。JSON 形式で情報を送信する方法については、JSON クイックスタートをご覧ください。
API の概要
機密データの匿名化を行うには、Sensitive Data Protection の content.deidentify
メソッドを使用します。
匿名化 API 呼び出しには 3 つの部分があります。
- 検査するデータ: API で検査する文字列またはテーブル構造(
ContentItem
オブジェクト)。 検査対象:検索対象データの種類(または infoType)、一定の可能性しきい値を超えた結果をフィルタリングするかどうか、一定の数を超える結果は返さないかどうか、などの検出の構成情報(
InspectConfig
)を指定します。InspectConfig
オブジェクトに、スキャンする infoType を含める必要があります。指定しない場合、機密データの保護はデフォルトの infoType セット(ALL_BASIC
)をスキャンします。このセットには、不要なものが含まれている場合があります。不要な infoType をスキャンすると、リクエストに不要なレイテンシが追加される可能性があります。リクエストには
InspectConfig
オブジェクトが必要です(1 つの例外を除く)。詳細については、このページのレコード変換をご覧ください。検査結果の処理方法: 機密データの匿名化方法を定義する構成情報(
DeidentifyConfig
)。この引数については、後のセクションで詳しく説明します。
API は指定された項目を同じ形式で返しますが、機密情報が含まれるとみなされたテキストは条件に従って匿名化されます。
検出基準を指定する
情報タイプ(「infoType」)検出器は、機密データの保護が機密データ検出するために使用するメカニズムです。
機密データの保護には、いくつかの種類の infoType 検出器があります。ここではすべての種類をまとめています。
- 組み込みの infoType 検出器は、機密データの保護に組み込まれています。国またはリージョンに固有の機密データのタイプと、世界中のどこでも適用できるデータタイプに対応する検出器が含まれています。
- カスタム infoType 検出器は、ユーザー自身が作成する検出器です。カスタム infoType 検出器には、次の 3 種類があります。
- 標準のカスタム辞書検出器は、機密データの保護に対応する単純な単語リストです。含まれる単語やフレーズの数が数万個までのリストでは、標準のカスタム辞書検出器を使用します。単語リストが大幅に変更される予定がない場合、標準のカスタム辞書検出器の使用をおすすめします。
- 格納されるカスタム辞書検出器は、Cloud Storage または BigQuery に保存されている単語やフレーズの大規模なリストを使用して、機密データの保護によって生成されます。含まれる単語やフレーズの数が数千万個までの大規模なリストでは、格納されるカスタム辞書検出器を使用します。
- 正規表現(regex)検出器を使用すると、機密データの保護は正規表現パターンに基づいて一致を検出できます。
さらに、機密データの保護には、検査ルールのコンセプトも組み込まれており、次の検査ルールを使用してスキャン結果を細かく調整できます。
- 除外ルールを適用すると、組み込みまたはカスタムの infoType 検出器にルールを追加することで、返される結果の数を少なくできます。
- 起動ワードルールを適用すると、組み込みまたはカスタムの infoType 検出器にルールを追加することで、返される結果の数を増やすことや、結果の可能性の値の変更ができます。
匿名化変換
匿名化構成(DeidentifyConfig
)を設定するときは、1 つ以上の変換を指定する必要があります。変換には次の 2 つのカテゴリがあります。
InfoTypeTransformations
: 送信されたテキスト内で特定の infoType として識別された値にのみ適用される変換。RecordTransformations
: 送信された表形式のテキストデータ内で、特定の infoType として識別された値または表形式データの列全体にのみ適用される変換。
infoType 変換
リクエストごとに 1 つ以上の infoType 変換を指定できます。各 InfoTypeTransformation
オブジェクトに、次の両方を指定します。
- 変換を適用する 1 つ以上の infoType(
infoTypes[]
配列オブジェクト) - プリミティブ変換(
PrimitiveTransformation
オブジェクト)
infoType の指定はオプションですが、InspectConfig
引数に 1 つも infoType を指定しないと、変換が指定されていないすべての組み込み infoType に変換を適用されてしまいます。この方法は、パフォーマンスの低下とコストの増加の原因となる可能性があるため、おすすめしません。
プリミティブ変換
特定の infoType に適用するのか、テキスト文字列全体に適用するのかに関係なく、入力テキストに適用するプリミティブ変換を 1 つ以上指定する必要があります。以降のセクションでは、使用できる変換方法の例について説明します。機密データの保護が提供するすべての変換方法の一覧については、変換のリファレンスをご覧ください。
replaceConfig
replaceConfig
を ReplaceValueConfig
オブジェクトに設定すると、一致した入力値が指定値で置換されます。
たとえば、すべての EMAIL_ADDRESS
infoType で replaceConfig
を [email-address]
に設定し、次の文字列を機密データの保護に送信するとします。
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
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
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
を指定し、次の文字列を機密データの保護に送信したとします。
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#
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
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
を設定したとします。次の文字列が機密データの保護に送信された場合:
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
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
C#
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
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
)で構成されているとします。そして、次の文字列が機密データの保護に送信されます。
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
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
C#
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
cryptoReplaceFfxFpeConfig
CryptoReplaceFfxFpeConfig
オブジェクトに cryptoReplaceFfxFpeConfig
を設定すると、入力値がトークンで置換され、入力値の仮名化が行われます。トークンの特徴は次のとおりです。
- 暗号化された入力値です。
- 入力値と同じ長さです。
cryptoKey
で指定された暗号鍵の、FFX モードのフォーマット保持暗号化(FPE-FFX)を使用して計算されます。alphabet
で指定された文字から構成されます。有効な選択肢は次の通りです。NUMERIC
HEXADECIMAL
UPPER_CASE_ALPHA_NUMERIC
ALPHA_NUMERIC
入力値は次に従うものとします。
- 2 文字以上にするか、空の文字列にする必要があります。
alphabet
で指定された文字で構成する必要があります。alphabet
は 2~95 文字で構成できます。(95 文字のalphabet
には、US-ASCII 文字セットの印刷可能な文字がすべて含まれます。)
機密データの保護では、暗号鍵を使用して置換トークンが計算されます。この鍵は、次の 3 つの方法のいずれかで指定します。
- 暗号化せずに API リクエストに埋め込む。これは推奨されません。
- 機密データの保護が生成するようにリクエストする。
- 暗号化して API リクエストに埋め込む。
API リクエストに鍵を埋め込む場合は、鍵を作成し、Cloud Key Management Service(Cloud KMS)鍵を使用してそれをラップ(暗号化)する必要があります。返される値は、デフォルトでは Base64 でエンコードされた文字列です。この値を機密データの保護で設定するには、バイト文字列に復号する必要があります。次のコード スニペットは、この方法をいくつかの言語で示しています。 これらのスニペットに続いて、エンドツーエンドの例が示されています。
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 などの他の方法は、こうした強力なセキュリティが保証されているため、以前のデータに対する下位互換性など、長さと文字セットの維持が厳格な要件となる場合を除き、トークン化のユースケースにおすすめします。
以下は、機密データの保護を使用して、入力値をトークンに置き換えて機密データを匿名化する方法を示すいくつかの言語でのサンプルコードです。
Java
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
C#
機密データの保護用のクライアント ライブラリをインストールして使用する方法については、機密データの保護のクライアント ライブラリをご覧ください。
機密データの保護のために認証するには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
機密データの保護を使用して、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
を指定し、次の文字列が機密データの保護に送信されたとします。
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
変換を構成したとします。次の最初の列のデータを機密データの保護に送信すると、結果的に 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 歳以上の場合に限り、フィールドを削除します。以下のいずれかの変換型引数。次のいずれか 1 つを指定する必要があります。
infoTypeTransformations
: フィールドのコンテンツをフリーテキストとして扱い、InfoType
に一致するコンテンツにのみPrimitiveTransformation
を適用します。この種の変換については、このトピックの前半で説明しました。primitiveTransformation
: 指定されたプリミティブ変換(PrimitiveTransformation
オブジェクト)をフィールド全体に適用します。この種の変換については、このトピックの前半で説明しました。RecordTransformations
オブジェクトにprimitiveTransformation
のみが含まれ、infoTypeTransformations
が含まれていない場合は、リクエストにInspectConfig
オブジェクトを含める必要はありません。指定した場合、Sensitive Data Protection はそれを無視します。
フィールド変換の例
次の例では、2 回のフィールド変換を伴う projects.content.deidentify
リクエストを送信します。
最初のフィールド変換は、最初の 2 つの列(
column1
とcolumn2
)に適用されます。変換タイプはprimitiveTransformation
オブジェクト(具体的にはCryptoDeterministicConfig
)であるため、機密データの保護はフィールド全体を変換します。2 番目のフィールドの変換は 3 番目の列(
column3
)に適用されます。変換タイプはinfoTypeTransformations
オブジェクトであるため、機密データの保護は、検査構成で設定された 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 と評価された場合にレコードを抑止するだけで、データを匿名化するように機密データの保護に指示することもできます。同じリクエストでフィールド変換とレコード抑止の両方を適用できます。
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 件を超える場合、機密データの保護は次のメッセージを返します。
Too many findings to de-identify. Retry with a smaller request.
機密データの保護から返される検出結果のリストは、リクエスト内のすべての検出結果の任意のサブセットです。すべての検出結果を取得するには、リクエストをより小さなバッチに分割します。
次のステップ
匿名化ワークフローが実際のデプロイに適用する方法について学習する。
機密データの保護による機密データの削除の Codelab に取り組む。
ラップされた鍵の作成、コンテンツのトークン化、トークン化されたコンテンツの再識別の方法を示す例を確認する。
データの匿名化されたコピーのストレージ内への作成について確認する。